Optymalizuj wydajność bazy danych

Istnieje kilka różnych sposobów na ulepszenie Bazy danych czasu rzeczywistego Firebase i zwiększanie wydajności aplikacji. Aby dowiedzieć się, jak zoptymalizować Wydajność Bazy danych czasu rzeczywistego, zbieraj dane za pomocą różnych Bazy danych czasu rzeczywistego do monitorowania, a następnie wprowadź odpowiednie zmiany w aplikacji lub Bazie danych czasu rzeczywistego.

Monitorowanie wydajności bazy danych czasu rzeczywistego

Dane o wydajności Bazy danych czasu rzeczywistego możesz zbierać za pomocą kilku różnych narzędzi w zależności od potrzebnego poziomu szczegółowości:

  • Ogólne omówienie: użyj narzędzia do profilowania , aby wyświetlić listę niezindeksowanych zapytań oraz omówienie w czasie rzeczywistym odczytu/zapisu operacji.
  • Szacowany koszt rozliczenia: użyj danych o wykorzystaniu. dostępne w konsoli Firebase aby sprawdzić rozliczone wykorzystanie i ogólne dane dotyczące wydajności.
  • Szczegółowe analizy: użyj Cloud Monitoring. aby uzyskać bardziej szczegółowy wgląd w wydajność bazy danych w czasie.

Zwiększanie skuteczności według wskaźnika

Po zebraniu danych zapoznaj się z tymi sprawdzonymi metodami i strategiami na podstawie obszaru, który chcesz poprawić.

Strategie zwiększania skuteczności w skrócie
Dane Opis Sprawdzone metody
Obciążenie/wykorzystanie Optymalizuj, jaka część pojemności bazy danych jest wykorzystywana podczas przetwarzania żądań w dowolnym momencie (uwzględnianych jako **Obciążenie** lub **io/database_load**). Optymalizacja struktury danych
Dzielenie danych między bazami danych
Zwiększ efektywność słuchaczy
Ograniczanie pobierania za pomocą reguł opartych na zapytaniach
Optymalizacja połączeń
Aktywne połączenia Znajdź równowagę między liczbą aktywnych połączeń jednocześnie aby baza danych nie przekraczała limitu 200 tys. połączeń. Dzielenie danych na fragmenty w bazach danych
Zmniejszenie liczby nowych połączeń
Przepustowość wychodząca Jeśli pliki do pobrania z bazy danych wydają się wyższe, niż powinny, możesz poprawić wydajność operacji odczytu i zmniejszyć na szyfrowanie. Optymalizacja połączeń
Zoptymalizuj strukturę danych
Ograniczaj pobieranie za pomocą reguł opartych na zapytaniach
Ponowne używanie sesji SSL
Zwiększ efektywność słuchaczy
Ogranicz dostęp do danych
Pamięć Upewnij się, że nie przechowujesz nieużywanych danych lub zapisanych danych w innych bazach danych lub usługach Firebase, aby limit miejsca na dane. Czyszczenie nieużywanych danych
Zoptymalizuj strukturę danych
Dzielenie danych na fragmenty w bazach danych
Korzystanie z Cloud Storage dla Firebase

Optymalizuj połączenia

Żądania REST, takie jak GET i PUT, nadal wymagają połączenia, że połączenie jest krótkie. Te częste, okazjonalne kontakty mogą znacznie zwiększyć koszty połączeń, obciążenie bazy danych przepustowość wyjściową jest większa niż liczba aktywnych połączeń z bazą danych w czasie rzeczywistym.

Gdy tylko jest to możliwe, używaj natywnych pakietów SDK platformy aplikacji zamiast API typu REST. Pakiety SDK utrzymują otwarte połączenia, co zmniejsza koszty szyfrowania SSL i obciążenie bazy danych, które może sumować się z użyciem interfejsu API REST.

Jeśli jednak korzystasz z interfejsu API REST, rozważ zastosowanie utrzymywania aktywności HTTP, by zachować Otwórz połączenie lub użyj zdarzenia wysyłane przez serwer, co może obniżyć koszty uzgadniania połączenia SSL.

Dzielenie danych na fragmenty w wielu bazach danych

Dzielenie danych na wiele instancji Bazy danych czasu rzeczywistego, nazywane inaczej fragmentacja bazy danych ma 3 korzyści:

  1. Zwiększ łączną liczbę jednoczesnych, aktywnych połączeń dozwolonych w aplikacji o i dzieli je między instancje bazy danych.
  2. Równoważy obciążenie w instancjach bazy danych.
  3. Jeśli masz niezależne grupy użytkowników, którzy potrzebują dostępu tylko do zbiorów danych, używaj różnych instancji bazy danych, aby uzyskać większą przepustowość i mniejszą opóźnienia.

Jeśli masz abonament Blaze, możesz utworzyć wiele instancji bazy danych w ramach tego samego projektu Firebase, wykorzystując uwierzytelniania w instancjach baz danych.

Dowiedz się więcej o tym, jak i kiedy dzielić dane na fragmenty.

Twórz skuteczne struktury danych

