Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Mit mehreren Datenbanken skalieren

Der beste Weg, um die Leistung zu optimieren und Ihre Daten in der Firebase-Echtzeitdatenbank zu skalieren, besteht darin, Ihre Daten auf mehrere Echtzeitdatenbankinstanzen aufzuteilen, die auch als Datenbank-Sharding bezeichnet werden. Sharding bietet Ihnen die Flexibilität, über die für einzelne Datenbankinstanzen geltenden Grenzen hinaus zu skalieren, zusätzlich zum Lastausgleich und zur Leistungsoptimierung.

Wann sollten Sie Ihre Daten speichern?

Wenn Sie die Echtzeitdatenbank verwenden und in eines der folgenden Szenarien passen, möchten Sie Ihre Daten möglicherweise auf mehrere Datenbanken verteilen.

  • 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 diskrete Datensätze und möchten die Leistung optimieren (z. B. eine Chat-App, die separate, unabhängige Benutzergruppen bedient).
  • Sie möchten die Last auf mehrere Datenbanken verteilen, um die Verfügbarkeit zu verbessern und das Risiko einer Überlastung einer einzelnen Datenbankinstanz zu verringern.

So speichern Sie Ihre Daten

Führen Sie die folgenden Schritte aus, um Ihre Daten zu speichern (siehe unten).

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

Ordnen Sie Ihre Daten zu

Wenn Sie Ihre Daten mehreren Datenbanken zuordnen, versuchen Sie, die folgenden Bedingungen zu erfüllen:

  • Jede Abfrage wird nur für eine einzelne Datenbankinstanz ausgeführt. Die Echtzeitdatenbank unterstützt keine Abfragen über Datenbankinstanzen hinweg.
  • Keine Freigabe oder Vervielfältigung von Daten über Datenbankinstanzen hinweg (oder minimale Freigabe oder Vervielfältigung).
  • Jede App-Instanz stellt zu einem bestimmten Zeitpunkt nur eine Verbindung zu einer Datenbank her.

Berücksichtigen Sie beim Zuordnen Ihrer Daten die folgenden Strategien:

Erstellen Sie eine "Master-Scherbe"

Speichern Sie eine Karte darüber, wie Ihre Daten über Datenbankinstanzen hinweg gespeichert werden. Auf diese Weise können Sie programmgesteuert nachschlagen, welche Datenbankinstanz dem verbindenden Client entspricht. Beachten Sie, dass dies möglicherweise mehr Aufwand bedeutet, als bei Bedarf eine direkte Verbindung zu der bestimmten Datenbankinstanz herzustellen, die Sie benötigen.

Bucket-Daten nach Kategorien oder nach Kunden

Speichern Sie Daten in isolierten Datenbankinstanzen, gruppiert nach Benutzer oder Datentyp. Wenn Sie beispielsweise eine Chat-Anwendung erstellen, die mehrere Organisationen bedient, können Sie für jede Organisation eine Datenbankinstanz erstellen und alle Chat-Daten in eindeutigen Datenbankinstanzen speichern.

In diesem Fall teilen Organisation A und Organisation B keine Daten, es gibt keine doppelten Daten in Ihren Datenbanken und Sie führen nur Abfragen für eine einzelne Datenbankinstanz durch. Darüber hinaus stellen Benutzer in jeder Organisation nur dann eine Verbindung zur Datenbank ihrer Organisation her, wenn sie die Chat-App verwenden.

Sie können dann im Voraus mehrere Datenbankinstanzen erstellen und die ID der Organisation verwenden, um ein Team seiner Datenbankinstanz zuzuordnen. Beispielsweise ist Organisation A der Echtzeitdatenbank A zugeordnet.

Die Art und Weise, wie Sie Daten für Ihre App zuordnen, hängt von Ihrem speziellen Anwendungsfall ab. Die oben beschriebenen Bedingungen und Strategien können Ihnen jedoch dabei helfen, zu definieren, was für Ihre Daten funktioniert.

Erstellen Sie mehrere Echtzeitdatenbankinstanzen

Wenn Sie sich im Blaze-Preisplan befinden , können Sie mehrere Datenbankinstanzen in demselben Firebase-Projekt erstellen.

