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 hoạt động tạo mẫu cục bộ, khi bạn đang thử các lược đồ 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 VS Code, trình mô phỏng Data Connect và một phiên bản cơ sở dữ liệu cục bộ.
Trong phát triển sản xuất, với một lược đồ ổn định, khi thực hiện các quy trình 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 phiên bản 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 đồ và trình kết nối Data Connect.
Tạo mẫu cục bộ: gieo dữ liệu trong các phiên bản cục bộ
Trong Hướng dẫn bắt đầu, bạn thiết lập một ứng dụng để thêm một bản ghi vào một bảng duy nhất bằng cách sử dụng một độ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 cho các truy vấn và đột biến tạo mẫu sử dụng các thao tác kết hợp 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 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 việc gieo dữ liệu. Hướng dẫn này cung cấp một số mẫu minh hoạ:
- Sử dụng
_insertMany
và_upsertMany
trên từng bảng - Sử dụng
_insertMany
trên các bảng có 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 lần hoặc cập nhật nhiều bảng có liên quan theo mối quan hệ kết hợp. Dưới đây là một 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. Thao tác này sẽ mở rộng schema.gql
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 cho 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ần kiểm thử các truy vấn và đột biến dựa trên một loạt giá trị rời rạc, 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à mức phân loại để kiểm tra các so sánh và bộ lọc.
Gieo dữ liệu vào các 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 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 bộ 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 Firebase của 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 (Phát hành công khai) 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ụ phát hành công khai 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 kết hợp MovieActor
Để kiểm thử các truy vấn và đột biến bằng cách sử dụng các thao tác kết hợp 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
.
Ở đây, khi cập nhật nhiều bảng trong 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 ban đầu
Trong khi 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 hiện một loạt thử nghiệm mới trên một tập dữ liệu mới có thể hữu ích.
Để làm như vậy, nếu mã nguyên mẫu của bạn không thêm bản ghi vào các 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 phẩm: 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 các 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ủa bạn.
Cài đặt Firebase Admin SDK
Ngay cả khi chủ yếu làm việc tại địa phương, Firebase vẫn khuyến nghị bạn thiết lập Admin SDK để có thể sử dụng Firebase Data Connect trong một môi trường đặc quyền, bao gồm cả môi trường cục bộ của bạn. 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 Admin SDK trong các Data Connect trường hợp sử dụng khác.
Thực hiện 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 cho 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à ở đó theo cách cục bộ.
Một lợi ích chính của API quản trị là khả năng quản lý riêng biệt và sử dụng lại các mảng dữ liệu cho quy trình CI/CD hoặc thiết lập các tệp dữ liệu lớn cho dữ liệu sản xuất.
Các đoạn mã sau đây minh hoạ cách thiết lập một tập lệnh dữ liệu lớn.
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 phẩm: sử dụng SQL để cập nhật hàng loạt dữ liệu
Khi 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 phiên bản Cloud SQL để quản lý việc tải và cập nhật dữ liệu.
Tham khảo hướng dẫn về Cloud SQL cho PostgreSQL để nhập dữ liệu.
Tiếp theo là gì?
- Tìm hiểu về cách tích hợp Admin SDK vào các dự án Data Connect của bạn.