Firebase จะเรียกเก็บเงินสำหรับข้อมูลที่จัดเก็บไว้ในฐานข้อมูลและการรับส่งข้อมูลทั้งหมดขาออกของเครือข่ายที่เลเยอร์เซสชัน (เลเยอร์ 5) ของรูปแบบ OSI ระบบจะเรียกเก็บเงินค่าพื้นที่เก็บข้อมูลในอัตรา $5 ต่อ GB/เดือน โดยประเมินเป็นรายวัน การเรียกเก็บเงินจะไม่ได้รับผลกระทบจากตำแหน่งของฐานข้อมูล การรับส่งข้อมูลขาออกรวมถึงการเชื่อมต่อและส่วนเกินของการเข้ารหัสจากการดำเนินการกับฐานข้อมูลทั้งหมดและข้อมูลที่ดาวน์โหลดผ่านการอ่านฐานข้อมูล ทั้งการอ่านและการเขียนฐานข้อมูลอาจทําให้เกิดค่าใช้จ่ายในการเชื่อมต่อในใบเรียกเก็บเงิน การรับส่งข้อมูลทั้งหมดไปยังและจากฐานข้อมูล รวมถึงการดำเนินการที่ถูกปฏิเสธโดยกฎการรักษาความปลอดภัยจะทำให้เกิดค่าใช้จ่าย
ตัวอย่างที่พบได้บ่อยของการเข้าชมที่มีการเรียกเก็บเงิน ได้แก่
- ข้อมูลที่ดาวน์โหลด: เมื่อไคลเอ็นต์รับข้อมูลจากฐานข้อมูล Firebase จะเรียกเก็บเงินสำหรับข้อมูลที่ดาวน์โหลด โดยปกติแล้ว ปริมาณการรับส่งข้อมูลจะคิดเป็นสัดส่วนส่วนใหญ่ของค่าใช้จ่ายแบนด์วิดท์ แต่ไม่ใช่ปัจจัยเดียวในใบเรียกเก็บเงิน
- โอเวอร์เฮดของโปรโตคอล: การรับส่งข้อมูลเพิ่มเติมบางอย่างระหว่างเซิร์ฟเวอร์และไคลเอ็นต์เป็นสิ่งจำเป็นในการสร้างและดูแลรักษาเซสชัน การเข้าชมนี้อาจรวมถึงค่าใช้จ่ายเพิ่มเติมของโปรโตคอลแบบเรียลไทม์ของ Firebase Realtime Database, ค่าใช้จ่ายเพิ่มเติมของ WebSocket และค่าใช้จ่ายเพิ่มเติมของส่วนหัว HTTP ทั้งนี้ขึ้นอยู่กับโปรโตคอลพื้นฐาน ทุกครั้งที่สร้างการเชื่อมต่อ ค่าใช้จ่ายเพิ่มเติมนี้รวมกับค่าใช้จ่ายเพิ่มเติมในการเข้ารหัส SSL จะส่งผลให้มีค่าใช้จ่ายในการเชื่อมต่อ แม้ว่าแบนด์วิดท์นี้จะไม่มากนักสำหรับคำขอเดียว แต่อาจคิดเป็นสัดส่วนที่สำคัญของค่าบริการได้หากเพย์โหลดมีขนาดเล็กมากหรือคุณเชื่อมต่อสั้นๆ บ่อยครั้ง
- ค่าใช้จ่ายเพิ่มเติมในการเข้ารหัส SSL: ค่าใช้จ่ายเพิ่มเติมในการเข้ารหัส SSL ที่จําเป็นสําหรับการเชื่อมต่อที่ปลอดภัย โดยเฉลี่ยแล้ว ค่าใช้จ่ายนี้จะอยู่ที่ประมาณ 3.5 KB สำหรับแฮนด์เชคครั้งแรก และประมาณ 10 ไบต์สำหรับส่วนหัวของระเบียน 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 เท่าในการลดต้นทุนและเพิ่มประสิทธิภาพของฐานข้อมูล ใช้เครื่องมือวิเคราะห์เพื่อค้นหาคำค้นหาที่ไม่ได้จัดทำดัชนีในฐานข้อมูล
- เพิ่มประสิทธิภาพ Listeners: เพิ่มการค้นหาเพื่อจํากัดข้อมูลที่ฟังก์ชันการฟังจะแสดงผล และใช้ Listeners ที่ดาวน์โหลดเฉพาะข้อมูลอัปเดต เช่น
on()
แทนonce()
นอกจากนี้ ให้วางตัวฟังก์ชันไว้ที่ด้านล่างสุดของเส้นทางเพื่อจำกัดปริมาณข้อมูลที่ซิงค์ - ลดค่าใช้จ่ายของพื้นที่เก็บข้อมูล: เรียกใช้งานการทำความสะอาดเป็นระยะและลดข้อมูลที่ซ้ำในฐานข้อมูล
- ใช้กฎ: ป้องกันการดำเนินการที่ไม่ได้รับอนุญาตซึ่งอาจก่อให้เกิดความเสียหายมูลค่าสูงในฐานข้อมูล เช่น การใช้ Firebase Realtime Database Security Rules อาจช่วยหลีกเลี่ยงสถานการณ์ที่ผู้ใช้ที่เป็นอันตรายดาวน์โหลดฐานข้อมูลทั้งหมดของคุณซ้ำๆ ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้กฎ Firebase Realtime Database
แผนการเพิ่มประสิทธิภาพที่ดีที่สุดสําหรับแอปจะขึ้นอยู่กับ Use Case เฉพาะ แม้ว่านี่จะไม่ใช่รายการแนวทางปฏิบัติแนะนำที่ครอบคลุมทั้งหมด แต่คุณสามารถดูคําแนะนําและเคล็ดลับเพิ่มเติมจากผู้เชี่ยวชาญ Firebase ได้ในแชแนล Slack หรือใน Stack Overflow