Mit mehreren Datenbanken skalieren

Die beste Möglichkeit zur Leistungsoptimierung und Skalierung Ihrer Daten in Firebase Realtime Database besteht darin, Ihre Daten auf mehrere Realtime Database-Instanzen aufzuteilen, die auch als Datenbankfragmentierung. Die Fragmentierung bietet Ihnen die Flexibilität, über die Limits, die für einzelne Datenbanken gelten Load-Balancing und Leistungsoptimierung.

Wann Daten fragmentiert werden sollten

Sie können Ihre Daten in mehrere Datenbanken aufteilen, wenn Sie Realtime Database und ist für eines der folgenden Szenarien geeignet:

  • Sie möchten über das Limit von 200.000 gleichzeitigen Verbindungen, 1.000 Schreibvorgängen pro Sekunde oder eines der anderen Limits für eine einzelne Datenbankinstanz hinaus skalieren.
  • Sie haben mehrere separate Datensätze und möchten die Leistung optimieren (z. B. eine Chat-App, die separate, unabhängige Nutzergruppen bedient).
  • Sie möchten die Last auf mehrere Datenbanken verteilen, um um das Risiko der Überlastung einer Datenbankinstanz zu verringern.

Daten fragmentieren

So fragmentieren Sie Ihre Daten:

  1. Ordnen Sie Ihre Daten gemäß den spezifischen Anforderungen Ihrer Anwendung mehreren Datenbanken zu.
  2. Erstellen Sie mehrere Datenbankinstanzen.
  3. Konfigurieren Sie Ihre App so, dass sie eine Verbindung zur Realtime Database-Instanz herstellt, die für jeden Datensatz erforderlich ist.

Daten zuordnen

Wenn Sie Ihre Daten mehreren Datenbanken zuordnen, versuchen Sie, die folgenden Bedingungen:

  • Jede Abfrage wird nur für eine einzelne Datenbankinstanz ausgeführt. Realtime Database unterstützt keine Abfragen über Datenbankinstanzen hinweg.
  • Keine Freigabe oder Duplizierung von Daten über Datenbankinstanzen hinweg (oder nur minimale Freigabe oder Duplizierung).
  • Jede App-Instanz stellt jeweils nur eine Verbindung zu einer Datenbank her.

Ziehen Sie beim Zuordnen Ihrer Daten die folgenden Strategien in Betracht:

„Master-Shard“ erstellen

Speichern Sie eine Karte, die zeigt, wie Ihre Daten auf verschiedenen Datenbankinstanzen. Auf diese Weise können Sie programmatisch ermitteln, welche Datenbank -Instanz dem Verbindungsclient entspricht. Denken Sie daran, dass dies mehr Aufwand erfordern, als eine direkte Verbindung zu einer bestimmten Datenbank herzustellen, Instanz, die Sie brauchen, zur richtigen Zeit.

Daten nach Kategorien oder nach Kunden gruppieren

Speichern Sie Daten in isolierten Datenbankinstanzen, gruppiert nach Nutzer oder Datentyp. Wenn Sie z. B. eine Chatanwendung für mehrere Organisationen entwickeln, können Sie für jede Organisation eine Datenbankinstanz erstellen und in eindeutigen Datenbankinstanzen.

In diesem Fall geben Unternehmen A und B keine Daten frei, in Ihren Datenbanken dupliziert werden und Abfragen nur für in einer einzelnen Datenbankinstanz. Außerdem gilt: Nur Nutzer in den einzelnen Organisationen eine Verbindung zur Datenbank ihrer Organisation herstellen, wenn sie die Chat-App verwenden.

Sie können dann im Voraus mehrere Datenbankinstanzen erstellen und die Methode Organisations-ID, um ein Team seiner Datenbankinstanz zuzuordnen. Beispiel: Organisation A der Realtime Database A zugeordnet.

Wie Sie Daten für Ihre App zuordnen, hängt vom jeweiligen Anwendungsfall ab. Bedingungen und Strategien, die Ihnen helfen, zu definieren, was für Ihr Daten.

Mehrere Realtime Database-Instanzen erstellen

Wenn Sie das Blaze-Preismodell nutzen, können Sie bis zu 1.000 Datenbankinstanzen im selben Firebase-Projekt.

eine Datenbank erstellen in der <span class=Firebase Console mit Kontextmenü im Bereich „Datenbanken“

  1. Wechseln Sie in der Firebase-Konsole zum Tab Data (Daten) im Entwickeln > Datenbank .
  2. Wählen Sie im Menü im Bereich Realtime Database die Option Neue Datenbank erstellen aus.
  3. Passen Sie Ihre Datenbankreferenz und Sicherheitsregeln, dann klicken Sie auf Got .

Wiederholen Sie diesen Vorgang, um so viele Datenbankinstanzen wie nötig zu erstellen. Jedes Datenbankinstanz hat ihre eigenen Firebase Realtime Database Security Rules, sodass Sie den Zugriff auf Ihre Daten zu optimieren.

