Omówienie rozliczania baz danych w czasie rzeczywistym

Firebase rozlicza dane przechowywane w bazie danych i cały wychodzący ruch sieciowy w warstwie sesji (warstwa 5) modelu OSI. Opłata za przechowywanie wynosi 5 USD za każdy GB/miesiąc, naliczana codziennie. Lokalizacja Twojej bazy danych nie ma wpływu na rozliczenia. Ruch wychodzący obejmuje narzut związany z połączeniem i szyfrowaniem związany ze wszystkimi operacjami na bazie danych oraz danymi pobranymi podczas odczytów z bazy danych. Zarówno odczyty, jak i zapisy w bazie danych mogą wiązać się z kosztami połączenia na rachunku. Cały ruch do iz Twojej bazy danych, w tym operacje zabronione przez reguły bezpieczeństwa, prowadzi do naliczania kosztów.

Typowe przykłady rozliczanego ruchu to:

  • Pobrane dane: gdy klienci pobierają dane z Twojej bazy danych, Firebase pobiera opłaty za pobrane dane. Zwykle stanowi to większość kosztów przepustowości, ale nie jest jedynym czynnikiem wpływającym na rachunek.
  • Narzut protokołu: Do ustanowienia i utrzymania sesji niezbędny jest dodatkowy ruch między serwerem a klientami. W zależności od bazowego protokołu ruch ten może obejmować: obciążenie protokołu czasu rzeczywistego Firebase Realtime Database, obciążenie protokołu WebSocket i obciążenie nagłówka HTTP. Za każdym razem, gdy ustanawiane jest połączenie, ten narzut, w połączeniu z narzutem związanym z szyfrowaniem SSL, przyczynia się do kosztów połączenia. Chociaż nie jest to duża przepustowość dla pojedynczego żądania, może stanowić znaczną część rachunku, jeśli Twoje ładunki są niewielkie lub wykonujesz częste, krótkie połączenia.
  • Narzut szyfrowania SSL: Z narzutem szyfrowania SSL niezbędnym do bezpiecznych połączeń wiąże się koszt. Średnio koszt ten wynosi około 3,5 KB dla początkowego uzgadniania i około dziesiątek bajtów dla nagłówków rekordów TLS w każdej wiadomości wychodzącej. W przypadku większości aplikacji jest to niewielki procent rachunku. Może to jednak stanowić duży odsetek, jeśli konkretny przypadek wymaga wielu uzgadniania SSL. Na przykład urządzenia, które nie obsługują biletów sesji TLS, mogą wymagać dużej liczby uzgadniania połączenia SSL.
  • Dane konsoli Firebase: Chociaż zwykle nie stanowi to znaczącej części kosztów Bazy danych czasu rzeczywistego, Firebase pobiera opłaty za dane odczytywane i zapisywane z konsoli Firebase.

Oszacuj rozliczane użycie

Aby zobaczyć bieżące połączenia z Bazą danych czasu rzeczywistego i wykorzystanie danych, sprawdź kartę Użycie w konsoli Firebase. Możesz sprawdzić użycie w bieżącym okresie rozliczeniowym, w ciągu ostatnich 30 dni lub w ciągu ostatnich 24 godzin.

Firebase pokazuje statystyki użytkowania dla następujących danych:

  • Połączenia: liczba jednoczesnych, aktualnie otwartych połączeń w czasie rzeczywistym z bazą danych. Obejmuje to następujące połączenia w czasie rzeczywistym: WebSocket, długie odpytywanie i zdarzenia wysyłane przez serwer HTML. Nie obejmuje żądań RESTful.
  • Przechowywanie: Ile danych jest przechowywanych w Twojej bazie danych. Nie obejmuje to hostingu Firebase ani danych przechowywanych za pośrednictwem innych produktów Firebase.
  • Pobrania: wszystkie bajty pobrane z Twojej bazy danych, w tym narzut związany z protokołem i szyfrowaniem.
  • Obciążenie: Ten wykres pokazuje, jaka część bazy danych jest używana podczas przetwarzania żądań w danym interwale 1-minutowym. Mogą wystąpić problemy z wydajnością, gdy baza danych zbliża się do 100%.

Zoptymalizuj użycie

Istnieje kilka najlepszych praktyk, które można zastosować, aby zoptymalizować wykorzystanie bazy danych i koszty przepustowości.

  • Używaj natywnych zestawów SDK: jeśli to możliwe, zamiast interfejsu API REST używaj zestawów SDK odpowiadających platformie Twojej aplikacji. Zestawy SDK utrzymują otwarte połączenia, zmniejszając koszty szyfrowania SSL, które zwykle sumują się z interfejsem API REST.
  • Sprawdź błędy: jeśli koszty przepustowości są nieoczekiwanie wysokie, sprawdź, czy Twoja aplikacja nie synchronizuje większej ilości danych lub nie synchronizuje się częściej niż pierwotnie zamierzałeś. Aby wskazać problemy, użyj narzędzia Profiler do pomiaru operacji odczytu i włącz rejestrowanie debugowania w zestawach Android , Objective-C i Web SDK. Sprawdź procesy działające w tle i synchronizację w aplikacji, aby upewnić się, że wszystko działa zgodnie z oczekiwaniami.
  • Zmniejsz liczbę połączeń: jeśli to możliwe, spróbuj zoptymalizować przepustowość połączenia. Częste, niewielkie żądania REST mogą być bardziej kosztowne niż pojedyncze, ciągłe połączenie przy użyciu natywnego zestawu SDK. Jeśli korzystasz z interfejsu API REST, rozważ użycie zdarzeń HTTP keep-alive lub server-sent , które mogą obniżyć koszty uzgadniania SSL.
  • Używaj biletów sesji TLS: Zmniejsz koszty ogólne szyfrowania SSL w przypadku wznawianych połączeń, wystawiając bilety sesji TLS . Jest to szczególnie przydatne, jeśli potrzebujesz częstych, bezpiecznych połączeń z bazą danych.
  • Zapytania indeksujące: Indeksowanie danych zmniejsza łączną przepustowość używaną do obsługi zapytań, co ma podwójną korzyść w postaci obniżenia kosztów i zwiększenia wydajności bazy danych. Użyj narzędzia profilującego, aby znaleźć nieindeksowane zapytania w swojej bazie danych.
  • Zoptymalizuj odbiorniki: dodaj zapytania, aby ograniczyć dane zwracane przez operacje nasłuchiwania i użyj odbiorników, które pobierają tylko aktualizacje danych — na przykład on() zamiast once() . Dodatkowo umieść słuchaczy jak najdalej na ścieżce, aby ograniczyć ilość danych, które synchronizują.
  • Zmniejsz koszty pamięci masowej: uruchamiaj okresowe zadania czyszczenia i zmniejszaj liczbę zduplikowanych danych w bazie danych.
  • Reguły użytkowania: zapobiegaj wszelkim potencjalnie kosztownym, nieautoryzowanym operacjom na bazie danych. Na przykład użycie Reguł bezpieczeństwa bazy danych czasu rzeczywistego Firebase może uniknąć scenariusza, w którym złośliwy użytkownik wielokrotnie pobiera całą bazę danych. Dowiedz się więcej o korzystaniu z reguł bazy danych czasu rzeczywistego Firebase .

Najlepszy plan optymalizacji dla Twojej aplikacji zależy od konkretnego przypadku użycia. Chociaż nie jest to wyczerpująca lista najlepszych praktyk, możesz znaleźć więcej porad i wskazówek od ekspertów Firebase na naszym kanale Slack lub na stronie Stack Overflow .