ตั้งข้อมูลและดำเนินการข้อมูลจำนวนมาก

ใน Firebase Data Connect การดำเนินการกับข้อมูลจำนวนมากจะดำเนินการโดยใช้การกลายพันธุ์ แม้ว่าโปรเจ็กต์ Data Connect จะจัดเก็บข้อมูลใน PostgreSQL แต่คุณไม่สามารถโหลดข้อมูลจำนวนมากโดยใช้คำสั่ง SQL หรือเครื่องมือ SQL เนื่องจากบริการ Data Connect และสคีมาต้องซิงค์กับฐานข้อมูลอยู่เสมอ และการดำเนินการใน PostgreSQL โดยตรงจะรบกวนการซิงค์นี้

ด้วยเหตุนี้ Data Connect จึงมี _insertMany, _upsertMany และ _deleteMany มาตรฐานสำหรับการสุ่มตัวอย่างข้อมูลและการจัดการข้อมูลจำนวนมาก

เมื่อคุณสร้างต้นแบบแอปและเรียกใช้ขั้นตอน CI/CD คุณสามารถเรียกใช้การกลายพันธุ์เหล่านี้ได้ในสภาพแวดล้อมการพัฒนาซอฟต์แวร์ในเครื่องโดยใช้ส่วนขยาย VS Code, Data Connectโปรแกรมจำลอง และอินสแตนซ์ฐานข้อมูลในเครื่อง (ไม่บังคับ)

ข้อมูลเริ่มต้นในอินสแตนซ์ในเครื่องและอินสแตนซ์เวอร์ชันที่ใช้งานจริง

ในคู่มือเริ่มต้นใช้งาน คุณได้ตั้งค่าแอปเพื่อเพิ่มระเบียนเดียวลงในตารางเดียวโดยใช้การกลายพันธุ์แบบแทรกเฉพาะกิจ

แอปรีวิวภาพยนตร์จำเป็นต้องมีข้อมูลภาพยนตร์ รีวิว และผู้ใช้สำหรับการสร้างต้นแบบการค้นหาและการกลายพันธุ์ที่ใช้การรวมและการดำเนินการอื่นๆ ในตารางหลายตารางที่มีข้อมูลสมจริงจึงจะใช้งานได้ คุณสามารถขยายสคีมาและสร้างข้อมูลในฐานข้อมูลได้

สภาพแวดล้อมการต่อยอดแนวคิดต้องใช้โค้ดเพื่อทำการฝังข้อมูล คู่มือนี้มีตัวอย่างบางส่วนที่แสดงข้อมูลต่อไปนี้

  • การใช้ _insertMany และ _upsertMany ในตารางแต่ละตาราง
  • การใช้ _insertMany ในตารางที่เกี่ยวข้อง

อัปเดตสคีมาแอปรีวิวภาพยนตร์

คุณสามารถใช้การดัดแปลง _insertMany และ _upsertMany เพื่ออัปเดตตารางฐานข้อมูลแต่ละตารางทีละรายการ หรืออัปเดตหลายตารางที่เกี่ยวข้องตามความสัมพันธ์การรวม สคีมาแอปรีวิวภาพยนตร์แบบขยายที่จะช่วยแสดง Use Case และตัวอย่างเหล่านี้แสดงอยู่ด้านล่าง ซึ่งจะขยาย schema.gql นอกเหนือจากประเภท Movie เริ่มต้นให้รวมประเภท Actor และ MovieActor ด้วย เพื่อให้เราสร้างต้นแบบการค้นหาที่ซับซ้อนมากขึ้นได้

# 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"
}

เขียนการกลายพันธุ์เพื่อเริ่มต้นข้อมูลสถานะค่าเป็นศูนย์

ในระหว่างการสร้างต้นแบบ เมื่อต้องทดสอบการค้นหาและการกลายพันธุ์กับช่วงค่าแบบไม่ต่อเนื่อง คุณสามารถป้อนข้อมูลด้วยระเบียนหลายรายการ เช่น คุณอาจต้องการเพิ่มระเบียนภาพยนตร์หลายรายการที่มีประเภทและการจัดประเภทที่แตกต่างกันเพื่อทดสอบการเปรียบเทียบและการกรอง

ใส่ข้อมูลลงในตาราง Movie และ Actor

คุณสามารถใช้เทคนิคเดียวกันที่อธิบายไว้ในคู่มือเริ่มต้นใช้งานเพื่อแทรกระเบียน 1 หรือ 2 รายการ ทั้งนี้ขึ้นอยู่กับระยะของการสร้างต้นแบบ กล่าวคือ คุณสามารถใช้เลนส์โค้ดในส่วนขยาย VS Code เพื่อสร้าง_insertการกลายพันธุ์ การเขียนโค้ดแบบฮาร์ดโค้ด และเรียกใช้การกลายพันธุ์เหล่านั้นใน VS Code

ท้ายที่สุดแล้ว การเพิ่มระเบียนหลายรายการลงในตารางโดยใช้การดำเนินการ _insertMany จะเหมาะสมกว่า ในตัวอย่างแอปรีวิวภาพยนตร์ การดำเนินการนี้จะแทรกชุดข้อมูลเริ่มต้นใน Movie และ Actor

หากต้องการดำเนินการเปลี่ยนแปลงต่อไปนี้โดยใช้ส่วนขยาย Firebase ของ VS Code ให้คลิกปุ่ม CodeLens Run (Production) หรือRun (Local) ในมุมมองเครื่องมือแก้ไขไฟล์ที่เหมาะสม ทั้งนี้ขึ้นอยู่กับว่าคุณกำลังสร้างต้นแบบด้วยบริการเวอร์ชันที่ใช้งานจริงหรือฐานข้อมูลในเครื่อง

# 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"
    }
   ])
}

ใส่ข้อมูลลงในตารางการเข้าร่วม MovieActor

หากต้องการทดสอบการค้นหาและการดัดแปลงโดยใช้การรวมและการดำเนินการที่ซับซ้อนอื่นๆ คุณสามารถเพิ่มระเบียนหลายรายการลงในตาราง MovieActor

ในส่วนนี้ เมื่อคุณอัปเดตหลายตารางในความสัมพันธ์ประเภทนี้ คุณสามารถเพิ่มคำสั่ง @transaction เพื่อให้การอัปเดตเสร็จสมบูรณ์อย่างถูกต้อง

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"
    }
  ])
}

เขียนการกลายพันธุ์เพื่อรีเซ็ตข้อมูลเมล็ดพันธุ์

ขณะสร้างต้นแบบและดำเนินการ CI/CD การรีเซ็ตข้อมูลเป็นสถานะ 0 เพื่อทำการทดสอบชุดใหม่กับชุดข้อมูลใหม่อาจมีประโยชน์

หากต้องการดำเนินการดังกล่าว ให้ใช้ _upsertMany mutation ที่ Data Connect มีให้ในกรณีที่โค้ดโปรโตไทป์ไม่ได้เพิ่มระเบียนลงในตาราง

ในตัวอย่างต่อไปนี้ movie_upsertMany จะเรียกใช้พร้อมค่าเริ่มต้นเพื่ออัปเดตระเบียนภาพยนตร์กลับสู่สถานะเดิม

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",
    }
   
}

ขั้นตอนถัดไปคือ