Firebase จะเรียกเก็บเงินสำหรับข้อมูลที่จัดเก็บไว้ในฐานข้อมูลและการรับส่งข้อมูลทั้งหมดขาออกของเครือข่ายที่เลเยอร์เซสชัน (เลเยอร์ 5) ของรูปแบบ OSI ระบบจะเรียกเก็บเงินค่าพื้นที่เก็บข้อมูลในอัตรา $5 ต่อ GB/เดือน โดยประเมินเป็นรายวัน การเรียกเก็บเงินจะไม่ได้รับผลกระทบจากตำแหน่งของฐานข้อมูล การรับส่งข้อมูลขาออกรวมถึงการเชื่อมต่อและส่วนเกินของการเข้ารหัสจากการดำเนินการกับฐานข้อมูลทั้งหมดและข้อมูลที่ดาวน์โหลดผ่านการอ่านฐานข้อมูล ทั้งการอ่านและการเขียนฐานข้อมูลอาจทําให้เกิดค่าใช้จ่ายในการเชื่อมต่อในใบเรียกเก็บเงิน การรับส่งข้อมูลทั้งหมดไปยังและจากฐานข้อมูล รวมถึงการดำเนินการที่ถูกปฏิเสธโดยกฎการรักษาความปลอดภัยจะทำให้เกิดค่าใช้จ่าย
ตัวอย่างที่พบได้บ่อยของการเข้าชมที่มีการเรียกเก็บเงิน ได้แก่
- ข้อมูลที่ดาวน์โหลด: เมื่อไคลเอ็นต์รับข้อมูลจากฐานข้อมูล Firebase จะเรียกเก็บเงินสำหรับข้อมูลที่ดาวน์โหลด โดยปกติแล้ว ปริมาณการรับส่งข้อมูลจะคิดเป็นสัดส่วนส่วนใหญ่ของค่าใช้จ่ายแบนด์วิดท์ แต่ไม่ใช่ปัจจัยเดียวในใบเรียกเก็บเงิน
- ค่าใช้จ่ายเพิ่มเติมของโปรโตคอล: การรับส่งข้อมูลเพิ่มเติมระหว่างเซิร์ฟเวอร์กับไคลเอ็นต์ที่จําเป็นต่อการสร้างและดูแลรักษาเซสชัน การเข้าชมนี้อาจรวมถึงค่าใช้จ่ายเพิ่มเติมของโปรโตคอลแบบเรียลไทม์ของ Firebase Realtime Database, ค่าใช้จ่ายเพิ่มเติมของ WebSocket และค่าใช้จ่ายเพิ่มเติมของส่วนหัว HTTP ทั้งนี้ขึ้นอยู่กับโปรโตคอลพื้นฐาน ทุกครั้งที่สร้างการเชื่อมต่อ ค่าใช้จ่ายเพิ่มเติมนี้รวมกับค่าใช้จ่ายเพิ่มเติมในการเข้ารหัส SSL จะส่งผลให้มีค่าใช้จ่ายในการเชื่อมต่อ แม้ว่าแบนด์วิดท์นี้จะไม่มากนักสำหรับคำขอเดียว แต่อาจคิดเป็นสัดส่วนสำคัญของการเรียกเก็บเงินได้หากเพย์โหลดมีขนาดเล็กหรือคุณเชื่อมต่อสั้นๆ บ่อยครั้ง
- ค่าใช้จ่ายเพิ่มเติมในการเข้ารหัส SSL: ค่าใช้จ่ายเพิ่มเติมในการเข้ารหัส SSL ที่จําเป็นสําหรับการเชื่อมต่อที่ปลอดภัย โดยเฉลี่ยแล้ว ต้นทุนนี้จะอยู่ที่ประมาณ 3.5 KB สำหรับแฮนเดิลเริ่มต้น และประมาณ 10-20 ไบต์สําหรับส่วนหัวระเบียน TLS ในข้อความขาออกแต่ละรายการ สำหรับแอปส่วนใหญ่ ค่าใช้จ่ายนี้คิดเป็นเพียงส่วนน้อยของค่าบริการ อย่างไรก็ตาม เปอร์เซ็นต์นี้อาจสูงมากหากกรณีของคุณต้องมีการจับมือ SSL จำนวนมาก ตัวอย่างเช่น อุปกรณ์ที่ไม่รองรับตั๋วเซสชัน TLS อาจต้องมีการจับมือการเชื่อมต่อ SSL จำนวนมาก
- ข้อมูลคอนโซล Firebase: แม้ว่าโดยปกติแล้วค่าใช้จ่ายนี้จะไม่คิดเป็นสัดส่วนที่มากของ Realtime Database แต่ Firebase จะเรียกเก็บเงินสำหรับข้อมูลที่อ่านและเขียนจากคอนโซล Firebase
ประมาณการการใช้งานที่เรียกเก็บเงิน
หากต้องการดูการเชื่อมต่อและปริมาณการใช้อินเทอร์เน็ต Realtime Database ในปัจจุบัน ให้ดูแท็บการใช้งานในคอนโซล Firebase คุณสามารถตรวจสอบการใช้งานในช่วงที่เรียกเก็บเงินปัจจุบัน 30 วันที่ผ่านมา หรือ 24 ชั่วโมงที่ผ่านมา
Firebase จะแสดงสถิติการใช้งานสําหรับเมตริกต่อไปนี้
- การเชื่อมต่อ: จำนวนการเชื่อมต่อแบบเรียลไทม์ที่เปิดอยู่พร้อมกันในขณะนี้ไปยังฐานข้อมูลของคุณ ซึ่งรวมถึงการเชื่อมต่อแบบเรียลไทม์ต่อไปนี้ WebSocket, การโพลลิงแบบนาน และเหตุการณ์ที่เซิร์ฟเวอร์ HTML ส่ง แต่ไม่รวมคำขอ RESTful
- พื้นที่เก็บข้อมูล: ปริมาณข้อมูลที่จัดเก็บไว้ในฐานข้อมูล ซึ่งไม่รวมโฮสติ้งของ Firebase หรือข้อมูลที่จัดเก็บผ่านผลิตภัณฑ์อื่นๆ ของ Firebase
- การดาวน์โหลด: ไบต์ทั้งหมดที่ดาวน์โหลดจากฐานข้อมูลของคุณ รวมถึงโปรโตคอลและส่วนเกินของการเข้ารหัส
- การโหลด: กราฟนี้แสดงปริมาณฐานข้อมูลที่ใช้งานอยู่และประมวลผลคําขอในช่วงเวลา 1 นาที คุณอาจพบปัญหาด้านประสิทธิภาพในขณะที่ความคืบหน้าใกล้ถึง 100%
เพิ่มประสิทธิภาพการใช้งาน
แนวทางปฏิบัติแนะนำบางประการที่คุณนำไปใช้เพื่อเพิ่มประสิทธิภาพการใช้ฐานข้อมูลและค่าใช้จ่ายแบนด์วิดท์ได้
- ใช้ SDK เนทีฟ: ใช้ SDK ที่สอดคล้องกับแพลตฟอร์มของแอปแทน REST API ทุกครั้งที่เป็นไปได้ SDK จะรักษาการเชื่อมต่อไว้ ซึ่งจะช่วยลดค่าใช้จ่ายในการเข้ารหัส SSL ที่มักจะเพิ่มเข้ามากับ REST API
- ตรวจหาข้อบกพร่อง: หากค่าบริการแบนด์วิดท์สูงเกินความคาดหมาย ให้ตรวจสอบว่าแอปไม่ได้ซิงค์ข้อมูลมากขึ้นหรือซิงค์บ่อยกว่าที่ตั้งใจไว้ตั้งแต่แรก หากต้องการระบุปัญหา ให้ใช้เครื่องมือวิเคราะห์โปรไฟล์เพื่อวัดการดําเนินการอ่านและเปิดการบันทึกการแก้ไขข้อบกพร่องใน SDK ของ Android, Objective-C และ เว็บ ตรวจสอบกระบวนการทำงานเบื้องหลังและการซิงค์ในแอปเพื่อให้แน่ใจว่าทุกอย่างทำงานได้ตามที่คุณต้องการ
- ลดการเชื่อมต่อ: หากเป็นไปได้ ให้ลองเพิ่มประสิทธิภาพแบนด์วิดท์การเชื่อมต่อ คำขอ REST ขนาดเล็กที่ส่งบ่อยอาจเสียค่าใช้จ่ายมากกว่าการเชื่อมต่อต่อเนื่องครั้งเดียวโดยใช้ SDK เดิม หากคุณใช้ REST API ให้พิจารณาใช้ HTTP Keep-Alive หรือเหตุการณ์ที่เซิร์ฟเวอร์ส่ง ซึ่งจะช่วยลดค่าใช้จ่ายจาก SSL Handshake ได้
- ใช้ TLS Session Ticket: ลดค่าใช้จ่ายในการเข้ารหัส SSL เพิ่มเติมในการเชื่อมต่อที่กลับมาทำงานอีกครั้งโดยการออกTLS Session Ticket ซึ่งจะเป็นประโยชน์อย่างยิ่งหากคุณต้องการการเชื่อมต่อที่ปลอดภัยกับฐานข้อมูลบ่อยครั้ง
- การค้นหาดัชนี: การจัดทําดัชนีข้อมูลช่วยลดแบนด์วิดท์ทั้งหมดที่คุณใช้สําหรับการค้นหา ซึ่งให้ประโยชน์ 2 อย่างคือการลดต้นทุนและเพิ่มประสิทธิภาพฐานข้อมูล ใช้เครื่องมือวิเคราะห์เพื่อค้นหาคำค้นหาที่ไม่ได้จัดทำดัชนีในฐานข้อมูล
- เพิ่มประสิทธิภาพโปรแกรมฟัง: เพิ่มการค้นหาเพื่อจำกัดข้อมูลที่ฟังจะแสดงผล และใช้โปรแกรมฟังที่ดาวน์โหลดเฉพาะข้อมูลอัปเดต เช่น
on()
แทนonce()
นอกจากนี้ ให้วางตัวฟังก์ชันไว้ท้ายสุดของเส้นทางเท่าที่จะทำได้เพื่อจำกัดปริมาณข้อมูลที่ซิงค์ - ลดค่าใช้จ่ายในการจัดเก็บข้อมูล: เรียกใช้งานล้างข้อมูลเป็นระยะๆ และลดข้อมูลซ้ำในฐานข้อมูล
- ใช้กฎ: ป้องกันการดำเนินการที่ไม่ได้รับอนุญาตซึ่งอาจก่อให้เกิดความเสียหายมูลค่าสูงในฐานข้อมูล เช่น การใช้ Firebase Realtime Database Security Rules อาจช่วยหลีกเลี่ยงสถานการณ์ที่ผู้ใช้ที่เป็นอันตรายดาวน์โหลดฐานข้อมูลทั้งหมดของคุณซ้ำๆ ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้กฎ Firebase Realtime Database
แผนการเพิ่มประสิทธิภาพที่ดีที่สุดสําหรับแอปจะขึ้นอยู่กับ Use Case เฉพาะ แม้ว่านี่จะไม่ใช่รายการแนวทางปฏิบัติแนะนำที่ครอบคลุมทั้งหมด แต่คุณสามารถดูคําแนะนําและเคล็ดลับเพิ่มเติมจากผู้เชี่ยวชาญ Firebase ได้ในแชแนล Slack หรือใน Stack Overflow