Sie können Datenbankinstanzen in der Firebase-Konsole oder mit die Realtime Database Management REST API.

Realtime Database Security Rules für jede Instanz bearbeiten und bereitstellen

Achte darauf, dass dein Realtime Database Security Rules auf alle entsprechenden Berechtigungen gewährt Datenbankinstanz in Ihrem Projekt. Jede Datenbank hat eigene Regeln. das Sie über die Firebase-Konsole oder über die Firebase-Befehlszeile zum Bereitstellen von Zielen.

  • So bearbeiten und stellen Sie Regeln über die Firebase-Konsole bereit:

    1. Gehen Sie zur Tab Regeln im Bereich Entwickeln > Datenbank.
    2. Wählen Sie die Datenbank aus, die Sie bearbeiten möchten, und ändern Sie dann die Regeln.
  • So bearbeiten und stellen Sie Regeln über die Firebase-Befehlszeile bereit:

    1. Ändern Sie die Regeln in den Regeldateien für Ihre Datenbankinstanzen, z. B. foo.rules.json.
    2. Erstellen Sie Bereitstellungsziele und wenden Sie diese auf verknüpfte Datenbanken an, die dieselbe Regeldatei verwenden. Beispiel:
      firebase target:apply database main my-db-1 my-db-2
      firebase target:apply database other my-other-db-3
    3. Aktualisieren Sie die Konfigurationsdatei firebase.json mit den Bereitstellungzielen:

      {
        "database": [
          {"target": "main", "rules": "foo.rules.json"},
          {"target": "other", "rules": "bar.rules.json"}
        ]
      }
      
    4. Führen Sie den Bereitstellungsbefehl aus:

      firebase deploy

Achten Sie darauf, dass Sie Regeln konsequent an einem Ort bearbeiten und bereitstellen. Wenn Sie Regeln über die Firebase-Befehlszeile bereitstellen, werden alle Änderungen überschrieben, die Sie in der Firebase-Konsole vorgenommen haben. Wenn Sie Regeln direkt in der Firebase-Konsole bearbeiten, werden alle Änderungen überschrieben, die Sie zuletzt über die Firebase-Befehlszeile bereitgestellt haben.

Anwendung mit mehreren Datenbankinstanzen verbinden

Verwenden Sie die Datenbankreferenz, um auf Daten zuzugreifen, die in sekundären Datenbankinstanzen gespeichert sind. Sie können die Referenz für eine bestimmte Datenbankinstanz über die URL oder Anwendung abrufen. Wenn Sie keine URL angeben, erhalten Sie den Verweis auf die Standarddatenbankinstanz.

Web

import { initializeApp } from "firebase/app";
import { getDatabase } from "firebase/database";

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

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

// Get the default database instance for an app1
const database1 = getDatabase(app1);

// Get a database instance for app2
const database2 = getDatabase(app2);

Web

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);
Swift
Hinweis: Dieses Firebase-Produkt ist nicht im App Clip-Ziel verfügbar.
// Get the default database instance for an app
var ref: DatabaseReference!

ref = Database.database().reference()
// Sekundäre Datenbankinstanz nach URL abrufen var ref: DatabaseReference! ref = Database.database("https://testapp-1234.firebaseio.com").reference()
Objective-C
Hinweis: Dieses Firebase-Produkt ist nicht im App Clip-Ziel verfügbar.
// Get the default database instance for an app
@property (strong, nonatomic) FIRDatabaseReference *ref;

self.ref = [[FIRDatabase database] reference];
// Sekundäre Datenbankinstanz über URL abrufen @property (strong, nonatomic) FIRDatabaseReference *ref; self.ref = [[FIRDatabase databaseWithURL:@"https://testapp-1234.firebaseio.com"] reference];

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

Java

// 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();

Instanz bei Verwendung der Firebase CLI angeben

Verwenden Sie die Option --instance, um anzugeben, welche Firebase Realtime Database Sie verwenden möchten. einen Firebase CLI-Befehl anwenden. Verwenden Sie beispielsweise den folgenden Befehl, um dem Profiler für eine Datenbankinstanz mit dem Namen my-example-shard.firebaseio.com:

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

Verbindungen zu jeder Datenbank optimieren

Wenn jeder Client während einer Sitzung eine Verbindung zu mehreren Datenbanken herstellen muss, können Sie die Anzahl gleichzeitiger Verbindungen zu jeder Datenbankinstanz um wie lange es nötig ist, um eine Verbindung zu den einzelnen Datenbankinstanzen herzustellen.

Weitere Tipps

Wenn Sie weitere Hilfe beim Fragmentieren Ihrer Daten auf mehrere Datenbankinstanzen benötigen, können Sie sich an die Firebase-Experten Slack-Kanal oder auf Stack Overflow.