Trong Firebase Data Connect, bạn có thể thực hiện các thao tác tải và cập nhật dữ liệu hàng loạt theo nhiều cách, tuỳ thuộc vào quy trình làm việc và môi trường của bạn:
Trong quá trình tạo mẫu cục bộ, khi bạn đang thử các giản đồ thay thế, bạn có thể tạo và gọi các đột biến gieo dữ liệu trong môi trường phát triển cục bộ bằng cách sử dụng tiện ích Data Connect VS Code, trình Data Connect mô phỏng và một thực thể cơ sở dữ liệu cục bộ.
Trong quá trình phát triển sản xuất, với một giản đồ ổn định, khi thực hiện các luồng CI/CD lớn hơn và quản lý dữ liệu sản xuất, bạn có 2 lựa chọn:
Phương pháp ưu tiên là sử dụng Firebase Admin SDK, một tập hợp các thư viện chạy trong môi trường đặc quyền.
Bạn cũng có thể sử dụng các công cụ SQL với thực thể Cloud SQL để thực hiện các thao tác tải và cập nhật hàng loạt, miễn là bạn đang sửa đổi dữ liệu chứ không phải giản đồ cơ sở dữ liệu. Việc sửa đổi trực tiếp giản đồ cơ sở dữ liệu bằng các công cụ SQL có thể làm hỏng giản đồ Data Connect và trình kết nối.
Tạo mẫu cục bộ: gieo dữ liệu trong các thực thể cục bộ
Trong hướng dẫn Bắt đầu, bạn sẽ thiết lập một ứng dụng để thêm một bản ghi vào một bảng bằng cách sử dụng đột biến chèn đặc biệt.
Để có thể sử dụng được, ứng dụng đánh giá phim cần có dữ liệu về phim, bài đánh giá và người dùng để tạo mẫu các truy vấn và đột biến sử dụng các phép nối và các thao tác khác trên nhiều bảng có dữ liệu thực tế. Bạn có thể mở rộng giản đồ và gieo dữ liệu vào cơ sở dữ liệu.
Môi trường tạo mẫu của bạn cần có mã để thực hiện thao tác gieo dữ liệu. Hướng dẫn này cung cấp một số mẫu minh hoạ:
- Sử dụng
_insertManyvà_upsertManytrên các bảng riêng lẻ - Sử dụng
_insertManytrên các bảng liên quan
Cập nhật giản đồ ứng dụng đánh giá phim
Bạn có thể sử dụng các đột biến _insertMany và _upsertMany để cập nhật từng bảng cơ sở dữ liệu một hoặc cập nhật nhiều bảng liên quan theo mối quan hệ nối. Giản đồ ứng dụng đánh giá phim mở rộng giúp minh hoạ các trường hợp sử dụng và ví dụ này được trình bày bên dưới. Giản đồ này mở rộng schema.gql vượt ra ngoài
loại Movie ban đầu để bao gồm các loại Actor và MovieActor, nhờ đó, chúng ta có thể
tạo mẫu các truy vấn phức tạp hơn.
# Actors
# Suppose an actor can participate in multiple movies and movies can have multiple actors
# Movie - Actors (or vice versa) is a many to many relationship
type Actor @table {
id: UUID!
imageUrl: String!
name: String! @col(name: "name", dataType: "varchar(30)")
}
# Join table for many-to-many relationship for movies and actors
# The 'key' param signifies the primary key(s) of this table
# In this case, the keys are [movieId, actorId], the generated fields of the reference types [movie, actor]
type MovieActor @table(key: ["movie", "actor"]) {
# @ref creates a field in the current table (MovieActor) that holds the primary key of the referenced type
# In this case, @ref(fields: "movieId", references: "id") is implied
movie: Movie!
# movieId: UUID! <- this is created by the implied @ref
actor: Actor!
# actorId: UUID! <- this is created by the implied @ref
role: String! # "main" or "supporting"
}
Viết các đột biến để gieo dữ liệu ở trạng thái ban đầu
Trong quá trình tạo mẫu, khi các truy vấn và đột biến cần được kiểm thử dựa trên một loạt giá trị riêng biệt, bạn có thể điền dữ liệu bằng nhiều bản ghi. Ví dụ: bạn có thể muốn thêm nhiều bản ghi phim với nhiều loại thể loại và điểm xếp hạng để kiểm thử so sánh và lọc.
Gieo dữ liệu vào bảng Movie và Actor
Tuỳ thuộc vào giai đoạn tạo mẫu, bạn có thể sử dụng cùng một kỹ thuật
được giới thiệu trong hướng dẫn Bắt đầu để chèn một hoặc hai bản ghi: tức là bạn
có thể sử dụng CodeLenses trong tiện ích Data Connect VS Code để tạo các đột biến _insert,
mã hoá cứng dữ liệu và Chạy các đột biến đó trong VS Code.
Cuối cùng, việc thêm nhiều bản ghi vào một bảng bằng thao tác
_insertMany sẽ hợp lý hơn. Trong ví dụ về ứng dụng đánh giá phim, thao tác này sẽ chèn một tập hợp dữ liệu ban đầu vào Movie và Actor.
Để thực thi các đột biến sau, hãy sử dụng tiện ích Data Connect VS Code, trong chế độ xem trình chỉnh sửa tệp thích hợp, hãy nhấp vào nút CodeLens Chạy (Sản xuất) hoặc Chạy (Cục bộ), tuỳ thuộc vào việc bạn đang tạo mẫu bằng dịch vụ sản xuất hay cơ sở dữ liệu cục bộ.
# insertMany for Movie
# 2 records shown
mutation {
movie_insertMany(data: [
{
id: "550e8400-e29b-41d4-a716-446655440000",
title: "Inception",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Finception.jpg?alt=media&token=07b09781-b302-4623-a5c3-1956d0143168",
genre: "sci-fi",
},
{
id: "550e8400-e29b-41d4-a716-446655440001",
title: "The Matrix",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_matrix.jpg?alt=media&token=4975645d-fef8-409e-84a5-bcc1046e2059",
genre: "action",
}
])
}
# insertMany for Actor
# 2 records shown
mutation {
actor_insertMany(data: [
{
id: "123e4567-e89b-12d3-a456-426614174000",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fdicaprio.jpeg?alt=media&token=452e030a-efa5-4ef4-bb81-502b23241316",
name: "Leonardo DiCaprio"
},
{
id: "123e4567-e89b-12d3-a456-426614174001",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fkeanu.jpg?alt=media&token=6056520c-ef3e-4823-aad0-108aab163115",
name: "Keanu Reeves"
}
])
}
Gieo dữ liệu vào bảng nối MovieActor
Để kiểm thử các truy vấn và đột biến bằng cách sử dụng các phép nối và các thao tác phức tạp khác, bạn có thể thêm nhiều bản ghi vào bảng MovieActor.
Tại đây, khi cập nhật nhiều bảng trong loại mối quan hệ này, bạn có thể thêm chỉ thị @transaction để đảm bảo quá trình cập nhật hoàn tất đúng cách.
mutation @transaction {
movie_insertMany(data: [
{
id: "550e8400-e29b-41d4-a716-446655440000",
title: "Inception",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Finception.jpg?alt=media&token=07b09781-b302-4623-a5c3-1956d0143168",
genre: "sci-fi",
},
{
id: "550e8400-e29b-41d4-a716-446655440001",
title: "The Matrix",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_matrix.jpg?alt=media&token=4975645d-fef8-409e-84a5-bcc1046e2059",
genre: "action",
}
])
actor_insertMany(data: [
{
id: "123e4567-e89b-12d3-a456-426614174000",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fdicaprio.jpeg?alt=media&token=452e030a-efa5-4ef4-bb81-502b23241316",
name: "Leonardo DiCaprio"
},
{
id: "123e4567-e89b-12d3-a456-426614174001",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fkeanu.jpg?alt=media&token=6056520c-ef3e-4823-aad0-108aab163115",
name: "Keanu Reeves"
}
])
}
Viết một đột biến để đặt lại dữ liệu gieo
Trong quá trình tạo mẫu và thực hiện CI/CD, việc đặt lại dữ liệu về trạng thái ban đầu để thực thi một loạt kiểm thử mới trên một tập hợp dữ liệu mới có thể hữu ích.
Để thực hiện việc này, nếu mã nguyên mẫu của bạn không thêm bản ghi vào bảng, hãy sử dụng đột biến
_upsertMany do Data Connect cung cấp.
Trong ví dụ sau, movie_upsertMany được gọi bằng các giá trị ban đầu để cập nhật các bản ghi phim về trạng thái ban đầu.
mutation {
# Execute an upsertMany operation to update the Movie table
movie_upsertMany(data: [
{
id: "550e8400-e29b-41d4-a716-446655440000",
title: "Inception",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Finception.jpg?alt=media&token=07b09781-b302-4623-a5c3-1956d0143168",
genre: "sci-fi",
},
{
id: "550e8400-e29b-41d4-a716-446655440001",
title: "The Matrix",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_matrix.jpg?alt=media&token=4975645d-fef8-409e-84a5-bcc1046e2059",
genre: "action",
}
…
}
Phát triển sản xuất: sử dụng Admin SDK để điền và cập nhật
Firebase Admin SDK có sẵn khi bạn muốn làm việc trong môi trường đặc quyền. Đây là một trường hợp sử dụng quan trọng khi bạn muốn tải hàng nghìn bản ghi, do tính chất quan trọng của các thao tác dữ liệu hàng loạt trên dữ liệu sản xuất.
Cài đặt Firebase Admin SDK
Ngay cả khi bạn chủ yếu làm việc cục bộ, Firebase vẫn khuyên bạn nên thiết lập Admin SDK để có thể sử dụng Firebase Data Connect từ một môi trường đặc quyền, bao gồm cả môi trường cục bộ. Bạn cần thiết lập Admin SDK cho Node.js.
Bạn có thể tìm hiểu thêm về cách sử dụng SDK dành cho quản trị viên trong các trường hợp Data Connect sử dụng khác.
Thực hiện các thao tác tải và cập nhật hàng loạt dữ liệu sản xuất
API để quản lý dữ liệu hàng loạt sẽ tạo các đột biến GraphQL thay mặt bạn, thay vì yêu cầu bạn tạo các chuỗi mutation {...} bằng API executeGraphQL được mô tả trước đó để thêm một vài hàng ở đây và ở đó cục bộ.
Một lợi ích chính của API quản trị là khả năng quản lý và sử dụng lại riêng biệt các mảng dữ liệu cho các luồng CI/CD hoặc thiết lập các tệp dữ liệu hàng loạt lớn cho dữ liệu sản xuất.
Các đoạn mã sau minh hoạ cách thiết lập tập lệnh dữ liệu hàng loạt.
import { initializeApp } from 'firebase-admin/app';
import { getDataConnect } from 'firebase-admin/data-connect';
const app = initializeApp();
const dc = getDataConnect({ location: "us-west2", serviceId: "my-service" });
const data = [
{
id: "550e8400-e29b-41d4-a716-446655440000",
title: "Inception",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Finception.jpg?alt=media&token=07b09781-b302-4623-a5c3-1956d0143168",
genre: "sci-fi",
},
{
id: "550e8400-e29b-41d4-a716-446655440001",
title: "The Matrix",
imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_matrix.jpg?alt=media&token=4975645d-fef8-409e-84a5-bcc1046e2059",
genre: "action",
}
];
// Methods of the bulk operations API
const resp = await dc.insert("movie" /*table name*/, data[0]);
// Or
const resp = await dc.insertMany("movie" /*table name*/, data);
// Or
const resp = await dc.upsert("movie" /*table name*/, data[0]);
// Or
const resp = await dc.upsertMany("movie" /*table name*/, data);
Phát triển sản xuất: sử dụng SQL để cập nhật dữ liệu hàng loạt
Khi đang làm việc với một giản đồ ổn định trong quá trình sản xuất và không sửa đổi giản đồ, bạn có thể làm việc trong thực thể Cloud SQL để quản lý các thao tác tải và cập nhật dữ liệu.
Tham khảo hướng dẫn Cloud SQL cho PostgreSQL để nhập dữ liệu.
Bước tiếp theo là gì?
- Tìm hiểu về cách tích hợp Admin SDK vào các Data Connect dự án.