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

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

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