Trong Firebase Data Connect, các thao tác dữ liệu hàng loạt được thực hiện bằng cách sử dụng các đột biến. Mặc dù các dự án Data Connect của bạn lưu trữ dữ liệu trong PostgreSQL, nhưng bạn không thể tải dữ liệu hàng loạt bằng cách sử dụng câu lệnh SQL hoặc công cụ SQL: dịch vụ Data Connect và giản đồ của dịch vụ đó phải đồng bộ hoá với cơ sở dữ liệu và việc hoạt động trực tiếp trong PostgreSQL sẽ làm gián đoạn quá trình đồng bộ hoá này.
Đó là lý do Data Connect cung cấp các đột biến _insertMany
, _upsertMany
và _deleteMany
tiêu chuẩn để tạo dữ liệu và quản lý dữ liệu hàng loạt.
Khi bạn tạo bản minh hoạ ứng dụng và chạy quy trình CI/CD, bạn có thể gọi các đột biến này 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à (không bắt buộc) một thực thể cơ sở dữ liệu cục bộ.
Dữ liệu hạt giống trong các phiên bản cục bộ và phiên bản chính thức
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 bằng cách sử dụng một đột biến chèn đặc biệt.
Để có thể sử dụng, ứ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 bản mô hình cho các truy vấn và đột biến sử dụng các phép nối và các phép toán 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à tạo bản sao cơ sở dữ liệu.
Môi trường tạo nguyên mẫu của bạn cần có đoạn mã để tiến hành liên kết dữ liệu. Hướng dẫn này cung cấp một số mẫu minh hoạ:
- Việc 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 đột biến _insertMany
và _upsertMany
để cập nhật từng bảng cơ sở dữ liệu riêng lẻ hoặc cập nhật nhiều bảng liên quan bằng các mối quan hệ tham gia. Dưới đây là 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. Phương thức này 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 nguyên 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"
}
Ghi đột biến vào dữ liệu trạng thái khởi đầu không
Trong quá trình tạo bản mô hình, khi cần kiểm thử các truy vấn và đột biến dựa trên một phạm vi 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 để thử nghiệm việc so sánh và lọc.
Tạo dữ liệu hạt giống vào bảng Movie
và Actor
Tuỳ thuộc vào giai đoạn tạo nguyên mẫu, bạn có thể sử dụng chính 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 Ống kính mã trong tiện ích Mã VS để tạo đột biến _insert
, dữ liệu mã cứng và Chạy các đột biến đó trong Mã VS.
Cuối cùng, bạn nên thêm nhiều bản ghi vào một bảng bằng cách sử dụng toán tử _insertMany
. Trong ví dụ về ứng dụng đánh giá phim, thao tác này sẽ chèn một tập dữ liệu ban đầu vào Movie
và Actor
.
Để thực thi các lượt biến đổi sau đây, bằng cách sử dụng tiện ích Firebase Mã VS, trong khung hiển thị trình chỉnh sửa tệp thích hợp, hãy nhấp vào nút Chạy (Bản chính thức) hoặc Chạy (Cục bộ) CodeLens, tuỳ thuộc vào việc bạn đang tạo nguyên 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"
}
])
}
Tạo dữ liệu gốc vào bảng nối MovieActor
Để kiểm thử truy vấn và đột biến bằng cách sử dụng các phép nối và các phép toán 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 thuộc loại quan hệ này, bạn có thể thêm lệnh @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 hạt giống
Trong khi tạo bản minh hoạ và thực hiện CI/CD, việc đặt lại dữ liệu về trạng thái rỗng để thực thi một loạt kiểm thử mới trên một tậ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 không thêm bản ghi vào bảng, hãy sử dụng
sự thay đổi _upsertMany
do Data Connect cung cấp.
Trong ví dụ sau, movie_upsertMany
được gọi với 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",
}
…
}
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.