Ponieważ Baza danych czasu rzeczywistego pobiera dane z węzłów podrzędnych ścieżki, a także warto zadbać o jak najbardziej płaską strukturę danych. W ten sposób można wybiórczo pobierać potrzebne dane bez pobieranie niepotrzebnych danych klientom.

W szczególności podczas tworzenia struktury danych weź pod uwagę ich zapisy i usuwania. Na przykład usunięcie ścieżek, które mają tysiące liści, może być kosztowne. Podzielenie ich na ścieżki z wieloma poddrzewami i mniejszą liczbą liści na węzeł. mogą przyśpieszyć usuwanie.

Dodatkowo każdy zapis może zajmować 0, 1% całkowitego wykorzystania bazy danych. Uporządkuj dane w sposób umożliwiający zbiorcze grupowanie zapisów w jednym jako aktualizacji wielościeżkowej za pomocą jednej z metod update() w funkcji Pakiety SDK lub żądania typu PATCH REST.

Aby zoptymalizować strukturę danych i zwiększyć wydajność, postępuj zgodnie z tymi wskazówkami Sprawdzone metody tworzenia struktur danych.

Zapobieganie nieautoryzowanemu dostępowi

Zapobiegaj nieautoryzowanym działaniom w bazie danych za pomocą Reguły zabezpieczeń bazy danych czasu rzeczywistego. Stosując reguły, można na przykład uniknąć sytuacji, w której użytkownik wielokrotnie pobiera całą bazę danych.

Dowiedz się więcej o używaniu reguł Bazy danych czasu rzeczywistego Firebase.

Ograniczanie pobierania za pomocą reguł opartych na zapytaniach

Reguły zabezpieczeń bazy danych czasu rzeczywistego ograniczają dostęp do danych w Twojej bazie danych, ale mogą też pełnią rolę ograniczeń danych zwracanych w ramach operacji odczytu. Jeśli używasz oparte na zapytaniach zdefiniowane przez wyrażenia query., takie jak query.limitToFirst, Pobierają jedynie dane objęte regułą.

Na przykład ta reguła ogranicza dostęp z możliwością odczytu tylko do pierwszych 1000 wyniki zapytania w kolejności według priorytetu:

messages: {
  ".read": "query.orderByKey &&
            query.limitToFirst <= 1000"
}

// Example query:
db.ref("messages").limitToFirst(1000)
                  .orderByKey("value")

Dowiedz się więcej o regułach zabezpieczeń Bazy danych czasu rzeczywistego.

Zapytania dotyczące indeksu

Indeksowanie danych zmniejsza łączną liczbę wykorzystanie przepustowości dla każdego zapytania uruchamianego przez aplikację.

Ponowne wykorzystywanie sesji SSL

Zmniejsz koszty związane z szyfrowaniem SSL w przypadku wznawianych połączeń przez przyznanie Zgłoszenia sesji TLS. Jest to szczególnie istotne może być przydatny, jeśli wymagasz częstych, bezpiecznych połączeń z bazą danych.

Popraw skuteczność słuchaczy

Aby ograniczyć ilość danych, umieść detektory jak najdalej na ścieżce i je synchronizować. Słuchacze powinni mieć dostęp do danych, które chcesz im przekazać. Nie słuchaj w katalogu głównym bazy danych, ponieważ spowoduje to pobieranie całą bazę danych.

Dodaj zapytania, aby ograniczyć dane zwracane i używane przez operacje nasłuchiwania detektory, które pobierają tylko aktualizacje danych – na przykład on() zamiast once() Zarezerwuj .once() na działania, które naprawdę nie wymagają aktualizacji danych. Jeśli to możliwe, posortuj też zapytania za pomocą atrybutu orderByKey(), aby podczas z najlepszą wydajnością. Sortowanie za pomocą funkcji orderByChild() może być 6–8 razy wolniejsze, sortowanie za pomocą orderByValue() może być bardzo powolne w przypadku dużych zbiorów danych, wymaga odczytu całej lokalizacji z warstwy trwałości.

Dopilnuj, aby detektory były dodawane dynamicznie i usuwane, gdy w ogóle ich nie ma. jest bardziej potrzebna.

Usuń nieużywane dane

Okresowo usuwaj nieużywane lub zduplikowane dane z bazy danych. Dostępne opcje uruchomić kopie zapasowe, by ręcznie sprawdzić dane; okresowo tworzyć ich kopię zapasową w zasobniku Google Cloud Storage. Poza tym rozważ hostowanie przechowywanych danych w Cloud Storage dla Firebase.

Wyślij skalowalny kod, który możesz zaktualizować

Aplikacje wbudowane w urządzenia IoT powinny zawierać skalowalny kod, można je łatwo aktualizować. Dokładnie przetestuj przypadki użycia, weź pod uwagę scenariusze możesz znacznie zwiększyć liczbę użytkowników i zyskać nowe możliwości do wdrażania aktualizacji kodu. Uważnie zastanów się, jakie zmiany mogą być konieczne jeśli na przykład zdecydujesz się na fragmentację danych.