Évolutivité avec plusieurs bases de données

Le meilleur moyen d'optimiser les performances et de faire évoluer vos données dans Firebase Realtime Database consiste à répartir vos données sur plusieurs instances Realtime Database, également appelées la segmentation des bases de données. La segmentation vous offre la flexibilité nécessaire pour évoluer au-delà Les limites applicables aux bases de données individuelles des instances, en plus de l'équilibrage de charge et de l'optimisation des performances.

Quand segmenter vos données ?

Vous pouvez fractionner vos données sur plusieurs bases de données si vous utilisez Realtime Database et que vous vous trouvez dans l'un des scénarios suivants :

  • Vous souhaitez effectuer un scaling au-delà de la limite de 200 000 connexions simultanées. 1 000 opérations d'écriture par seconde, ou toute autre limits pour une seule instance de base de données.
  • Vous disposez de plusieurs ensembles de données distincts et souhaitez optimiser vos performances (par exemple, une application de chat qui s'adresse à des groupes d'utilisateurs distincts et indépendants).
  • Vous souhaitez équilibrer la charge sur plusieurs bases de données afin d'améliorer la disponibilité et de réduire le risque de surcharge d'une seule instance de base de données.

Comment segmenter vos données

Pour partitionner vos données, procédez comme suit (décrit plus en détail ci-dessous) :

  1. Mappez vos données à plusieurs bases de données en fonction des besoins spécifiques de votre application.
  2. Créer plusieurs instances de base de données
  3. Configurez votre application pour qu'elle se connecte à l'instance Realtime Database nécessaire pour chaque ensemble de données.

Mapper vos données

Lorsque vous mappez vos données sur plusieurs bases de données, essayez de vous conformer aux les conditions suivantes:

  • Chaque requête ne s'exécute que sur une seule instance de base de données. Realtime Database n'est pas compatible avec les requêtes entre les instances de base de données.
  • Pas de partage ni de duplication des données entre les instances de base de données (ou un nombre minimal de partages ou de duplications).
  • Chaque instance d'application ne se connecte qu'à une seule base de données à la fois.

Lorsque vous cartographiez vos données, pensez à appliquer les stratégies suivantes:

Créer un "fragment maître"

Stockez une carte de la façon dont vos données sont stockées Compute Engine. Vous pouvez ainsi rechercher par programmation l'instance de base de données qui correspond au client qui se connecte. Gardez à l'esprit que cela pourrait avoir plus de frais généraux que de se connecter directement à une base de données l'instance dont vous avez besoin, quand vous en avez besoin.

Regrouper les données par catégories ou par client

Stockez les données dans des instances de base de données cloisonnées, regroupées par utilisateur ou par type de données. Par exemple, si vous créez une application de chat qui dessert plusieurs organisations, vous pouvez créer une instance de base de données pour chaque organisation et stocker toutes les données de chat dans des instances de base de données uniques.

Dans ce cas, les organisations A et B ne partagent pas de données, il n'y a pas les données en double dans vos bases de données, et vous n'exécutez des requêtes que sur un une instance de base de données unique. De plus, les utilisateurs de chaque organisation ne se connectent à la base de données de leur organisation que lorsqu'ils utilisent l'application de chat.

Vous pouvez ensuite créer plusieurs instances de base de données à l'avance et utiliser la l'ID d'une organisation pour mapper une équipe à son instance de base de données. Par exemple, l'organisation A est mappée sur Realtime Database A.

La façon dont vous mappez les données pour votre application dépend de votre cas d'utilisation particulier, mais les conditions et les stratégies décrites ci-dessus peuvent vous aider à définir ce qui fonctionne pour vos données.

Créer plusieurs instances Realtime Database

Si vous utilisez le forfait Blaze, vous pouvez créer jusqu'à 1 000 instances de base de données dans le même projet Firebase.

créer une base de données dans <span class=Console Firebase avec le menu contextuel dans la section "Databases" (Bases de données) />

  1. Dans la console Firebase, accédez à l'onglet Données dans la section Développer > Base de données.
  2. Sélectionnez Créer une base de données dans le menu de la section Realtime Database.
  3. Personnalisez votre référence de base de données et vos règles de sécurité, puis cliquez sur OK.

