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