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
- ตรวจสอบข้อบกพร่อง: หากค่าใช้จ่ายแบนด์วิดท์สูงกว่าที่คาดไว้ ให้ตรวจสอบว่าแอปไม่ได้ซิงค์ข้อมูลมากกว่าหรือบ่อยกว่าที่คุณตั้งใจไว้ในตอนแรก หากต้องการระบุปัญหา ให้ใช้เครื่องมือ Profiler เพื่อ วัดการดำเนินการอ่านและเปิดการบันทึกการแก้ไขข้อบกพร่องใน SDK ของ Android Objective-C และ Web ตรวจสอบกระบวนการทำงานเบื้องหลังและการซิงค์ในแอปเพื่อให้แน่ใจว่า ทุกอย่างทำงานได้ตามที่คุณต้องการ
- ลดการเชื่อมต่อ: หากเป็นไปได้ ให้ลองเพิ่มประสิทธิภาพแบนด์วิดท์ การเชื่อมต่อ คำขอ REST ขนาดเล็กที่ส่งบ่อยๆ อาจมีค่าใช้จ่ายมากกว่าการเชื่อมต่อแบบต่อเนื่องครั้งเดียวโดยใช้ SDK เนทีฟ หากใช้ REST API ให้พิจารณาใช้ HTTP Keep-Alive หรือ เหตุการณ์ที่เซิร์ฟเวอร์ส่ง ซึ่งจะช่วยลดค่าใช้จ่ายจากการแฮนด์เชค SSL ได้
- ใช้ตั๋วเซสชัน TLS: ลดต้นทุนค่าใช้จ่ายในการเข้ารหัส SSL ในการเชื่อมต่อที่กลับมาทำงานอีกครั้งโดยการออกตั๋วเซสชัน TLS ซึ่งจะเป็นประโยชน์อย่างยิ่งหากคุณต้องการการเชื่อมต่อที่ปลอดภัยกับฐานข้อมูลบ่อยๆ
- การค้นหาดัชนี: การจัดทำดัชนีข้อมูล จะลดแบนด์วิดท์ทั้งหมดที่คุณใช้สำหรับการค้นหา ซึ่งมีประโยชน์ 2 ประการ คือลดต้นทุนและเพิ่มประสิทธิภาพของฐานข้อมูล ใช้ เครื่องมือ Profiler เพื่อค้นหาคำค้นหาที่ไม่ได้จัดทำดัชนีใน ฐานข้อมูล
- เพิ่มประสิทธิภาพ Listener: เพิ่มการค้นหาเพื่อจำกัดข้อมูลที่การดำเนินการ listen
จะแสดงผล และใช้ Listener ที่ดาวน์โหลดเฉพาะการอัปเดตข้อมูล เช่น
on()
แทนonce()
นอกจากนี้ ให้วาง Listener ไว้ที่ ลึกที่สุดเท่าที่จะทำได้เพื่อจำกัดปริมาณข้อมูลที่ซิงค์ - ลดค่าใช้จ่ายในการจัดเก็บข้อมูล: เรียกใช้การล้างข้อมูลเป็นระยะและลดข้อมูลที่ซ้ำกันในฐานข้อมูล
- ใช้กฎ: ป้องกันการดำเนินการที่ไม่ได้รับอนุญาตซึ่งอาจมีค่าใช้จ่ายสูงในฐานข้อมูล เช่น การใช้ Firebase Realtime Database Security Rules อาจช่วยหลีกเลี่ยงสถานการณ์ ที่ผู้ใช้ที่เป็นอันตรายดาวน์โหลดทั้งฐานข้อมูลของคุณซ้ำๆ ดูข้อมูลเพิ่มเติมเกี่ยวกับ การใช้กฎของ Firebase Realtime Database
แผนการเพิ่มประสิทธิภาพที่ดีที่สุดสำหรับแอปจะขึ้นอยู่กับกรณีการใช้งานของคุณ แม้ว่ารายการนี้จะไม่ใช่แนวทางปฏิบัติแนะนำทั้งหมด แต่คุณสามารถดูคำแนะนำและเคล็ดลับเพิ่มเติมจากผู้เชี่ยวชาญของ Firebase ได้ในช่อง Slack หรือใน Stack Overflow