Répétez la procédure pour créer autant d'instances de base de données que vous le souhaitez. Chaque instance de base de données dispose de son propre ensemble de Firebase Realtime Database Security Rules, ce qui vous permet d'affiner l'accès à vos données.

Vous pouvez créer et gérer des instances de base de données dans la console Firebase ou à l'aide de l'API REST de gestion de la base de données en temps réel.

Modifier et déployer Realtime Database Security Rules pour chaque instance

Assurez-vous que vos Realtime Database Security Rules autorisent l'accès approprié à chaque une instance de base de données de votre projet. Chaque base de données a son propre ensemble de règles, que vous pouvez modifier et déployer à partir de la console Firebase, ou à l'aide de la CLI Firebase pour déployer les cibles.

  • Pour modifier et déployer des règles à partir de la console Firebase, procédez comme suit :

    1. Accédez au Onglet Règles dans la section Développer > Base de données.
    2. Sélectionnez la base de données que vous souhaitez modifier, puis modifiez les règles.
  • Pour modifier et déployer des règles à partir de la CLI Firebase, procédez comme suit:

    1. Modifiez les règles dans les fichiers de règles de vos instances de base de données (par exemple, foo.rules.json).
    2. Créez et appliquez des cibles de déploiement pour associer des bases de données qui utilisent le même fichier de règles. Par exemple :
      firebase target:apply database main my-db-1 my-db-2
      firebase target:apply database other my-other-db-3
    3. Mettez à jour votre fichier de configuration firebase.json avec les cibles de déploiement :

      {
        "database": [
          {"target": "main", "rules": "foo.rules.json"},
          {"target": "other", "rules": "bar.rules.json"}
        ]
      }
      
    4. Exécutez la commande de déploiement:

      firebase deploy

Veillez à modifier et à déployer les règles de manière cohérente depuis le même emplacement. Déploiement... de la CLI Firebase remplacent les modifications effectuées dans la Console Firebase et modification des règles directement dans la console Firebase remplace toutes les modifications récentes que vous avez déployées via la CLI Firebase.

Connecter votre application à plusieurs instances de base de données

Utilisez la référence de la base de données pour accéder aux données stockées dans des instances de base de données secondaires. Vous pouvez obtenir la référence d'une instance de base de données spécifique par URL ou par application. Si sans spécifier d'URL, vous obtiendrez la référence du fichier de base de données par défaut.

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
Remarque : Ce produit Firebase n'est pas disponible sur la cible App Clip.
// Get the default database instance for an app
var ref: DatabaseReference!

ref = Database.database().reference()
// Obtenir une instance de base de données secondaire par URL var ref: DatabaseReference! ref = Database.database("https://testapp-1234.firebaseio.com").reference()
Objective-C
Remarque:Ce produit Firebase n'est pas disponible sur la cible de l'extrait d'application.
// Get the default database instance for an app
@property (strong, nonatomic) FIRDatabaseReference *ref;

self.ref = [[FIRDatabase database] reference];
// Obtenir une instance de base de données secondaire par URL @property (strong, non atomique) 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();

Spécifier une instance lorsque vous utilisez la CLI Firebase

Utilisez l'option --instance pour spécifier le Firebase Realtime Database que vous souhaitez et appliquer une commande CLI Firebase. Par exemple, utilisez la commande suivante pour exécuter le profileur pour une instance de base de données nommée my-example-shard.firebaseio.com :

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

Optimiser les connexions pour chaque base de données

Si chaque client doit se connecter à plusieurs bases de données au cours d'une session, vous pouvez réduire le nombre de connexions simultanées à chaque instance de base de données en ne vous connectant à chaque instance de base de données que le temps nécessaire.

Obtenir d'autres conseils

Si vous avez besoin d'une aide supplémentaire pour segmenter vos données sur plusieurs instances de base de données, contactez les experts Firebase Chaîne Slack ou sur Stack Overflow.