Tạo dữ liệu ban đầu và thực hiện các thao tác dữ liệu hàng loạt

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_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 bản mô hình của bạn cần có mã để thực hiện việc tạo dữ liệu. Hướng dẫn này cung cấp một số mẫu minh hoạ:

  • Sử dụng _insertMany_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_upsertMany để lần lượt cập nhật từng bảng cơ sở dữ liệu hoặc cập nhật nhiều bảng liên quan bằng mối quan hệ liên kết. 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 ActorMovieActor, 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 các đột biến để tạo dữ liệu trạng thái ban đầu

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 MovieActor

Tuỳ thuộc vào giai đoạn tạo bản mô hình, 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 Kính lúp mã trong tiện ích VS Code để tạo các đột biến _insert, dữ liệu mã cứng và Chạy các đột biến đó trong VS Code.

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 thao tác _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 MovieActor.

Để 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 Run (Production) (Chạy (Sản xuất)) hoặc Run (Local) (Chạy (Máy tính)) tuỳ thuộc vào việc bạn đang tạo bản minh hoạ 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 trong loại mố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 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ì?