ใช้ Cloud Firestore กับฐานข้อมูลเรียลไทม์ของ Firebase

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

ดูข้อมูลเพิ่มเติมเกี่ยวกับ ความแตกต่างระหว่างฐานข้อมูล

การย้ายข้อมูลไปยัง Cloud Firestore

หากคุณตัดสินใจว่าต้องการย้ายข้อมูลบางส่วนจาก Realtime Database ไปยัง Cloud Firestore โปรดพิจารณาขั้นตอนต่อไปนี้ เนื่องจากทุกฐานข้อมูล ความต้องการเฉพาะและการพิจารณาเชิงโครงสร้างจึงไม่มี เส้นทางการย้ายข้อมูลอัตโนมัติ แต่คุณสามารถติดตามความคืบหน้าทั่วไปนี้ได้

  1. จับคู่โครงสร้างข้อมูลและกฎความปลอดภัยจาก Realtime Database กับ Cloud Firestore ทั้ง Realtime Database และ Cloud Firestore อาศัยการตรวจสอบสิทธิ์ Firebase คุณจึงไม่จำเป็นต้องเปลี่ยนการตรวจสอบสิทธิ์ผู้ใช้สำหรับแอป อย่างไรก็ตาม กฎความปลอดภัยและโมเดลข้อมูลแตกต่างกัน คุณจึงควร สำหรับความหลากหลายเหล่านั้นก่อนที่จะเริ่มย้ายข้อมูลไปยังระบบคลาวด์ Firestore

  2. ย้ายข้อมูลย้อนหลัง ขณะที่คุณตั้งค่าโครงสร้างข้อมูลใหม่ใน Cloud Firestore คุณจะทำสิ่งต่อไปนี้ได้ แมปและย้ายข้อมูลที่มีอยู่จาก Realtime Database ไปยัง Cloud Firestore ใหม่ อินสแตนซ์ แต่หากใช้ทั้ง 2 ฐานข้อมูลในแอป คุณไม่จำเป็นต้องย้ายข้อมูลประวัติออกจาก Realtime Database

  3. มิเรอร์ข้อมูลใหม่ไปยัง Firestore แบบเรียลไทม์ ใช้ฟังก์ชัน Cloud Functions เพื่อเขียนข้อมูลใหม่ไปยัง Cloud Firestore ใหม่ ฐานข้อมูลเมื่อเพิ่มลงใน Realtime Database

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

โปรดตรวจสอบว่าคุณระบุค่าใช้จ่ายสำหรับการเรียกเก็บเงินแล้ว สำหรับทั้ง Realtime Database และ Cloud Firestore

แมปข้อมูลของคุณ

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

ความแตกต่างสำคัญที่ต้องพิจารณา

หากคุณย้ายข้อมูลจากโครงสร้าง Realtime Database ที่มีอยู่ไปยัง Cloud Firestore โปรดคำนึงถึงความแตกต่างที่สำคัญต่อไปนี้ระหว่าง ฐานข้อมูลที่อาจส่งผลกระทบต่อวิธีที่คุณจัดโครงสร้างข้อมูลใน Cloud Firestore

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

แนวทางปฏิบัติแนะนำในสถานการณ์จริง

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

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

// /cities/$CITY_KEY
{
  name: "New York",
  population: 8000000,
  capital: False
}

// /city-landmark/$CITY_KEY/$LANDMARK_KEY
{
  name: "Empire State Building",
  category: "Architecture"
}

Cloud Firestore มีจำนวนการอ่านระดับต่ำ ดังนั้นการค้นหาเอกสารในคอลเล็กชัน จะไม่ดึงข้อมูลจากคอลเล็กชันย่อย ซึ่งคุณสามารถเก็บจุดสังเกต ในคอลเล็กชันย่อย

// /cities/$CITY_ID
{
  name: "New York",
  population: 8000000,
  capital: False,
  landmarks: [... subcollection ...]
}

เอกสารต้องมีขนาดไม่เกิน 1 MB ซึ่งเป็นอีกเหตุผลที่ควรจัดเก็บ จุดสังเกตเป็นรายการย่อย โดยทำให้เอกสารของเมืองแต่ละรายการมีขนาดเล็ก ไม่ใช่ แสดงเอกสารด้วยรายการที่ซ้อนกัน

