Skuteczność Firebase Realtime Databasew aplikacji można poprawić na kilka sposobów. Aby dowiedzieć się, jak zoptymalizować skuteczność Realtime Database, gromadzić dane za pomocą różnych narzędzi do monitorowania Realtime Database, a następnie odpowiednio modyfikować aplikację lub Realtime Database.
Monitoruj skuteczność kampanii Realtime Database
Dane o skuteczności Realtime Database możesz zbierać za pomocą kilku różnych narzędzi, w zależności od potrzebnego poziomu szczegółowości:
- Przegląd ogólny: użyj narzędzia do profilowania, aby wyświetlić listę niezaindeksowanych zapytań i przegląd operacji odczytu/zapisu w czasie rzeczywistym.
- Szacowane wykorzystanie podlegające rozliczeniu: skorzystaj z danych o wykorzystaniu dostępnych w konsoli Firebase, aby wyświetlić rozliczone dane o wykorzystaniu oraz ogólne dane o wydajności.
- Szczegółowy podgląd: kliknij Cloud Monitoring, aby uzyskać bardziej szczegółowy wgląd w to, jak baza danych radzi sobie w ciągu czasu.
Zwiększanie skuteczności według wskaźnika
Po zebraniu danych zapoznaj się z podanymi niżej sprawdzonymi metodami i strategiami, które pomogą Ci poprawić skuteczność w określonej dziedzinie.
Omówienie strategii poprawiania skuteczności | ||
---|---|---|
Dane | Opis | Sprawdzone metody |
Obciążenie/wykorzystanie | Zoptymalizuj wykorzystanie pojemności bazy danych na potrzeby przetwarzania żądań w danym momencie (co jest widoczne w metrykach **Load** lub **io/database_load**). |
Zoptymalizuj strukturę danych Podziel dane między bazami danych Zwiększ wydajność detektorów Ograniczaj pobieranie za pomocą reguł opartych na zapytaniach Optymalizuj połączenia |
Aktywne połączenia | Zrównoważyć liczbę jednoczesnych aktywnych połączeń z bazą danych, aby nie przekroczyć limitu 200 tys. połączeń. |
Dzielenie danych na fragmenty w bazach danych Zmniejsz liczbę nowych połączeń |
Przepustowość wychodząca | Jeśli liczba pobrań z Twojej bazy danych wydaje się większa, niż powinna, możesz zwiększyć wydajność operacji odczytu i ograniczyć wymagania związane z szyfrowaniem. |
Optymalizowanie połączeń Optymalizowanie struktury danych Ograniczanie pobierania za pomocą reguł opartych na zapytaniach Ponownie używanie sesji SSL Zwiększanie efektywności odbiorcy Ograniczanie dostępu do danych |
Pamięć | Sprawdź, czy nie przechowujesz nieużywanych danych albo czy zrównoważysz przechowywane dane w innych bazach danych lub usługach Firebase, aby nie przekraczać limitu. |
Czyszczenie nieużywanych danych Optymalizacja struktury danych Dzielenie danych na wiele baz danych Użycie Cloud Storage for Firebase |
Optymalizacja połączeń
Wciąż wymagają połączenia, nawet jeśli jest ono krótkotrwałe.GET
PUT
Te częste, krótkotrwałe połączenia mogą w istocie znacznie zwiększyć koszty połączenia, obciążenie bazy danych i szerokość pasma wychodzącego w porównaniu z aktywnymi połączeniami z bazą danych w czasie rzeczywistym.
W miarę możliwości używaj natywnych pakietów SDK na platformę aplikacji zamiast interfejsu REST API. Pakiety SDK utrzymują otwarte połączenia, zmniejszając koszty szyfrowania SSL i obciążenie bazy danych połączone z interfejsem API REST.
Jeśli używasz interfejsu API REST, rozważ użycie protokołu HTTP keep-alive, aby utrzymać połączenie otwarte, lub zdarzeń wysyłanych przez serwer, które może zmniejszyć koszty związane z protokołem SSL.
dzielić dane na fragmenty w wielu bazach danych,
Dzielenie danych na wiele instancji Realtime Database, czyli dzielenie bazy danych na fragmenty, przynosi 3 korzyści:
- Zwiększ łączną liczbę jednoczesnych aktywnych połączeń dozwolonych w aplikacji, dzieląc je na instancje bazy danych.
- Równoważy obciążenie w instancjach bazy danych.
- Jeśli masz niezależne grupy użytkowników, które potrzebują dostępu tylko do oddzielnych zbiorów danych, użyj różnych instancji bazy danych, aby zwiększyć przepustowość i zmniejszyć opóźnienie.
Jeśli korzystasz z abonamentu Blaze, możesz utworzyć wiele instancji bazy danych w tym samym projekcie Firebase, korzystając z popularnej metody uwierzytelniania użytkowników w instancjach baz danych.
Dowiedz się więcej o tym, jak i kiedy dzielić dane na fragmenty.
Tworzenie wydajnych struktur danych
Realtime Database pobiera dane zarówno z węzłów podrzędnych ścieżki, jak i ścieżki, dlatego warto zadbać o jak najbardziej płaską strukturę danych. Dzięki temu możesz selektywnie pobierać potrzebne dane, nie pobierając niepotrzebnych danych na klientów.
Zwłaszcza podczas strukturyzowania danych należy wziąć pod uwagę zapisywanie i usuwanie. Na przykład ścieżki z tysiącami elementów mogą być kosztowne do usunięcia. Podzielenie ich na ścieżki z wieloma poddrzewami i mniejszą liczbą liści na węzeł może przyspieszyć usuwanie.
Dodatkowo każdy zapis może zajmować 0, 1% łącznego wykorzystania bazy danych.
Uporządkuj dane w taki sposób, aby umożliwić zapis zbiorczy w ramach pojedynczej operacji jako aktualizacje wielościeżkowe za pomocą metod update()
w SDK lub żądań RESTful PATCH
.
Aby zoptymalizować strukturę danych i zwiększyć wydajność, stosuj sprawdzone metody dotyczące struktur danych.
Zapobieganie nieautoryzowanemu dostępowi
Zapobiegaj nieautoryzowanym operacjom w bazie danych za pomocą Realtime Database Security Rules. Dzięki regułom możesz np. uniknąć sytuacji, w której złośliwy użytkownik wielokrotnie pobiera całą Twoją bazę danych.
Dowiedz się więcej o używaniu reguł Bazy danych czasu rzeczywistego Firebase.
Ograniczanie pobierania za pomocą reguł opartych na zapytaniach
Realtime Database Security Rules ograniczają dostęp do danych w bazie danych, ale mogą też służyć do ograniczania danych zwracanych przez operacje odczytu. Jeśli używasz reguł opartych na zapytaniu, zdefiniowanych za pomocą wyrażeń query.
, takich jak query.limitToFirst
, zapytania zwracają tylko dane określone przez regułę.
Na przykład ta reguła ogranicza dostęp do odczytu tylko do pierwszych 1000 wyników zapytania, uporządkowanych według priorytetu:
messages: {
".read": "query.orderByKey &&
query.limitToFirst <= 1000"
}
// Example query:
db.ref("messages").limitToFirst(1000)
.orderByKey("value")
Dowiedz się więcej o Realtime Database Security Rules.
Zapytania indeksowania
Indeksowanie danych zmniejsza łączną przepustowość używaną dla każdego zapytania uruchamianego przez aplikację.
Ponowne używanie sesji SSL
Zmniejsz koszty związane z szyfrowaniem SSL w przypadku wznowionych połączeń, wydając bilety sesji TLS. Jest to szczególnie przydatne, jeśli potrzebujesz częstych, bezpiecznych połączeń z bazą danych.
Zwiększanie skuteczności słuchaczy
Aby ograniczyć ilość synchronizowanych danych, umieść detektory jak najdalej na ścieżce. Słuchacze powinni mieć dostęp do danych, które chcesz im przekazać. Nie nasłuchuj w korzeniach bazy danych, ponieważ spowoduje to pobieranie całej bazy danych.
Dodaj zapytania, aby ograniczyć dane zwracane przez operacje nasłuchiwania, i używaj detektorów, które pobierają tylko aktualizacje danych, np. on()
zamiast once()
. Zarezerwuj .once()
na działania, które naprawdę nie wymagają aktualizacji danych.
Aby uzyskać najlepszą wydajność, sortuj zapytania za pomocą funkcji orderByKey()
, o ile to możliwe. Sortowanie za pomocą funkcji orderByChild()
może być 6–8 razy wolniejsze, a sortowanie za pomocą funkcji orderByValue()
może być bardzo powolne w przypadku dużych zbiorów danych, ponieważ wymaga odczytu całej lokalizacji z poziomu warstwy trwałości.
Pamiętaj też, aby dodawać słuchaczy dynamicznie i usuwać ich, gdy nie są już potrzebni.
Czyszczenie nieużywanych danych
okresowo usuwaj z bazy danych nieużywane lub zduplikowane dane; Możesz tworzyć kopie zapasowe, aby ręcznie sprawdzić dane, lub okresowo tworzyć ich kopie zapasowe w worku Google Cloud Storage. Zastanów się też nad hostowaniem przechowywanych danych za pomocą Cloud Storage for Firebase.
Przesyłanie skalowanego kodu, który można aktualizować
Aplikacje wbudowane w urządzenia IoT powinny zawierać skalowalny kod, który można łatwo aktualizować. Dokładnie przetestuj przypadki użycia, uwzględniając scenariusze, w których baza użytkowników może rosnąć wykładniczo, oraz uwzględnij możliwość wdrażania aktualizacji kodu. Uważnie przemyśl, jakie poważne zmiany możesz wprowadzić w przyszłości, jeśli na przykład zdecydujesz się na podział danych.