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:
- Zwiększ łączną liczbę jednoczesnych, aktywnych połączeń dozwolonych w aplikacji o i dzieli je między instancje bazy danych.
- Równoważy obciążenie w instancjach bazy danych.
- 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.