Optymalizuj wydajność bazy danych

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.GETPUT 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:

  1. Zwiększ łączną liczbę jednoczesnych aktywnych połączeń dozwolonych w aplikacji, dzieląc je na instancje bazy danych.
  2. Równoważy obciążenie w instancjach bazy danych.
  3. 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.