เพิ่มประสิทธิภาพฐานข้อมูล

มีหลายวิธีในการปรับปรุงประสิทธิภาพฐานข้อมูล 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 ประการ:

  1. เพิ่มการเชื่อมต่อที่ใช้งานพร้อมกันทั้งหมดที่ได้รับอนุญาตบนแอปของคุณโดยแยกออกเป็นอินสแตนซ์ฐานข้อมูล
  2. ปรับสมดุลโหลดระหว่างอินสแตนซ์ฐานข้อมูล
  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 ควรมีโค้ดที่ปรับขนาดได้ซึ่งคุณสามารถอัปเดตได้อย่างง่ายดาย ตรวจสอบให้แน่ใจว่าได้ทดสอบกรณีการใช้งานอย่างละเอียด คำนึงถึงสถานการณ์ที่คุณอาจขยายฐานผู้ใช้ของคุณแบบทวีคูณ และสร้างความสามารถในการปรับใช้การอัปเดตกับโค้ดของคุณ พิจารณาการเปลี่ยนแปลงสำคัญๆ ที่คุณอาจต้องดำเนินการอย่างรอบคอบ เช่น หากคุณตัดสินใจที่จะแบ่งข้อมูลของคุณ