Khi dự án của bạn sử dụng Gói giá Spark không mất phí, bạn sẽ không bị tính phí cho việc sử dụng Realtime Database. Bạn được sử dụng miễn phí, bao gồm 1 GB bộ nhớ dữ liệu và 10 GB/tháng cho lượt tải dữ liệu xuống.
Nếu bạn nâng cấp lên gói giá Blaze (trả tiền theo mức dùng), thì bạn vẫn được sử dụng miễn phí (1 GB bộ nhớ dữ liệu và 10 GB/tháng cho lượt tải dữ liệu xuống) và giờ đây bạn sẽ bị tính phí cho mọi mức sử dụng vượt quá số lượng đó. Khi dự án của bạn sử dụng Gói giá Blaze, bạn nên thiết lập cảnh báo về ngân sách cho dự án của mình.
Phần còn lại của trang này mô tả chi tiết hơn về việc tính phí.
Cách Realtime Database tính phí
Firebase tính phí cho dữ liệu bạn lưu trữ trong cơ sở dữ liệu và tất cả lưu lượng truy cập mạng đi ở lớp phiên (lớp 5) của mô hình OSI. Bộ nhớ được tính phí ở mức 5 USD cho mỗi GB/tháng, được đánh giá hằng ngày. Việc tính phí không bị ảnh hưởng bởi vị trí của cơ sở dữ liệu. Lưu lượng truy cập đi bao gồm chi phí kết nối và mã hoá từ tất cả các thao tác trên cơ sở dữ liệu và dữ liệu được tải xuống thông qua các lượt đọc cơ sở dữ liệu. Cả lượt đọc và ghi cơ sở dữ liệu đều có thể dẫn đến chi phí kết nối trong hoá đơn của bạn. Tất cả lưu lượng truy cập đến và đi từ cơ sở dữ liệu của bạn, bao gồm cả các thao tác bị quy tắc bảo mật từ chối, đều dẫn đến chi phí có thể tính phí.
Sau đây là một số ví dụ thường gặp về lưu lượng truy cập bị tính phí:
- Dữ liệu được tải xuống: Khi các ứng dụng nhận dữ liệu từ cơ sở dữ liệu của bạn, Firebase sẽ tính phí cho dữ liệu được tải xuống. Thông thường, đây là phần lớn chi phí băng thông của bạn, nhưng không phải là yếu tố duy nhất trong hoá đơn của bạn.
- Chi phí giao thức: Bạn cần có một số lưu lượng truy cập bổ sung giữa máy chủ và ứng dụng để thiết lập và duy trì một phiên. Tuỳ thuộc vào giao thức cơ bản, lưu lượng truy cập này có thể bao gồm: chi phí giao thức theo thời gian thực của Cơ sở dữ liệu theo thời gian thực của Firebase, chi phí WebSocket và chi phí tiêu đề HTTP. Mỗi khi thiết lập một kết nối, chi phí này, kết hợp với mọi chi phí mã hoá SSL, sẽ góp phần vào chi phí kết nối. Mặc dù đây không phải là băng thông lớn cho một yêu cầu, nhưng có thể là một phần đáng kể trong hoá đơn của bạn nếu tải trọng của bạn nhỏ hoặc bạn thực hiện các kết nối ngắn, thường xuyên.
- Chi phí mã hoá SSL: Có một chi phí liên quan đến chi phí mã hoá SSL cần thiết cho các kết nối an toàn. Trung bình, chi phí này là khoảng 3, 5 KB cho lần bắt tay ban đầu và khoảng hàng chục byte cho tiêu đề bản ghi TLS trên mỗi tin nhắn đi. Đối với hầu hết các ứng dụng, đây là một tỷ lệ nhỏ trong hoá đơn của bạn. Tuy nhiên, tỷ lệ này có thể trở nên lớn nếu trường hợp cụ thể của bạn yêu cầu nhiều lần bắt tay SSL. Ví dụ: các thiết bị không hỗ trợ vé phiên TLS có thể yêu cầu nhiều lần bắt tay kết nối SSL.
- Firebase dữ liệu trong bảng điều khiển: Mặc dù đây thường không phải là một phần đáng kể trong chi phí Realtime Database, nhưng Firebase sẽ tính phí cho dữ liệu mà bạn đọc và ghi từ bảng điều khiển Firebase.
Ước tính mức sử dụng bị tính phí
Để xem các kết nối và mức sử dụng dữ liệu hiện tại của Realtime Database, hãy kiểm tra thẻ Mức sử dụng trong bảng điều khiển Firebase. Bạn có thể kiểm tra mức sử dụng trong kỳ tính phí hiện tại, 30 ngày qua hoặc 24 giờ qua.
Firebase cho thấy số liệu thống kê về mức sử dụng cho các chỉ số sau:
- Kết nối: Số lượng kết nối đồng thời, hiện đang mở và theo thời gian thực với cơ sở dữ liệu của bạn. Điều này bao gồm các kết nối theo thời gian thực sau: WebSocket, thăm dò ý kiến dài hạn và sự kiện do máy chủ HTML gửi. Không bao gồm các yêu cầu RESTful.
- Bộ nhớ: Lượng dữ liệu được lưu trữ trong cơ sở dữ liệu của bạn. Điều này không bao gồm dịch vụ lưu trữ Firebase hoặc dữ liệu được lưu trữ thông qua các sản phẩm khác của Firebase.
- Lượt tải xuống: Tất cả byte được tải xuống từ cơ sở dữ liệu của bạn, bao gồm cả chi phí giao thức và mã hoá.
- Tải: Biểu đồ này cho biết mức sử dụng cơ sở dữ liệu của bạn, xử lý các yêu cầu trong khoảng thời gian 1 phút nhất định. Bạn có thể gặp phải các vấn đề về hiệu suất khi cơ sở dữ liệu của bạn đạt gần 100%.
Tối ưu hoá mức sử dụng
Bạn có thể áp dụng một số phương pháp hay nhất để tối ưu hoá mức sử dụng cơ sở dữ liệu và chi phí băng thông.
- Sử dụng SDK gốc: Bất cứ khi nào có thể, hãy sử dụng SDK tương ứng với nền tảng của ứng dụng thay vì API REST. SDK duy trì các kết nối mở, giảm chi phí mã hoá SSL thường cộng dồn với API REST.
- Kiểm tra lỗi: Nếu chi phí băng thông của bạn cao bất thường, hãy xác minh rằng ứng dụng của bạn không đồng bộ hoá nhiều dữ liệu hơn hoặc đồng bộ hoá thường xuyên hơn so với dự định ban đầu. Để xác định chính xác các vấn đề, hãy sử dụng công cụ phân tích để đo lường các thao tác đọc và bật tính năng ghi nhật ký gỡ lỗi trong SDK Android, Objective-C, và Web. Kiểm tra các quy trình đồng bộ hoá và chạy nền trong ứng dụng của bạn để đảm bảo mọi thứ hoạt động như bạn dự định.
- Giảm số lượng kết nối: Nếu có thể, hãy thử tối ưu hoá băng thông kết nối. Các yêu cầu REST nhỏ, thường xuyên có thể tốn kém hơn một kết nối liên tục bằng SDK gốc. Nếu bạn sử dụng API REST, hãy cân nhắc sử dụng tính năng duy trì kết nối HTTP hoặc sự kiện do máy chủ gửi, có thể giảm chi phí từ các lần bắt tay SSL.
- Sử dụng vé phiên TLS: Giảm chi phí mã hoá SSL trên các kết nối được tiếp tục bằng cách phát hành vé phiên TLS. Điều này đặc biệt hữu ích nếu bạn cần các kết nối an toàn, thường xuyên với cơ sở dữ liệu.
- Truy vấn chỉ mục: Việc lập chỉ mục dữ liệu sẽ giảm tổng băng thông bạn sử dụng cho các truy vấn, mang lại lợi ích kép là giảm chi phí và tăng hiệu suất của cơ sở dữ liệu. Sử dụng công cụ phân tích để tìm các truy vấn chưa được lập chỉ mục trong cơ sở dữ liệu của bạn.
- Tối ưu hoá trình nghe: Thêm các truy vấn để giới hạn dữ liệu mà các thao tác nghe trả về và sử dụng trình nghe chỉ tải các bản cập nhật xuống dữ liệu – ví dụ:
on()thay vìonce(). Ngoài ra, hãy đặt trình nghe ở cuối đường dẫn càng xa càng tốt để giới hạn lượng dữ liệu mà chúng đồng bộ hoá. - Giảm chi phí lưu trữ: Chạy các công việc dọn dẹp định kỳ và giảm mọi dữ liệu trùng lặp trong cơ sở dữ liệu của bạn.
- Sử dụng quy tắc: Ngăn mọi thao tác trái phép có khả năng tốn kém trên cơ sở dữ liệu của bạn. Ví dụ: việc sử dụng Firebase Realtime Database Security Rules có thể tránh trường hợp người dùng độc hại liên tục tải toàn bộ cơ sở dữ liệu của bạn xuống. Tìm hiểu thêm về cách sử dụng Quy tắc của Cơ sở dữ liệu theo thời gian thực của Firebase.
Kế hoạch tối ưu hoá tốt nhất cho ứng dụng của bạn phụ thuộc vào trường hợp sử dụng cụ thể của bạn. Mặc dù đây không phải là danh sách đầy đủ các phương pháp hay nhất, nhưng bạn có thể tìm thêm lời khuyên và mẹo từ các chuyên gia của Firebase trên kênh Slack hoặc trên Stack Overflow.