Erstellen Sie eine Datenbank in der Firebase-Konsole mit dem Kontextmenü im Abschnitt Datenbanken

  1. Wechseln Sie in der Firebase-Konsole zur Registerkarte Daten im Abschnitt Entwickeln> Datenbank .
  2. Wählen Sie im Menü im Abschnitt Echtzeitdatenbank die Option Neue Datenbank erstellen .
  3. Passen Sie Ihre Datenbankreferenz und Sicherheitsregeln an und klicken Sie dann auf Erhalten .

Wiederholen Sie den Vorgang, um so viele Datenbankinstanzen zu erstellen, wie Sie benötigen. Jede Datenbankinstanz verfügt über einen eigenen Satz von Firebase-Echtzeitdatenbankregeln, sodass Sie den Zugriff auf Ihre Daten optimieren können.

Bearbeiten und Bereitstellen von Echtzeit-Datenbankregeln für jede Instanz

Stellen Sie sicher, dass Ihre Echtzeit-Datenbankregeln einen angemessenen Zugriff auf jede Datenbankinstanz in Ihrem Projekt ermöglichen. Jede Datenbank verfügt über eigene Regeln, die Sie über die Firebase-Konsole oder über die Firebase-CLI zum Bereitstellen von Zielen bearbeiten und bereitstellen können.

  • Gehen Sie folgendermaßen vor, um Regeln über die Firebase-Konsole zu bearbeiten und bereitzustellen:

    1. Wechseln Sie im Abschnitt Entwickeln> Datenbank zur Registerkarte Regeln .
    2. Wählen Sie die Datenbank aus, die Sie bearbeiten möchten, und ändern Sie dann die Regeln.
  • Gehen Sie folgendermaßen vor, um Regeln über die Firebase-CLI zu bearbeiten und bereitzustellen:

    1. Ändern Sie die Regeln in den foo.rules.json für Ihre Datenbankinstanzen (z. B. foo.rules.json ).
    2. Erstellen Sie Anwendungsziele und wenden Sie sie an, um Datenbanken zuzuordnen, die dieselbe Regeldatei verwenden. Zum Beispiel:
      firebase target:apply database main my-db-1 my-db-2
      firebase target:apply database other my-other-db-3
    3. Aktualisieren Sie Ihre Konfigurationsdatei firebase.json mit den Bereitstellungszielen:

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

      firebase deploy

Stellen Sie sicher, dass Sie Regeln konsistent von derselben Stelle aus bearbeiten und bereitstellen. Das Bereitstellen von Regeln über die Firebase-CLI überschreibt alle Änderungen, die Sie in der Firebase-Konsole vorgenommen haben, und das Bearbeiten von Regeln direkt in der Firebase-Konsole überschreibt alle kürzlich über die Firebase-CLI bereitgestellten Änderungen.

Verbinden Sie Ihre App mit mehreren Datenbankinstanzen

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 URL oder App abrufen. Wenn Sie keine URL angeben, erhalten Sie die Referenz für die Standarddatenbankinstanz der App.

Netz
// init
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 database1 = firebase.database(app2);
Schnell
// Get the default database instance for an app
var ref: DatabaseReference!

ref = Database.database().reference()
// Eine sekundäre Datenbankinstanz über die URL abrufen var ref: DatabaseReference! ref = Database.database ("https://testapp-1234.firebaseio.com") .reference ()
Ziel c
// Get the default database instance for an app
@property (strong, nonatomic) FIRDatabaseReference *ref;

self.ref = [[FIRDatabase database] reference];
// Eine sekundäre Datenbankinstanz über die URL @property (stark, nichtatomar) abrufen FIRDatabaseReference * ref; self.ref = [[FIRDatabase databaseWithURL: @ "https://testapp-1234.firebaseio.com"] Referenz];

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

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

Geben Sie eine Instanz an, wenn Sie die Firebase-CLI verwenden

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

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

Optimieren Sie die Verbindungen in jeder Datenbank

Wenn jeder Client während einer Sitzung eine Verbindung zu mehreren Datenbanken herstellen muss, können Sie die Anzahl der gleichzeitigen Verbindungen zu jeder Datenbankinstanz verringern, indem Sie nur so lange wie erforderlich eine Verbindung zu jeder Datenbankinstanz herstellen.

Holen Sie sich weitere Ratschläge

Wenn Sie weitere Hilfe beim Sharding Ihrer Daten über mehrere Datenbankinstanzen benötigen, wenden Sie sich an die Firebase-Experten in unserem Slack-Kanal oder über Stack Overflow .