ความสามารถในการค้นหาขั้นสูงของ Cloud Firestore ช่วยลดความจำเป็น ข้อมูลซ้ำสำหรับรูปแบบการเข้าถึงทั่วไป ตัวอย่างเช่น ลองพิจารณาหน้าจอใน แอปคู่มือเที่ยวเมืองที่แสดงเมืองหลวงทั้งหมดโดยเรียงตามประชากร ใน Realtime Database วิธีที่มีประสิทธิภาพมากที่สุดคือการจัดการ รายชื่อเมืองหลวงที่ซ้ำกันข้อมูลจากรายการ cities ดังนี้:

{
   cities: {
    // ...
   },

   capital-cities: {
     // ...
   }
}

ใน Cloud Firestore คุณสามารถแสดงรายชื่อเมืองหลวงตามลำดับ เป็นคำค้นหาเดียว ดังนี้

db.collection('cities')
    .where('capital', '==', true)
    .orderBy('population')

อ่านเพิ่มเติมเกี่ยวกับโมเดลข้อมูล Cloud Firestore และทำแบบสำรวจ โปรดดูโซลูชันของเราสำหรับแนวคิดเพิ่มเติมเกี่ยวกับวิธีจัดโครงสร้าง ฐานข้อมูล Cloud Firestore

รักษาความปลอดภัยให้ข้อมูลของคุณ

คุณกำลังใช้กฎความปลอดภัยของ Cloud Firestore สำหรับ ไคลเอ็นต์ Android, Apple หรือเว็บ หรือ Identity Access Management (IAM) สำหรับเซิร์ฟเวอร์ ให้ตรวจสอบว่าคุณได้รักษาความปลอดภัยข้อมูลใน Cloud Firestore ด้วย เป็น Realtime Database การตรวจสอบสิทธิ์ผู้ใช้จะจัดการโดยการตรวจสอบสิทธิ์สำหรับฐานข้อมูลทั้งสอง คุณจึงไม่จำเป็นต้องเปลี่ยนการใช้งานการตรวจสอบสิทธิ์เมื่อคุณเริ่มต้น ด้วย Cloud Firestore

ความแตกต่างสำคัญที่ต้องพิจารณา

  • SDK อุปกรณ์เคลื่อนที่และเว็บใช้กฎความปลอดภัยของ Cloud Firestore ขณะที่เซิร์ฟเวอร์ SDK ใช้ Identity Access Management (IAM) เพื่อรักษาความปลอดภัยของข้อมูล
  • กฎความปลอดภัยของ Cloud Firestore จะไม่เรียงซ้อนกันเว้นแต่คุณจะใช้ไวลด์การ์ด เอกสารและ คอลเลกชันจะไม่รับค่ากฎ
  • คุณไม่จำเป็นต้องตรวจสอบข้อมูลแยกต่างหากอีกต่อไป (เช่นเดียวกับที่คุณทำใน Realtime Database)
  • Cloud Firestore จะตรวจสอบกฎก่อนดำเนินการค้นหาเพื่อให้มั่นใจว่า ผู้ใช้มีสิทธิ์เข้าถึงที่เหมาะสมสำหรับข้อมูลทั้งหมดที่แสดงผลจากการค้นหา

ย้ายข้อมูลย้อนหลังไปยัง Cloud Firestore

เมื่อคุณแมปข้อมูลและโครงสร้างการรักษาความปลอดภัยกับ Cloud Firestore ข้อมูล และความปลอดภัยทั้งหมด คุณก็สามารถเริ่มเพิ่มข้อมูลของคุณได้ หากคุณวางแผนที่จะค้นหาข้อมูลย้อนหลังหลังจากย้ายแอปจาก Realtime Database ใน Cloud Firestore ให้เพิ่มการส่งออกข้อมูลเก่าไปยัง ฐานข้อมูล Cloud Firestore หากคุณวางแผนที่จะใช้ทั้ง Realtime Database และ Cloud Firestore ในแอปคุณสามารถข้ามขั้นตอนนี้ได้

หากต้องการหลีกเลี่ยงการเขียนทับข้อมูลใหม่ด้วยข้อมูลเก่า คุณอาจต้องเพิ่ม ข้อมูลประวัติก่อน หากคุณเพิ่มข้อมูลใหม่ลงในทั้ง 2 ฐานข้อมูลพร้อมกัน ที่จะกล่าวถึงในขั้นตอนถัดไป โปรดตรวจสอบว่าคุณให้ความสำคัญกับข้อมูลใหม่ที่เพิ่มลงใน Cloud Firestore โดย Cloud Functions

