ทำความเข้าใจการเรียกเก็บเงินของ Realtime Database

เมื่อโปรเจ็กต์ใช้แพ็กเกจราคา Spark แบบไม่มีค่าใช้จ่าย ระบบจะไม่เรียกเก็บเงินค่าใช้งาน Realtime Database จากคุณ คุณจะได้รับการใช้งานแบบไม่มีค่าใช้จ่ายซึ่งรวมถึงพื้นที่เก็บข้อมูล 1 GB และการดาวน์โหลดข้อมูล 10 GB/เดือน

หากอัปเกรดเป็นแพ็กเกจราคา Blaze แบบจ่ายเมื่อใช้ คุณจะยังคงใช้บริการแบบไม่มีค่าใช้จ่ายได้ (พื้นที่เก็บข้อมูล 1 GB และการดาวน์โหลดข้อมูล 10 GB/เดือน) และระบบจะเรียกเก็บเงินสำหรับการใช้งานที่เกินจำนวนดังกล่าว เมื่อโปรเจ็กต์ใช้แพ็กเกจราคา Blaze เราขอแนะนำให้ตั้งค่าการแจ้งเตือนงบประมาณสำหรับโปรเจ็กต์

ส่วนที่เหลือของหน้านี้จะอธิบายการเรียกเก็บเงินโดยละเอียดยิ่งขึ้น

วิธีที่ Realtime Database คำนวณการเรียกเก็บเงิน

Firebase จะเรียกเก็บเงินสำหรับข้อมูลที่คุณจัดเก็บไว้ในฐานข้อมูลและการจราจรของข้อมูลในเครือข่ายขาออกทั้งหมดที่เลเยอร์เซสชัน (เลเยอร์ 5) ของโมเดล OSI ระบบจะเรียกเก็บเงินค่าพื้นที่เก็บข้อมูลในราคา $5 ต่อ GB/เดือน โดยประเมินเป็นรายวัน การเรียกเก็บเงินจะไม่ได้รับผลกระทบจากตำแหน่งของฐานข้อมูล การรับส่งข้อมูลขาออกรวมถึงค่าใช้จ่ายในการเชื่อมต่อและการเข้ารหัสจากการดำเนินการฐานข้อมูลทั้งหมดและข้อมูลที่ดาวน์โหลดผ่านการอ่านฐานข้อมูล ทั้งการอ่านและการเขียนฐานข้อมูลอาจทำให้เกิดค่าใช้จ่ายในการเชื่อมต่อในใบเรียกเก็บเงินของคุณ การรับส่งข้อมูลทั้งหมดเข้าและออกจากฐานข้อมูล รวมถึงการดำเนินการที่ถูกปฏิเสธโดยกฎความปลอดภัย จะทำให้เกิดค่าใช้จ่ายที่เรียกเก็บได้

ตัวอย่างการเข้าชมที่เรียกเก็บเงินที่พบบ่อย ได้แก่

  • ข้อมูลที่ดาวน์โหลด: เมื่อไคลเอ็นต์ได้รับข้อมูลจากฐานข้อมูลของคุณ Firebase จะเรียกเก็บเงินสำหรับข้อมูลที่ดาวน์โหลด โดยปกติแล้ว ค่าใช้จ่ายนี้จะคิดเป็นค่าใช้จ่ายแบนด์วิดท์ส่วนใหญ่ แต่ไม่ใช่ปัจจัยเดียวในใบเรียกเก็บเงิน
  • ค่าใช้จ่ายเพิ่มเติมของโปรโตคอล: การเข้าชมเพิ่มเติมบางส่วนระหว่างเซิร์ฟเวอร์และไคลเอ็นต์เป็นสิ่งจำเป็นในการสร้างและรักษาเซสชัน การรับส่งข้อมูลนี้อาจรวมถึงค่าใช้จ่ายเพิ่มเติมของโปรโตคอลแบบเรียลไทม์ของฐานข้อมูลเรียลไทม์ของ Firebase, ค่าใช้จ่ายเพิ่มเติมของ 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, Long Polling และเหตุการณ์ที่เซิร์ฟเวอร์ 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 ได้
  • ใช้ตั๋วเซสชัน TLS: ลดค่าใช้จ่ายในการเข้ารหัส SSL สำหรับการเชื่อมต่อที่กลับมาทำงานอีกครั้งโดยการออกตั๋วเซสชัน TLS ซึ่งจะเป็นประโยชน์อย่างยิ่งหากคุณต้องการการเชื่อมต่อกับฐานข้อมูลที่ปลอดภัยและบ่อยครั้ง
  • การค้นหาดัชนี: การจัดทำดัชนีข้อมูลจะช่วยลดแบนด์วิดท์ทั้งหมดที่คุณใช้สำหรับการค้นหา ซึ่งมีประโยชน์ 2 อย่างคือช่วยลดค่าใช้จ่ายและเพิ่มประสิทธิภาพของฐานข้อมูล ใช้เครื่องมือสร้างโปรไฟล์เพื่อค้นหาการค้นหาที่ไม่ได้จัดทำดัชนีในฐานข้อมูล
  • เพิ่มประสิทธิภาพ Listener: เพิ่มการค้นหาเพื่อจำกัดข้อมูลที่การดำเนินการฟังแสดงผล และใช้ Listener ที่ดาวน์โหลดเฉพาะการอัปเดตข้อมูล เช่น on() แทน once() นอกจากนี้ ให้วาง Listener ไว้ที่ตำแหน่งลึกที่สุดเท่าที่จะทำได้เพื่อจำกัดปริมาณข้อมูลที่ซิงค์
  • ลดค่าใช้จ่ายในการจัดเก็บข้อมูล: เรียกใช้งานการล้างข้อมูลเป็นระยะๆ และลดข้อมูลที่ซ้ำกันในฐานข้อมูล
  • ใช้กฎ: ป้องกันการดำเนินการที่ไม่ได้รับอนุญาตซึ่งอาจมีค่าใช้จ่ายสูงในฐานข้อมูล ตัวอย่างเช่น การใช้ Firebase Realtime Database Security Rules จะช่วยหลีกเลี่ยงสถานการณ์ที่ผู้ใช้ที่เป็นอันตรายดาวน์โหลดฐานข้อมูลทั้งหมดของคุณซ้ำๆ ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้กฎฐานข้อมูลเรียลไทม์ของ Firebase

แผนการเพิ่มประสิทธิภาพที่ดีที่สุดสำหรับแอปจะขึ้นอยู่กับกรณีการใช้งานของคุณ แม้ว่านี่จะไม่ใช่รายการแนวทางปฏิบัติแนะนำทั้งหมด แต่คุณสามารถดูคำแนะนำและเคล็ดลับเพิ่มเติมจากผู้เชี่ยวชาญ Firebase ได้ในช่อง Slack หรือใน Stack Overflow