มีหลายวิธีในการปรับปรุงประสิทธิภาพฐานข้อมูล Firebase Realtime ในแอปของคุณ หากต้องการทราบว่าคุณสามารถทำอะไรได้บ้างเพื่อเพิ่มประสิทธิภาพฐานข้อมูลเรียลไทม์ ให้รวบรวมข้อมูลผ่านเครื่องมือตรวจสอบฐานข้อมูลเรียลไทม์ต่างๆ จากนั้นทำการเปลี่ยนแปลงในแอปของคุณหรือการใช้งานฐานข้อมูลเรียลไทม์ตามนั้น
ตรวจสอบประสิทธิภาพฐานข้อมูลเรียลไทม์
คุณสามารถรวบรวมข้อมูลเกี่ยวกับประสิทธิภาพของฐานข้อมูลเรียลไทม์ผ่านเครื่องมือต่างๆ สองสามอย่าง ขึ้นอยู่กับระดับรายละเอียดที่คุณต้องการ:
- ภาพรวมระดับสูง: ใช้ เครื่องมือสร้างโปรไฟล์ สำหรับรายการการสืบค้นที่ไม่ได้จัดทำดัชนีและภาพรวมแบบเรียลไทม์ของการดำเนินการอ่าน/เขียน
- การใช้งานโดยประมาณที่เรียกเก็บเงิน: ใช้ เมตริกการใช้งาน ที่มีอยู่ใน คอนโซล Firebase เพื่อดูการใช้งานที่เรียกเก็บเงินและเมตริกประสิทธิภาพระดับสูง
- การเจาะลึกโดยละเอียด: ใช้ Cloud Monitoring เพื่อดูประสิทธิภาพฐานข้อมูลของคุณในช่วงเวลาต่างๆ ที่ละเอียดยิ่งขึ้น
ปรับปรุงประสิทธิภาพตามเมตริก
เมื่อคุณรวบรวมข้อมูลแล้ว ให้สำรวจแนวทางปฏิบัติที่ดีที่สุดและกลยุทธ์ต่อไปนี้ตามด้านประสิทธิภาพที่คุณต้องการปรับปรุง
กลยุทธ์การปรับปรุงประสิทธิภาพโดยสรุป | ||
---|---|---|
เมตริก | คำอธิบาย | ปฏิบัติที่ดีที่สุด |
โหลด/การใช้ประโยชน์ | ปรับปริมาณความจุฐานข้อมูลของคุณให้เหมาะสมในการประมวลผลคำขอในช่วงเวลาที่กำหนด (สะท้อนให้เห็นในตัววัด **โหลด** หรือ **io/database_load**) | เพิ่มประสิทธิภาพโครงสร้างข้อมูลของคุณ แบ่งข้อมูลข้ามฐานข้อมูล ปรับปรุงประสิทธิภาพผู้ฟัง จำกัดการดาวน์โหลดด้วยกฎที่ยึดตามการสืบค้น เพิ่มประสิทธิภาพการเชื่อมต่อ |
การเชื่อมต่อที่ใช้งานอยู่ | ปรับสมดุลจำนวนการเชื่อมต่อที่ใช้งานพร้อมกันกับฐานข้อมูลของคุณเพื่อให้อยู่ภายใต้ขีดจำกัดการเชื่อมต่อ 200,000 รายการ | แบ่งข้อมูลข้ามฐานข้อมูล ลดการเชื่อมต่อใหม่ |
แบนด์วิธขาออก | หากการดาวน์โหลดจากฐานข้อมูลของคุณดูเหมือนสูงกว่าที่คุณต้องการ คุณสามารถปรับปรุงประสิทธิภาพของการดำเนินการอ่านและลดค่าใช้จ่ายในการเข้ารหัสได้ | เพิ่มประสิทธิภาพการเชื่อมต่อ เพิ่มประสิทธิภาพโครงสร้างข้อมูลของคุณ จำกัดการดาวน์โหลดด้วยกฎที่ยึดตามการสืบค้น ใช้เซสชัน SSL ซ้ำ ปรับปรุงประสิทธิภาพผู้ฟัง จำกัดการเข้าถึงข้อมูล |
พื้นที่จัดเก็บ | ตรวจสอบให้แน่ใจว่าคุณไม่ได้จัดเก็บข้อมูลที่ไม่ได้ใช้ หรือปรับสมดุลข้อมูลที่จัดเก็บไว้ในฐานข้อมูลอื่นๆ และ/หรือผลิตภัณฑ์ Firebase เพื่อให้อยู่ภายใต้โควต้า | ล้างข้อมูลที่ไม่ได้ใช้ เพิ่มประสิทธิภาพโครงสร้างข้อมูลของคุณ แบ่งข้อมูลข้ามฐานข้อมูล ใช้ Cloud Storage สำหรับ Firebase |
เพิ่มประสิทธิภาพการเชื่อมต่อ
คำขอ RESTful เช่น GET
และ PUT
ยังคงต้องการการเชื่อมต่อ แม้ว่าการเชื่อมต่อนั้นจะมีอายุสั้นก็ตาม การเชื่อมต่อบ่อยครั้งและมีอายุสั้นเหล่านี้สามารถเพิ่มค่าใช้จ่ายในการเชื่อมต่อ โหลดฐานข้อมูล และแบนด์วิธขาออกได้มากกว่าการเชื่อมต่อแบบเรียลไทม์ไปยังฐานข้อมูลของคุณ
เมื่อใดก็ตามที่เป็นไปได้ ให้ใช้ SDK ดั้งเดิมสำหรับแพลตฟอร์มของแอปของคุณ แทน REST API SDK จะรักษาการเชื่อมต่อแบบเปิด ซึ่งช่วยลดค่าใช้จ่ายในการเข้ารหัส SSL และโหลดฐานข้อมูลที่รวมกับ REST API ได้
หากคุณใช้ REST API ให้ลองใช้ HTTP Keep-Alive เพื่อรักษาการเชื่อมต่อแบบเปิด หรือใช้ เหตุการณ์ที่เซิร์ฟเวอร์ส่ง ซึ่งสามารถลดต้นทุนจากการแฮนด์เชค SSL ได้
แบ่งข้อมูลข้ามฐานข้อมูลหลาย ๆ
การแบ่งข้อมูลของคุณออกเป็นอินสแตนซ์ Realtime Database หลายอินสแตนซ์ หรือที่เรียกว่าการแบ่งส่วนฐานข้อมูล ให้ประโยชน์ 3 ประการ:
- เพิ่มการเชื่อมต่อที่ใช้งานพร้อมกันทั้งหมดที่ได้รับอนุญาตบนแอปของคุณโดยแยกออกเป็นอินสแตนซ์ฐานข้อมูล
- ปรับสมดุลโหลดระหว่างอินสแตนซ์ฐานข้อมูล
- หากคุณมีกลุ่มผู้ใช้อิสระที่ต้องการเข้าถึงเฉพาะชุดข้อมูลแยกกัน ให้ใช้อินสแตนซ์ฐานข้อมูลที่แตกต่างกันเพื่อให้ได้ปริมาณงานที่สูงขึ้นและเวลาแฝงที่ต่ำกว่า
หากคุณใช้ แผนราคา Blaze คุณสามารถสร้างอินสแตนซ์ฐานข้อมูลได้หลายอินสแตนซ์ภายในโปรเจ็กต์ Firebase เดียวกัน โดยใช้ประโยชน์จากวิธีการตรวจสอบสิทธิ์ผู้ใช้ทั่วไปในอินสแตนซ์ฐานข้อมูล
เรียนรู้เพิ่มเติมเกี่ยวกับวิธีและเวลาในการ แบ่งส่วนข้อมูล
สร้างโครงสร้างข้อมูลที่มีประสิทธิภาพ
เนื่องจากฐานข้อมูลเรียลไทม์ดึงข้อมูลจากโหนดลูกของเส้นทางเช่นเดียวกับเส้นทาง จึงสมเหตุสมผลที่จะรักษาโครงสร้างข้อมูลของคุณให้เรียบที่สุดเท่าที่จะเป็นไปได้ ด้วยวิธีนี้ คุณสามารถเลือกดึงข้อมูลที่คุณต้องการ โดยไม่ต้องดาวน์โหลดข้อมูลที่ไม่จำเป็นไปยังไคลเอนต์ด้วย
โดยเฉพาะอย่างยิ่ง ให้พิจารณาเขียนและลบเมื่อคุณจัดโครงสร้างข้อมูล ตัวอย่างเช่น เส้นทางที่มีใบไม้นับพันใบอาจมีราคาแพงในการลบ การแยกออกเป็นเส้นทางที่มีทรีย่อยหลายรายการและมีใบต่อโหนดน้อยลงสามารถเร่งการลบได้
นอกจากนี้ การเขียนแต่ละครั้งอาจใช้พื้นที่ 0.1% ของการใช้งานฐานข้อมูลทั้งหมดของคุณ จัดโครงสร้างข้อมูลของคุณในลักษณะที่ช่วยให้คุณสามารถเขียนแบทช์ลงในการดำเนินการเดียวเป็นการอัปเดตแบบหลายพาธผ่านเมธอด update()
ใน SDK หรือคำขอ RESTful PATCH
หากต้องการเพิ่มประสิทธิภาพโครงสร้างข้อมูลของคุณและปรับปรุงประสิทธิภาพ ให้ปฏิบัติตาม แนวทางปฏิบัติที่ดีที่สุดสำหรับโครงสร้างข้อมูล
ป้องกันการเข้าถึงโดยไม่ได้รับอนุญาต
ป้องกันการดำเนินการที่ไม่ได้รับอนุญาตบนฐานข้อมูลของคุณด้วยกฎความปลอดภัยของฐานข้อมูลแบบเรียลไทม์ ตัวอย่างเช่น การใช้กฎอาจหลีกเลี่ยงสถานการณ์ที่ผู้ใช้ที่เป็นอันตรายดาวน์โหลดฐานข้อมูลทั้งหมดของคุณซ้ำๆ
เรียนรู้เพิ่มเติมเกี่ยวกับ การใช้กฎฐานข้อมูลเรียลไทม์ของ Firebase
ใช้กฎที่ยึดตามการสืบค้นเพื่อจำกัดการดาวน์โหลด
กฎการรักษาความปลอดภัยของฐานข้อมูลแบบเรียลไทม์จะจำกัดการเข้าถึงข้อมูลในฐานข้อมูลของคุณ แต่ยังสามารถใช้เป็นขีดจำกัดของข้อมูลที่ส่งคืนผ่านการดำเนินการอ่านได้อีกด้วย เมื่อคุณใช้กฎที่ยึดตามคิวรี ตามที่กำหนดโดย query.
นิพจน์เช่น query.limitToFirst
คิวรีจะดึงข้อมูลที่ถูกผูกไว้ตามกฎเท่านั้น
ตัวอย่างเช่น กฎต่อไปนี้จำกัดการเข้าถึงแบบอ่านเฉพาะผลลัพธ์ 1,000 รายการแรกของการสืบค้น โดยเรียงลำดับตามลำดับความสำคัญ:
messages: {
".read": "query.orderByKey &&
query.limitToFirst <= 1000"
}
// Example query:
db.ref("messages").limitToFirst(1000)
.orderByKey("value")
เรียนรู้เพิ่มเติมเกี่ยวกับ กฎความปลอดภัยของฐานข้อมูลแบบเรียลไทม์
แบบสอบถามดัชนี
การจัดทำดัชนีข้อมูล จะช่วยลดแบนด์วิดท์ทั้งหมดที่คุณใช้สำหรับการค้นหาแต่ละครั้งที่แอปของคุณทำงาน
ใช้เซสชัน SSL ซ้ำ
ลดต้นทุนค่าใช้จ่ายในการเข้ารหัส SSL ในการเชื่อมต่อต่อโดยการออก ตั๋วเซสชัน TLS สิ่งนี้มีประโยชน์อย่างยิ่งหากคุณต้องการเชื่อมต่อกับฐานข้อมูลบ่อยครั้งและปลอดภัย
ปรับปรุงประสิทธิภาพผู้ฟัง
วางผู้ฟังของคุณให้อยู่ในเส้นทางให้ไกลที่สุดเพื่อจำกัดจำนวนข้อมูลที่พวกเขาซิงค์ ผู้ฟังของคุณควรอยู่ใกล้กับข้อมูลที่คุณต้องการให้พวกเขาได้รับ อย่าฟังที่รากฐานข้อมูล เนื่องจากจะส่งผลให้มีการดาวน์โหลดฐานข้อมูลทั้งหมดของคุณ
เพิ่มการสืบค้นเพื่อจำกัดข้อมูลที่การดำเนินการ Listen ของคุณส่งคืน และใช้ Listener ที่ดาวน์โหลดการอัปเดตไปยังข้อมูลเท่านั้น ตัวอย่างเช่น on()
แทนที่จะเป็น once()
สำรอง .once()
สำหรับการดำเนินการที่ไม่จำเป็นต้องอัปเดตข้อมูลอย่างแท้จริง นอกจากนี้ ให้จัดเรียงคำค้นหาของคุณโดยใช้ orderByKey()
ทุกครั้งที่เป็นไปได้เพื่อประสิทธิภาพที่ดีที่สุด การเรียงลำดับด้วย orderByChild()
อาจช้าลง 6-8 เท่า และการเรียงลำดับด้วย orderByValue()
อาจช้ามากสำหรับชุดข้อมูลขนาดใหญ่ เนื่องจากจำเป็นต้องอ่านตำแหน่งทั้งหมดจากเลเยอร์การคงอยู่
อย่าลืมเพิ่ม Listener แบบไดนามิกด้วย และลบออกเมื่อไม่จำเป็นอีกต่อไป
ล้างข้อมูลที่ไม่ได้ใช้
ลบข้อมูลที่ไม่ได้ใช้หรือซ้ำกันในฐานข้อมูลของคุณเป็นระยะๆ คุณสามารถ สำรองข้อมูล เพื่อตรวจสอบข้อมูลด้วยตนเองหรือสำรองข้อมูลไปยังที่เก็บข้อมูล Google Cloud Storage เป็นระยะๆ นอกจากนี้ ให้พิจารณาโฮสต์ข้อมูลที่เก็บไว้ผ่าน Cloud Storage สำหรับ Firebase
จัดส่งรหัสที่ปรับขนาดได้ซึ่งคุณสามารถอัปเดตได้
แอปที่สร้างไว้ในอุปกรณ์ IoT ควรมีโค้ดที่ปรับขนาดได้ซึ่งคุณสามารถอัปเดตได้อย่างง่ายดาย ตรวจสอบให้แน่ใจว่าได้ทดสอบกรณีการใช้งานอย่างละเอียด คำนึงถึงสถานการณ์ที่คุณอาจขยายฐานผู้ใช้ของคุณแบบทวีคูณ และสร้างความสามารถในการปรับใช้การอัปเดตกับโค้ดของคุณ พิจารณาการเปลี่ยนแปลงสำคัญๆ ที่คุณอาจต้องดำเนินการอย่างรอบคอบ เช่น หากคุณตัดสินใจที่จะแบ่งข้อมูลของคุณ