Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

Skaluj z wieloma bazami danych

Najlepszym sposobem na zoptymalizowanie wydajności i skalowanie danych w Firebase Realtime Database jest podzielenie danych na wiele instancji bazy danych czasu rzeczywistego, nazywane też fragmentowaniem bazy danych. Fragmentowanie zapewnia elastyczność skalowania poza limity, które mają zastosowanie do poszczególnych wystąpień bazy danych, a także równoważenie obciążenia i optymalizację wydajności.

Kiedy dzielić dane

Możesz chcieć podzielić swoje dane na wiele baz danych, jeśli używasz bazy danych czasu rzeczywistego i pasuje do dowolnego z następujących scenariuszy:

  • Chcesz skalować poza limit 200 000 jednoczesnych połączeń, 1000 operacji zapisu na sekundę lub dowolne inne limity dla pojedynczej instancji bazy danych.
  • Masz wiele oddzielnych zestawów danych i chcesz zoptymalizować wydajność (na przykład aplikacja do czatu, która obsługuje oddzielne, niezależne grupy użytkowników).
  • Chcesz zrównoważyć obciążenie w wielu bazach danych, aby skrócić czas pracy i zmniejszyć ryzyko przeciążenia pojedynczego wystąpienia bazy danych.

Jak podzielić swoje dane

Aby podzielić swoje dane na fragmenty, wykonaj następujące kroki (opisane bardziej szczegółowo poniżej):

  1. Mapuj swoje dane do wielu baz danych zgodnie z określonymi potrzebami aplikacji.
  2. Utwórz wiele instancji bazy danych.
  3. Skonfiguruj aplikację tak, aby łączyła się z instancją bazy danych czasu rzeczywistego niezbędną dla każdego zestawu danych.

Mapuj swoje dane

Podczas mapowania danych do wielu baz danych spróbuj spełnić następujące warunki:

  • Każde zapytanie działa tylko na jednej instancji bazy danych. Baza danych czasu rzeczywistego nie obsługuje zapytań między instancjami bazy danych.
  • Brak udostępniania lub powielania danych między instancjami bazy danych (lub minimalne udostępnianie lub powielanie).
  • Każda instancja aplikacji łączy się w danym momencie tylko z jedną bazą danych.

Mapując swoje dane, rozważ zastosowanie następujących strategii:

Utwórz „fragment wzorcowy”

Przechowuj mapę sposobu przechowywania danych w instancjach bazy danych. W ten sposób można programowo sprawdzić, która instancja bazy danych odpowiada klientowi łączącemu się. Należy pamiętać, że może to mieć więcej narzutów niż bezpośrednie połączenie z konkretną instancją bazy danych, której potrzebujesz, gdy jej potrzebujesz.

Zbiorcze dane według kategorii lub klienta

Przechowuj dane w zamkniętych instancjach baz danych, pogrupowanych według użytkownika lub typu danych. Na przykład, jeśli utworzysz aplikację czatu, która obsługuje wiele organizacji, możesz utworzyć instancję bazy danych dla każdej organizacji i przechowywać wszystkie dane czatu w unikalnych instancjach bazy danych.

W takim przypadku organizacja A i organizacja B nie współużytkują danych, w bazach danych nie ma żadnych zduplikowanych danych, a zapytania wykonujesz tylko w odniesieniu do jednej instancji bazy danych. Ponadto użytkownicy w każdej organizacji łączą się z bazą danych swojej organizacji tylko wtedy, gdy używają aplikacji do czatu.

Następnie możesz wcześniej utworzyć kilka instancji bazy danych i użyć identyfikatora organizacji, aby zmapować zespół do jego instancji bazy danych. Na przykład organizacja A mapuje do bazy danych czasu rzeczywistego A.

Sposób mapowania danych aplikacji zależy od konkretnego przypadku użycia, ale warunki i strategie opisane powyżej mogą pomóc w określeniu, co działa w przypadku Twoich danych.

Utwórz wiele instancji bazy danych czasu rzeczywistego

Jeśli korzystasz z abonamentu Blaze , możesz utworzyć wiele instancji bazy danych w tym samym projekcie Firebase.

utwórz bazę danych w konsoli Firebase za pomocą menu kontekstowego w sekcji bazy danych

  1. W konsoli Firebase przejdź do zakładki Dane w sekcji Programowanie> Baza danych .
  2. Wybierz opcję Utwórz nową bazę danych z menu w sekcji Baza danych czasu rzeczywistego .
  3. Dostosuj odwołanie do bazy danych i reguły zabezpieczeń , a następnie kliknij przycisk Rozumiem .

Powtórz ten proces, aby utworzyć dowolną liczbę instancji bazy danych. Każda instancja bazy danych ma własny zestaw reguł bazy danych czasu rzeczywistego Firebase, dzięki czemu możesz dostosować dostęp do swoich danych.

Możesz tworzyć instancje bazy danych i zarządzać nimi w konsoli Firebase lub za pomocą interfejsu API REST zarządzania bazą danych w czasie rzeczywistym .