หากต้องการย้ายข้อมูลประวัติไปยัง Cloud Firestore ให้ทำตามขั้นตอนต่อไปนี้

  1. ส่งออกข้อมูลจาก Realtime Database หรือ ใช้ข้อมูลสำรองล่าสุด
    1. ไปที่หน้า ส่วน Realtime Database ในคอนโซล Firebase
    2. จากแท็บ Data ให้เลือกโหนดระดับรากของฐานข้อมูลและเลือก ส่งออก JSON จากเมนู
  2. สร้างฐานข้อมูลใหม่ใน Cloud Firestore และ เพิ่มข้อมูล

    พิจารณากลยุทธ์ต่อไปนี้เมื่อย้ายข้อมูลบางส่วนไปยัง Cloud Firestore

    • เขียนสคริปต์ที่กำหนดเองซึ่งพอร์ตข้อมูลให้คุณ แม้เราจะไม่สามารถนำเสนอ เทมเพลตสำหรับสคริปต์นี้ เพราะฐานข้อมูลทั้งหมดจะมีความต้องการที่ไม่ซ้ำกัน ผู้เชี่ยวชาญ Cloud Firestore ในช่อง Slack หรือใน Stack Overflow สามารถตรวจทานสคริปต์หรือให้คำแนะนำสำหรับสถานการณ์เฉพาะของคุณ
    • ใช้ SDK ของเซิร์ฟเวอร์ (Node.js, Java, Python หรือ Go) เพื่อเขียนข้อมูลโดยตรง ไปยัง Cloud Firestore โปรดดูวิธีการตั้งค่า SDK ของเซิร์ฟเวอร์ได้ที่ เริ่มต้นใช้งาน
    • หากต้องการเร่งการย้ายข้อมูลจำนวนมาก ให้ใช้ การเขียนแบบกลุ่ม และส่งการดำเนินการได้ถึง 500 รายการในคำขอเครือข่ายเดียว
    • หากต้องการรักษาขีดจำกัดอัตราคำขอของ Cloud Firestore ไว้ จำกัดการดำเนินการอยู่ที่ 500 การเขียน/วินาทีสำหรับแต่ละคอลเล็กชัน

เพิ่มข้อมูลใหม่ลงใน Cloud Firestore

หากต้องการคงความสอดคล้องกันระหว่างฐานข้อมูล ให้เพิ่มข้อมูลใหม่ลงในฐานข้อมูลทั้ง 2 แบบใน แบบเรียลไทม์ ใช้ฟังก์ชัน Cloud Functions เพื่อทริกเกอร์การเขียนไปยัง Cloud Firestore เมื่อใดก็ตามที่ไคลเอ็นต์เขียนไปยัง Realtime Database ตรวจสอบว่า Cloud Firestore จะให้ความสำคัญกับข้อมูลใหม่ที่มาจาก Cloud Functions มากกว่าการเขียน จากการย้ายข้อมูลประวัติ

สร้างฟังก์ชันเพื่อเขียนข้อมูลใหม่หรือข้อมูลที่เปลี่ยนแปลงไปยัง Cloud Firestore ทุกครั้งที่ไคลเอ็นต์เขียนข้อมูลลงใน Realtime Database ดูข้อมูลเพิ่มเติมเกี่ยวกับ ทริกเกอร์ Realtime Database สำหรับ Cloud Functions

ทำให้ Cloud Firestore เป็นฐานข้อมูลหลักสำหรับข้อมูลที่ย้าย

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

  1. หากคุณใช้ Cloud Functions เพื่อรักษาความสอดคล้องระหว่างฐานข้อมูล โปรดตรวจสอบว่าคุณไม่ได้เขียนซ้ำกันในฐานข้อมูลทั้ง 2 แหล่ง วนซ้ำ เปลี่ยนฟังก์ชันเพื่อเขียนไปยังฐานข้อมูลเดียว หรือนำฟังก์ชัน อย่างสมบูรณ์และเริ่มเลิกใช้งานการเขียนฟังก์ชันสำหรับ ข้อมูลที่ย้ายในแอปยังคงเชื่อมโยงกับ Realtime Database คุณจะจัดการกับเรื่องนี้อย่างไร แอปของคุณขึ้นอยู่กับความต้องการเฉพาะและผู้ใช้

  2. ตรวจสอบว่าข้อมูลของคุณได้รับการรักษาความปลอดภัยอย่างถูกต้อง ตรวจสอบกฎความปลอดภัยของ Cloud Firestore หรือการตั้งค่า IAM