คุณใช้ได้ทั้ง Firebase Realtime Database และ Cloud Firestore ในแอป และ ใช้ประโยชน์จากโซลูชันฐานข้อมูลแต่ละรายการให้เหมาะกับความต้องการของคุณ เช่น คุณอาจต้องการใช้ประโยชน์จากRealtime Databaseที่รองรับการแสดงตนตามที่ระบุไว้ในสร้างการแสดงตนใน Cloud Firestore
ดูข้อมูลเพิ่มเติมเกี่ยวกับความแตกต่างระหว่างฐานข้อมูล
กำลังย้ายข้อมูลไปที่ Cloud Firestore
หากตัดสินใจที่จะย้ายข้อมูลบางส่วนจาก Realtime Database ไปยัง Cloud Firestore ให้พิจารณาลำดับต่อไปนี้ เนื่องจากฐานข้อมูลแต่ละรายการมี ความต้องการและข้อควรพิจารณาด้านโครงสร้างที่ไม่เหมือนกัน จึงไม่มี เส้นทางการย้ายข้อมูลอัตโนมัติ แต่คุณสามารถทำตามลำดับการพัฒนาทั่วไปนี้แทนได้
แมปโครงสร้างข้อมูลและกฎความปลอดภัยจาก Realtime Database ไปยัง Cloud Firestore ทั้ง Realtime Database และ Cloud Firestore ต่างก็ใช้ Firebase Authentication ดังนั้นคุณจึงไม่จำเป็นต้องเปลี่ยนการตรวจสอบสิทธิ์ของผู้ใช้สำหรับแอป อย่างไรก็ตาม กฎความปลอดภัยและโมเดลข้อมูลจะแตกต่างกัน และคุณควรพิจารณาความแตกต่างเหล่านั้นอย่างรอบคอบ ก่อนที่จะเริ่มย้ายข้อมูลไปยัง Cloud Firestore
ย้ายข้อมูลย้อนหลัง ขณะตั้งค่าโครงสร้างข้อมูลใหม่ใน Cloud Firestore คุณสามารถ แมปและย้ายข้อมูลที่มีอยู่จาก Realtime Database ไปยังอินสแตนซ์ Cloud Firestore ใหม่ ได้ อย่างไรก็ตาม หากคุณใช้ทั้ง 2 ฐานข้อมูลในแอป คุณไม่จำเป็นต้องย้ายข้อมูลย้อนหลังจาก Realtime Database
มิเรอร์ข้อมูลใหม่ไปยัง Firestore แบบเรียลไทม์ ใช้ Cloud Functions เพื่อเขียนข้อมูลใหม่ลงในCloud Firestore ฐานข้อมูลใหม่เมื่อมีการเพิ่มข้อมูลลงในRealtime Database
ตั้งค่า 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 Security Rules สำหรับไคลเอ็นต์ Android, Apple หรือเว็บ หรือใช้ Identity Access Management (IAM) สำหรับเซิร์ฟเวอร์ โปรดตรวจสอบว่าคุณได้รักษาความปลอดภัยของข้อมูลใน Cloud Firestore และ Realtime Database ด้วย การตรวจสอบสิทธิ์ผู้ใช้จะได้รับการจัดการโดยการตรวจสอบสิทธิ์สำหรับทั้ง 2 ฐานข้อมูล ดังนั้นคุณจึงไม่จำเป็นต้องเปลี่ยนการติดตั้งใช้งานการตรวจสอบสิทธิ์เมื่อเริ่ม ใช้ Cloud Firestore
ความแตกต่างที่สำคัญที่ควรพิจารณา
- SDK สำหรับอุปกรณ์เคลื่อนที่และเว็บใช้ Cloud Firestore Security Rules ส่วน SDK ของเซิร์ฟเวอร์ใช้ Identity Access Management (IAM) เพื่อรักษาความปลอดภัยของข้อมูล
- Cloud Firestore Security Rules จะไม่เรียงซ้อนกันเว้นแต่คุณจะใช้ไวลด์การ์ด เอกสารและ คอลเล็กชันจะไม่รับช่วงกฎในกรณีอื่นๆ
- คุณไม่จำเป็นต้องตรวจสอบข้อมูลแยกต่างหากอีกต่อไป (เช่นเดียวกับที่ทำใน 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 ให้ทำตามขั้นตอนต่อไปนี้
- ส่งออกข้อมูลจาก Realtime Database หรือ
ใช้ข้อมูลสำรองล่าสุด
- ไปที่ส่วนRealtime Database ในคอนโซล Firebase
- จากแท็บข้อมูล ให้เลือกโหนดระดับรูทของฐานข้อมูล แล้วเลือกส่งออก JSON จากเมนู
สร้างฐานข้อมูลใหม่ใน 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 Security Rules
หากคุณใช้ Cloud Functions เพื่อรักษาความเท่าเทียมกันระหว่างฐานข้อมูล โปรดตรวจสอบว่าคุณไม่ได้ทำซ้ำการดำเนินการเขียนในฐานข้อมูลทั้ง 2 ในลูป เปลี่ยนฟังก์ชันให้เขียนไปยังฐานข้อมูลเดียว หรือนำฟังก์ชันออกทั้งหมดและเริ่มเลิกใช้ฟังก์ชันการเขียนสำหรับข้อมูลที่ย้ายข้อมูลในแอปที่ยังคงเชื่อมโยงกับ Realtime Database วิธีจัดการเรื่องนี้สำหรับแอปของคุณขึ้นอยู่กับความต้องการเฉพาะและผู้ใช้ของคุณ
ตรวจสอบว่าข้อมูลของคุณได้รับการรักษาความปลอดภัยอย่างเหมาะสม ตรวจสอบการตั้งค่า Cloud Firestore Security Rules หรือ IAM