Edytuj i wdrażaj reguły bazy danych czasu rzeczywistego dla każdej instancji

Upewnij się, że reguły bazy danych czasu rzeczywistego zapewniają odpowiedni dostęp do każdej instancji bazy danych w projekcie. Każda baza danych ma własny zestaw reguł, które można edytować i wdrażać z konsoli Firebase lub za pomocą interfejsu wiersza polecenia Firebase do wdrażania celów .

  • Aby edytować i wdrażać reguły z konsoli Firebase, wykonaj następujące kroki:

    1. Przejdź do zakładki Reguły w sekcji Develop> Database .
    2. Wybierz bazę danych, którą chcesz edytować, a następnie zmodyfikuj reguły.
  • Aby edytować i wdrażać reguły z interfejsu wiersza polecenia Firebase, wykonaj następujące kroki:

    1. Zmodyfikuj reguły w plikach reguł dla instancji bazy danych (na przykład foo.rules.json ).
    2. Utwórz i zastosuj cele wdrażania, aby skojarzyć bazy danych, które używają tego samego pliku reguł. Na przykład:
      firebase target:apply database main my-db-1 my-db-2
      firebase target:apply database other my-other-db-3
    3. Zaktualizuj plik konfiguracyjny firebase.json za pomocą celów wdrażania:

      {
        "database": [
          {"target": "main", "rules": "foo.rules.json"},
          {"target": "other", "rules": "bar.rules.json"}
        ]
      }
      
    4. Uruchom polecenie wdrażania:

      firebase deploy

Upewnij się, że konsekwentnie edytujesz i wdrażasz reguły z tego samego miejsca. Wdrażanie reguł z interfejsu wiersza polecenia Firebase zastępuje wszelkie zmiany wprowadzone w konsoli Firebase, a edytowanie reguł bezpośrednio w konsoli Firebase zastępuje wszystkie ostatnie zmiany wprowadzone za pomocą interfejsu wiersza polecenia Firebase.

Połącz swoją aplikację z wieloma instancjami bazy danych

Użyj odwołania do bazy danych, aby uzyskać dostęp do danych przechowywanych w pomocniczych instancjach bazy danych. Możesz uzyskać odwołanie do określonej instancji bazy danych za pomocą adresu URL lub aplikacji. Jeśli nie określisz adresu URL, otrzymasz odwołanie do domyślnej instancji bazy danych aplikacji.

Sieć
const app1 = firebase.initializeApp({
  databaseURL: "https://testapp-1234-1.firebaseio.com"
});

const app2 = firebase.initializeApp({
  databaseURL: "https://testapp-1234-2.firebaseio.com"
}, 'app2');

// Get the default database instance for an app1
var database1 = firebase.database();

// Get a database instance for app2
var database2 = firebase.database(app2);
Szybki
// Get the default database instance for an app
var ref: DatabaseReference!

ref = Database.database().reference()
// Pobierz dodatkową instancję bazy danych za pomocą adresu URL var ref: DatabaseReference! ref = Database.database ("https://testapp-1234.firebaseio.com") .reference ()
Cel C
// Get the default database instance for an app
@property (strong, nonatomic) FIRDatabaseReference *ref;

self.ref = [[FIRDatabase database] reference];
// Pobranie dodatkowej instancji bazy danych przez URL @property (silna, nieatomowa) FIRDatabaseReference * ref; self.ref = [[FIRDatabase databaseWithURL: @ "https://testapp-1234.firebaseio.com"] odniesienie];

Jawa

// Get the default database instance for an app
DatabaseReference primary = FirebaseDatabase.getInstance()
        .getReference();

// Get a secondary database instance by URL
DatabaseReference secondary = FirebaseDatabase.getInstance("https://testapp-1234.firebaseio.com")
        .getReference();

Kotlin + KTX

// Get the default database instance for an app
val primary = Firebase.database.reference

// Get a secondary database instance by URL
val secondary = Firebase.database("https://testapp-1234.firebaseio.com").reference

Określ instancję podczas korzystania z interfejsu wiersza polecenia Firebase

Użyj opcji --instance , aby określić, do której Bazy danych czasu rzeczywistego --instance chcesz zastosować polecenie interfejsu wiersza polecenia --instance . Na przykład użyj następującego polecenia, aby uruchomić profiler dla instancji bazy danych o nazwie my-example-shard.firebaseio.com :

firebase database:profile --instance "my-example-shard"

Zoptymalizuj połączenia w każdej bazie danych

Jeśli każdy klient musi łączyć się z wieloma bazami danych podczas sesji, można zmniejszyć liczbę jednoczesnych połączeń z każdą instancją bazy danych, łącząc się z każdą instancją bazy danych tak długo, jak jest to konieczne.

Uzyskaj więcej porad

Jeśli potrzebujesz dodatkowej pomocy w dzieleniu danych na fragmenty w wielu instancjach bazy danych, skontaktuj się z ekspertami Firebase na naszym kanale Slack lub w Stack Overflow .