Mise à l'échelle avec plusieurs bases de données

La meilleure façon d'optimiser les performances et de faire évoluer vos données dans Firebase Realtime Database est de diviser vos données sur plusieurs instances de Realtime Database, également appelée partitionnement de base de données. Le partage vous offre la flexibilité d'évoluer au-delà des limites applicables aux instances de base de données individuelles, en plus de l'équilibrage de charge et de l'optimisation des performances.

Quand partager vos données

Vous souhaiterez peut-être partager vos données sur plusieurs bases de données si vous utilisez Realtime Database et si vous vous adaptez à l'un des scénarios suivants :

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

Comment partager vos données

Pour partager vos données, suivez ces étapes (décrites plus en détail ci-dessous) :

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

Cartographiez vos données

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

  • Chaque requête s'exécute uniquement sur une seule instance de base de données. Realtime Database ne prend pas en charge les requêtes sur les instances de base de données.
  • Aucun partage ni duplication de données entre les instances de base de données (ou partage ou duplication minimal).
  • Chaque instance d'application ne se connecte qu'à une seule base de données à un moment donné.

Lorsque vous mappez vos données, envisagez d'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 dans les instances de base de données. De cette façon, vous pouvez rechercher par programme quelle instance de base de données correspond au client qui se connecte. Gardez à l’esprit que cela peut entraîner une surcharge plus importante que la connexion directe à l’instance de base de données particulière dont vous avez besoin, lorsque vous en avez besoin.

Données de regroupement 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 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, l’organisation A et l’organisation B ne partagent pas de données, il n’y a pas de données en double dans vos bases de données et vous effectuez uniquement des requêtes sur une seule instance de base de données. De plus, les utilisateurs de chaque organisation se connectent uniquement à la base de données de leur organisation lorsqu'ils utilisent l'application de chat.

Vous pouvez ensuite créer plusieurs instances de base de données à l'avance et utiliser l'ID de l'organisation pour mapper une équipe à son instance de base de données. Par exemple, l'organisation A est mappée à la base de données en temps réel 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 stratégies décrites ci-dessus peuvent vous aider à définir ce qui fonctionne pour vos données.

Créer plusieurs instances de base de données en temps réel

Si vous bénéficiez du plan tarifaire 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 la console Firebase avec le menu contextuel dans la section bases de données

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

Répétez le processus pour créer autant d'instances de base de données que nécessaire. Chaque instance de base de données possède son propre ensemble de règles de sécurité de base de données en temps réel Firebase, afin que vous puissiez 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 Realtime Database Management .

Modifier et déployer des règles de sécurité de base de données en temps réel pour chaque instance

Assurez-vous que vos règles de sécurité de base de données en temps réel autorisent un accès approprié à chaque instance de base de données de votre projet. Chaque base de données possède 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 des cibles .

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

    1. Accédez à l' onglet Règles dans la section Développement > Base de données .
    2. Sélectionnez la base de données que vous souhaitez éditer, 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 pour vos instances de base de données (par exemple, foo.rules.json ).
    2. Créez et appliquez des cibles de déploiement aux bases de données associé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

Assurez-vous de modifier et de déployer systématiquement les règles à partir du même endroit. Le déploiement de règles à partir de la CLI Firebase remplace toutes les modifications que vous avez apportées dans la console Firebase, et la 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.

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

Utilisez la référence de base de données pour accéder aux données stockées dans les 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 application. Si vous ne spécifiez pas d'URL, vous obtiendrez la référence de l'instance de base de données par défaut de l'application.

Web modular API

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 namespaced API

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);
Rapide
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()
// Obtenez une instance de base de données secondaire par URL var ref : DatabaseReference ! ref = Base de données.database("https://testapp-1234.firebaseio.com").reference()
Objectif c
Remarque : Ce produit Firebase n'est pas disponible sur la cible App Clip.
// Get the default database instance for an app
@property (strong, nonatomic) FIRDatabaseReference *ref;

self.ref = [[FIRDatabase database] reference];
// Obtenez une instance de base de données secondaire par URL @property (fort, non atomique) FIRDatabaseReference *ref; self.ref = [[FIRDatabase databaseWithURL:@"https://testapp-1234.firebaseio.com"] référence] ;

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 lors de l'utilisation de la CLI Firebase

Utilisez l' option --instance pour spécifier à quelle base de données Firebase Realtime vous souhaitez appliquer une commande Firebase CLI. 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 sur 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 vous connectant à chaque instance de base de données uniquement aussi longtemps que nécessaire.

Obtenez plus de conseils

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