คุณสามารถใช้ทั้ง Firebase Realtime Database และ Cloud Firestore ในแอปของคุณ และใช้ประโยชน์จากโซลูชันฐานข้อมูลแต่ละรายการให้เหมาะกับความต้องการของคุณ ตัวอย่างเช่น คุณอาจต้องการใช้ประโยชน์จากการสนับสนุนของ Realtime Database สำหรับการแสดงตน ดังที่แสดงไว้ใน Build Presence ใน Cloud Firestore
เรียนรู้เพิ่มเติมเกี่ยวกับ ความแตกต่างระหว่างฐานข้อมูล
การย้ายข้อมูลไปยัง Cloud Firestore
หากคุณตัดสินใจแล้วว่าต้องการย้ายข้อมูลบางส่วนจาก Realtime Database ไปยัง Cloud Firestore ให้พิจารณาขั้นตอนต่อไปนี้ เนื่องจากทุกฐานข้อมูลมีความต้องการและข้อพิจารณาด้านโครงสร้างที่แตกต่างกัน จึงไม่มีเส้นทางการย้ายข้อมูลอัตโนมัติ คุณสามารถทำตามขั้นตอนทั่วไปนี้แทน:
แมปโครงสร้างข้อมูลและกฎความปลอดภัยจากฐานข้อมูลเรียลไทม์ไปยัง Cloud Firestore ทั้งฐานข้อมูลเรียลไทม์และ Cloud Firestore ใช้การตรวจสอบความถูกต้องของ Firebase ดังนั้นคุณไม่จำเป็นต้องเปลี่ยนการตรวจสอบผู้ใช้สำหรับแอปของคุณ อย่างไรก็ตาม กฎความปลอดภัยและรูปแบบข้อมูลนั้นแตกต่างกัน และสิ่งสำคัญคือต้องพิจารณาอย่างระมัดระวังสำหรับความแตกต่างเหล่านั้นก่อนที่คุณจะเริ่มย้ายข้อมูลไปยัง Cloud Firestore
ย้ายข้อมูลย้อนหลัง เมื่อคุณตั้งค่าโครงสร้างข้อมูลใหม่ใน Cloud Firestore คุณสามารถแมปและย้ายข้อมูลที่มีอยู่จาก Realtime Database ไปยังอินสแตนซ์ Cloud Firestore ใหม่ของคุณได้ อย่างไรก็ตาม หากคุณใช้ทั้งสองฐานข้อมูลในแอปของคุณ คุณไม่จำเป็นต้องย้ายข้อมูลประวัติออกจากฐานข้อมูลเรียลไทม์
สะท้อนข้อมูลใหม่ไปยัง Firestore แบบเรียลไทม์ ใช้ Cloud Functions เพื่อเขียนข้อมูลใหม่ไปยังฐานข้อมูล Cloud Firestore ใหม่ของคุณเมื่อถูกเพิ่มไปยัง Realtime Database
ทำให้ Cloud Firestore เป็นฐานข้อมูลหลักของคุณสำหรับข้อมูลที่ย้าย เมื่อคุณย้ายข้อมูลบางส่วนแล้ว ให้ใช้ Cloud Firestore เป็นฐานข้อมูลหลักและลดการใช้ฐานข้อมูลเรียลไทม์สำหรับข้อมูลที่ย้าย พิจารณาเวอร์ชันของแอปของคุณที่ยังคงเชื่อมโยงกับฐานข้อมูลเรียลไทม์สำหรับข้อมูลนั้น และวิธีที่คุณวางแผนจะสนับสนุนต่อไป
ตรวจสอบให้แน่ใจว่าคุณมีบัญชีสำหรับ การเรียกเก็บเงิน สำหรับทั้ง Realtime Database และ Cloud Firestore
แมปข้อมูลของคุณ
ข้อมูลใน Realtime Database มีโครงสร้างเป็นทรีเดียว ในขณะที่ Cloud Firestore รองรับลำดับชั้นข้อมูลที่ชัดเจนยิ่งขึ้นผ่านเอกสาร คอลเล็กชัน และคอลเล็กชันย่อย หากคุณย้ายข้อมูลบางส่วนจาก Realtime Database ไปยัง Cloud Firestore คุณอาจต้องพิจารณาสถาปัตยกรรมอื่นสำหรับข้อมูลของคุณ
ความแตกต่างที่สำคัญที่ต้องพิจารณา
หากคุณย้ายข้อมูลจากทรีฐานข้อมูลเรียลไทม์ที่มีอยู่ไปยังเอกสารและคอลเล็กชันของ Cloud Firestore โปรดทราบว่าความแตกต่างที่สำคัญระหว่างฐานข้อมูลที่อาจส่งผลต่อการจัดโครงสร้างข้อมูลใน Cloud Firestore มีดังนี้
- ข้อความค้นหาตื้นให้ความยืดหยุ่นมากขึ้นในโครงสร้างข้อมูลแบบลำดับชั้น
- ข้อความค้นหาที่ซับซ้อนมีความละเอียดมากขึ้น และลดความต้องการข้อมูลที่ซ้ำกัน
- เคอร์เซอร์แบบสอบถามให้เลขหน้าที่มีประสิทธิภาพมากขึ้น
- การทำธุรกรรมไม่จำเป็นต้องมีรากร่วมสำหรับข้อมูลทั้งหมดของคุณอีกต่อไป และมีประสิทธิภาพมากขึ้น
- ค่าใช้จ่ายในการเรียกเก็บเงินแตกต่างกันระหว่าง Realtime Database และ Cloud Firestore ในหลายกรณี Cloud Firestore อาจมีราคาแพงกว่า Realtime Database โดยเฉพาะอย่างยิ่งหากคุณอาศัยการดำเนินการขนาดเล็กจำนวนมาก พิจารณาลดจำนวนการดำเนินการในฐานข้อมูลของคุณและหลีกเลี่ยงการเขียนที่ไม่จำเป็น เรียนรู้เพิ่มเติมเกี่ยวกับความแตกต่างใน การเรียกเก็บเงิน ระหว่าง Realtime Database และ Cloud Firestore
แนวทางปฏิบัติที่ดีที่สุดในการดำเนินการ
ตัวอย่างต่อไปนี้สะท้อนข้อควรพิจารณาบางประการที่คุณอาจทำเมื่อคุณย้ายข้อมูลระหว่างฐานข้อมูล คุณสามารถใช้ประโยชน์จากการอ่านแบบตื้นๆ และปรับปรุงความสามารถในการสืบค้นสำหรับโครงสร้างข้อมูลที่เป็นธรรมชาติมากกว่าที่คุณเคยใช้กับฐานข้อมูลเรียลไทม์
ลองพิจารณาแอพแนะนำเมืองที่ช่วยให้ผู้ใช้ค้นหาสถานที่สำคัญในเมืองต่างๆ ทั่วโลก เนื่องจากฐานข้อมูลเรียลไทม์ขาดการอ่านแบบตื้น คุณจึงอาจต้องจัดโครงสร้างข้อมูลในโหนดระดับบนสุดสองโหนด ดังนี้:
// /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 ...]
}
เอกสารมีขนาดสูงสุด 1MB ซึ่งเป็นอีกเหตุผลหนึ่งในการจัดเก็บจุดสังเกตเป็นคอลเลกชันย่อย ทำให้เอกสารแต่ละเมืองมีขนาดเล็ก แทนที่จะทำให้เอกสารมีรายการซ้อนกันมากเกินไป
ความสามารถในการสืบค้นขั้นสูงของ Cloud Firestore ลดความจำเป็นในการทำซ้ำข้อมูลสำหรับรูปแบบการเข้าถึงทั่วไป ตัวอย่างเช่น พิจารณาหน้าจอในแอปแนะนำเมืองที่แสดงเมืองหลวงทั้งหมดโดยเรียงตามจำนวนประชากร ในฐานข้อมูลเรียลไทม์ วิธีที่มีประสิทธิภาพที่สุดในการทำเช่นนี้คือการรักษารายการเมืองหลวงที่แยกจากกันซึ่งทำซ้ำข้อมูลจากรายการ 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 การรับรองความถูกต้องของผู้ใช้ได้รับการจัดการโดยการรับรองความถูกต้องสำหรับทั้งสองฐานข้อมูล ดังนั้นคุณไม่จำเป็นต้องเปลี่ยนการใช้งานการรับรองความถูกต้องเมื่อเริ่มใช้ 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 ในแอป คุณสามารถข้ามขั้นตอนนี้ได้
เพื่อหลีกเลี่ยงการเขียนทับข้อมูลใหม่ด้วยข้อมูลเก่า คุณอาจต้องการเพิ่มข้อมูลประวัติของคุณก่อน หากคุณเพิ่มข้อมูลใหม่ไปยังฐานข้อมูลทั้งสองพร้อมกัน ตามที่กล่าวไว้ในขั้นตอนต่อไป ตรวจสอบให้แน่ใจว่าคุณให้ความสำคัญกับข้อมูลใหม่ที่เพิ่มไปยัง Cloud Firestore โดย Cloud Functions
หากต้องการย้ายข้อมูลประวัติไปยัง Cloud Firestore ให้ทำตามขั้นตอนเหล่านี้:
- ส่งออกข้อมูลของคุณจาก 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
เพื่อรักษาความเท่าเทียมกันระหว่างฐานข้อมูลของคุณ ให้เพิ่มข้อมูลใหม่ลงในฐานข้อมูลทั้งสองแบบเรียลไทม์ ใช้ Cloud Functions เพื่อทริกเกอร์การเขียนไปยัง Cloud Firestore เมื่อใดก็ตามที่ไคลเอนต์เขียนไปยังฐานข้อมูลเรียลไทม์ ตรวจสอบให้แน่ใจว่า Cloud Firestore ให้ความสำคัญกับข้อมูลใหม่ที่มาจาก Cloud Functions มากกว่าการเขียนใดๆ ที่คุณทำขึ้นจากการย้ายข้อมูลที่ผ่านมา
สร้างฟังก์ชันเพื่อเขียนข้อมูลใหม่หรือเปลี่ยนแปลงไปยัง Cloud Firestore ทุกครั้งที่ไคลเอนต์เขียนข้อมูลไปยัง Realtime Database เรียนรู้เพิ่มเติมเกี่ยวกับ ทริกเกอร์ฐานข้อมูลเรียลไทม์ สำหรับ Cloud Functions
ทำให้ Cloud Firestore เป็นฐานข้อมูลหลักของคุณสำหรับข้อมูลที่ย้าย
หากคุณตัดสินใจที่จะใช้ Cloud Firestore เป็นฐานข้อมูลหลักสำหรับข้อมูลบางส่วนของคุณ ตรวจสอบให้แน่ใจว่าคุณได้คำนึงถึงฟังก์ชันการมิเรอร์ข้อมูลใดๆ ที่คุณได้ตั้งค่าไว้และตรวจสอบความถูกต้องของกฎความปลอดภัยของ Cloud Firestore
หากคุณใช้ Cloud Functions เพื่อรักษาความเท่าเทียมกันระหว่างฐานข้อมูลของคุณ ตรวจสอบให้แน่ใจว่าคุณไม่ได้ดำเนินการเขียนซ้ำในฐานข้อมูลทั้งสองแบบวนซ้ำ สลับฟังก์ชันของคุณเพื่อเขียนไปยังฐานข้อมูลเดียว หรือลบฟังก์ชันทั้งหมดและเริ่มยุติฟังก์ชันการเขียนสำหรับข้อมูลที่ย้ายข้อมูลในแอปที่ยังคงเชื่อมโยงกับฐานข้อมูลเรียลไทม์ วิธีจัดการกับแอปของคุณขึ้นอยู่กับความต้องการเฉพาะและผู้ใช้ของคุณ
ตรวจสอบว่าข้อมูลของคุณปลอดภัยอย่างเหมาะสม ตรวจสอบกฎการรักษาความปลอดภัยของ Cloud Firestore หรือการตั้งค่า IAM