Jeśli Twój projekt korzysta z bezpłatnego abonamentu Spark, nie naliczamy opłat za korzystanie z Realtime Database. Możesz korzystać z usługi bezpłatnie, co obejmuje 1 GB miejsca na dane i 10 GB pobierania danych miesięcznie.
Jeśli przejdziesz na abonament Blaze z płatnością według wykorzystania, zachowasz bezpłatne wykorzystanie (1 GB miejsca na dane i 10 GB pobierania danych miesięcznie), a za wykorzystanie powyżej tego limitu będziesz płacić. Jeśli Twój projekt korzysta z planu cenowego Blaze, zalecamy skonfigurowanie dla niego alertów budżetowych.
Więcej informacji o płatnościach znajdziesz w dalszej części tej strony.
Jak Realtime Database oblicza płatności
Firebase nalicza opłaty za dane przechowywane w bazie danych i cały ruch wychodzący w sieci na poziomie sesji (warstwa 5) modelu OSI. Za miejsce na dane pobierana jest opłata w wysokości 5 USD za GB miesięcznie, obliczana codziennie. Lokalizacja bazy danych nie ma wpływu na rozliczenia. Ruch wychodzący obejmuje narzut związany z połączeniem i szyfrowaniem ze wszystkich operacji na bazie danych oraz dane pobrane w ramach odczytu z bazy danych. Zarówno odczyty, jak i zapisy w bazie danych mogą generować koszty połączenia na Twojej fakturze. Cały ruch do i z bazy danych, w tym operacje odrzucone przez reguły zabezpieczeń, generuje koszty podlegające rozliczeniu.
Przykłady typowego ruchu, za który naliczane są opłaty:
- Pobrane dane: gdy klienci pobierają dane z Twojej bazy danych, Firebase nalicza opłaty za pobrane dane. Zazwyczaj stanowi to większość kosztów przepustowości, ale nie jest jedynym czynnikiem wpływającym na rachunek.
- Narzucone obciążenie protokołu: do nawiązania i utrzymania sesji konieczny jest dodatkowy ruch między serwerem a klientami. W zależności od protokołu bazowego ten ruch może obejmować: narzut protokołu czasu rzeczywistego Bazy danych czasu rzeczywistego Firebase, narzut protokołu WebSocket i narzut nagłówka HTTP. Za każdym razem, gdy nawiązywane jest połączenie, ten narzut w połączeniu z narzutem szyfrowania SSL wpływa na koszty połączenia. Chociaż w przypadku pojedynczego żądania nie jest to duża ilość przepustowości, może stanowić znaczną część rachunku, jeśli ładunki są małe lub często nawiązujesz krótkie połączenia.
- Obciążenie związane z szyfrowaniem SSL: z szyfrowaniem SSL niezbędnym do bezpiecznych połączeń wiąże się pewien koszt. Średnio ten koszt wynosi około 3,5 KB w przypadku początkowego uzgadniania połączenia i kilkadziesiąt bajtów w przypadku nagłówków rekordów TLS w każdej wiadomości wychodzącej. W przypadku większości aplikacji jest to niewielki odsetek rachunku. Jeśli jednak w Twoim przypadku wymaganych jest wiele uzgodnień SSL, może to być duży odsetek. Na przykład urządzenia, które nie obsługują biletów sesji TLS, mogą wymagać dużej liczby uzgodnień połączenia SSL.
- FirebaseDane konsoli: chociaż zwykle nie stanowią one znacznej części Realtime Database kosztów, Firebase nalicza opłaty za dane odczytywane i zapisywane w Firebase konsoli.
Szacowanie rozliczanego wykorzystania
Aby sprawdzić bieżące Realtime Database połączenia i użycie danych, otwórz kartę Użycie w Firebase konsoli. Możesz sprawdzić wykorzystanie w bieżącym cyklu rozliczeniowym, w ciągu ostatnich 30 dni lub w ciągu ostatnich 24 godzin.
Firebase wyświetla statystyki użytkowania tych danych:
- Połączenia: liczba równoczesnych, obecnie otwartych połączeń w czasie rzeczywistym z bazą danych. Obejmuje to połączenia w czasie rzeczywistym: WebSocket, długie sondowanie i zdarzenia wysyłane przez serwer HTML. Nie obejmuje żądań RESTful.
- Pamięć: ilość danych przechowywanych w bazie danych. Nie obejmuje to hostingu Firebase ani danych przechowywanych w ramach innych usług Firebase.
- Pobrane dane: wszystkie bajty pobrane z bazy danych, w tym narzut protokołu i szyfrowania.
- Obciążenie: ten wykres pokazuje, jaka część bazy danych jest używana do przetwarzania żądań w danym 1-minutowym przedziale czasu. Gdy wartość ta będzie bliska 100%, mogą pojawić się problemy z wydajnością.
Optymalizacja wykorzystania
Aby zoptymalizować wykorzystanie bazy danych i koszty przepustowości, możesz zastosować kilka sprawdzonych metod.
- Używaj natywnych pakietów SDK: w miarę możliwości używaj pakietów SDK, które odpowiadają platformie Twojej aplikacji, zamiast interfejsu API REST. Zestawy SDK utrzymują otwarte połączenia, co zmniejsza koszty szyfrowania SSL, które zwykle rosną w przypadku interfejsu REST API.
- Sprawdź, czy nie ma błędów: jeśli koszty przepustowości są nieoczekiwanie wysokie, sprawdź, czy aplikacja nie synchronizuje większej ilości danych lub nie robi tego częściej niż pierwotnie zamierzałeś(-aś). Aby zidentyfikować problemy, użyj profilera do pomiaru operacji odczytu i włącz dzienniki debugowania w pakietach SDK na Androida, Objective-C i Web. Sprawdź procesy działające w tle i synchronizację w aplikacji, aby upewnić się, że wszystko działa zgodnie z Twoimi oczekiwaniami.
- Zmniejsz liczbę połączeń: jeśli to możliwe, spróbuj zoptymalizować przepustowość połączenia. Częste, małe żądania REST mogą być droższe niż pojedyncze, ciągłe połączenie przy użyciu natywnego pakietu SDK. Jeśli korzystasz z interfejsu API REST, rozważ użycie funkcji HTTP keep-alive lub zdarzeń wysyłanych przez serwer, które mogą obniżyć koszty związane z uzgadnianiem połączenia SSL.
- Używaj biletów sesji TLS: zmniejsz koszty związane z szyfrowaniem SSL w przypadku wznowionych połączeń, wydając bilety sesji TLS. Jest to szczególnie przydatne, jeśli często potrzebujesz bezpiecznych połączeń z bazą danych.
- Zapytania indeksowe: indeksowanie danych zmniejsza całkowitą przepustowość wykorzystywaną na potrzeby zapytań, co ma podwójną korzyść: obniża koszty i zwiększa wydajność bazy danych. Użyj narzędzia profiler, aby znaleźć w bazie danych niezaindeksowane zapytania.
- Optymalizuj odbiorców: dodawaj zapytania, aby ograniczyć dane zwracane przez operacje nasłuchiwania, i używaj odbiorców, którzy pobierają tylko aktualizacje danych – na przykład
on()zamiastonce(). Dodatkowo umieść słuchaczy jak najdalej na ścieżce, aby ograniczyć ilość synchronizowanych przez nich danych. - Obniż koszty przechowywania: okresowo uruchamiaj zadania czyszczenia i usuwaj zduplikowane dane z bazy danych.
- Korzystaj z reguł: zapobiegaj potencjalnie kosztownym, nieautoryzowanym operacjom w bazie danych. Na przykład użycie Firebase Realtime Database Security Rules może zapobiec sytuacji, w której złośliwy użytkownik wielokrotnie pobiera całą bazę danych. Dowiedz się więcej o używaniu reguł Bazy danych czasu rzeczywistego Firebase.
Najlepszy plan optymalizacji aplikacji zależy od konkretnego przypadku użycia. To nie jest wyczerpująca lista sprawdzonych metod, ale więcej porad i wskazówek od ekspertów Firebase znajdziesz na naszym kanale Slack lub na Stack Overflow.