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 sử dụng, 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 thao tác chèn đột biế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ầ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. 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 dưới đâ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.

Dữ liệu khởi đầu cho bảng MovieActor

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 thao tác _insertMany. Trong ví dụ về ứng dụng đánh giá phim, thao tác này sẽ chèn tập dữ liệu ban đầu trong MovieActor.

Để 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 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 đột biến _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ì?