Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Utiliser Cloud Firestore avec la base de données en temps réel Firebase

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Vous pouvez utiliser à la fois Firebase Realtime Database et Cloud Firestore dans votre application et tirer parti des avantages de chaque solution de base de données pour répondre à vos besoins. Par exemple, vous souhaiterez peut-être tirer parti de la prise en charge de la présence de Realtime Database, comme indiqué dans Build Presence in Cloud Firestore .

En savoir plus sur les différences entre les bases de données .

Déplacer des données vers Cloud Firestore

Si vous avez décidé de migrer certaines de vos données de Realtime Database vers Cloud Firestore, envisagez le flux suivant. Étant donné que chaque base de données a des besoins et des considérations structurelles uniques, il n'existe pas de chemin de migration automatisé. Au lieu de cela, vous pouvez suivre cette progression générale :

  1. Mappez la structure des données et les règles de sécurité de la base de données en temps réel vers Cloud Firestore. La base de données en temps réel et Cloud Firestore s'appuient sur l'authentification Firebase, vous n'avez donc pas besoin de modifier l'authentification des utilisateurs pour votre application. Cependant, les règles de sécurité et le modèle de données sont différents et il est important de bien tenir compte de ces divergences avant de commencer à déplacer des données vers Cloud Firestore.

  2. Déplacer les données historiques. Lorsque vous configurez votre nouvelle structure de données dans Cloud Firestore, vous pouvez mapper et déplacer des données existantes de Realtime Database vers votre nouvelle instance Cloud Firestore. Toutefois, si vous utilisez les deux bases de données dans votre application, vous n'avez pas besoin de déplacer les données historiques hors de la base de données en temps réel.

  3. Mettez en miroir les nouvelles données sur Firestore en temps réel. Utilisez Cloud Functions pour écrire de nouvelles données dans votre nouvelle base de données Cloud Firestore à mesure qu'elles sont ajoutées à la base de données en temps réel.

  4. Faites de Cloud Firestore votre base de données principale pour les données migrées. Une fois que vous avez migré certaines de vos données, utilisez Cloud Firestore comme base de données principale et réduisez votre utilisation de la base de données en temps réel pour les données migrées. Considérez les versions de votre application qui sont toujours liées à la base de données en temps réel pour ces données et comment vous prévoyez de continuer à les prendre en charge.

Assurez-vous de prendre en compte les coûts de facturation pour Realtime Database et Cloud Firestore .

Cartographiez vos données

Les données dans la base de données en temps réel sont structurées comme une arborescence unique, tandis que Cloud Firestore prend en charge des hiérarchies de données plus explicites via des documents, des collections et des sous-collections. Si vous déplacez certaines de vos données de Realtime Database vers Cloud Firestore, vous souhaiterez peut-être envisager une architecture différente pour vos données.

Différences majeures à prendre en compte

Si vous déplacez des données de votre arborescence de base de données en temps réel existante vers des documents et des collections Cloud Firestore, gardez à l'esprit les principales différences suivantes entre les bases de données qui peuvent avoir un impact sur la façon dont vous structurez les données dans Cloud Firestore :

  • Les requêtes superficielles offrent plus de flexibilité dans les structures de données hiérarchiques.
  • Les requêtes complexes offrent plus de granularité et réduisent le besoin de données en double.
  • Les curseurs de requête offrent une pagination plus robuste.
  • Les transactions ne nécessitent plus une racine commune pour toutes vos données et sont plus efficaces.
  • Les coûts de facturation diffèrent entre Realtime Database et Cloud Firestore. Dans de nombreux cas, Cloud Firestore peut être plus cher que la base de données en temps réel, en particulier si vous comptez sur de nombreuses petites opérations. Envisagez de réduire le nombre d'opérations sur votre base de données et d'éviter les écritures inutiles. En savoir plus sur les différences de facturation entre Realtime Database et Cloud Firestore.

Les meilleures pratiques en action

L'exemple suivant reflète certaines des considérations que vous pourriez avoir lorsque vous déplacez vos données entre des bases de données. Vous pouvez tirer parti des lectures superficielles et des capacités d'interrogation améliorées pour des structures de données plus naturelles que celles que vous avez peut-être utilisées avec la base de données en temps réel.

Considérez une application de guide de la ville qui aide les utilisateurs à trouver des points de repère remarquables dans les villes du monde entier. Étant donné que la base de données en temps réel ne dispose pas de lectures superficielles, vous avez peut-être dû structurer les données en deux nœuds de niveau supérieur, comme suit :

// /cities/$CITY_KEY
{
  name: "New York",
  population: 8000000,
  capital: False
}

// /city-landmark/$CITY_KEY/$LANDMARK_KEY
{
  name: "Empire State Building",
  category: "Architecture"
}

Cloud Firestore a des lectures superficielles, donc la recherche de documents dans une collection n'extrait pas les données des sous-collections. Par conséquent, vous pouvez stocker des informations de point de repère dans une sous-collection :

// /cities/$CITY_ID
{
  name: "New York",
  population: 8000000,
  capital: False,
  landmarks: [... subcollection ...]
}

Les documents ont une taille maximale de 1 Mo, ce qui est une autre raison de stocker les points de repère en tant que sous-collection, en gardant chaque document de ville petit, plutôt que de gonfler les documents avec des listes imbriquées.

Les capacités d'interrogation avancées de Cloud Firestore réduisent le besoin de dupliquer les données pour les modèles d'accès courants. Par exemple, considérez un écran dans l'application City Guide qui affiche toutes les capitales classées par population. Dans la base de données en temps réel, le moyen le plus efficace de procéder consiste à conserver une liste distincte des capitales qui duplique les données de la liste des cities , comme suit :

{
   cities: {
    // ...
   },

   capital-cities: {
     // ...
   }
}

Dans Cloud Firestore, vous pouvez exprimer une liste de capitales par ordre de population en une seule requête :

db.collection('cities')
    .where('capital', '==', true)
    .orderBy('population')

En savoir plus sur le modèle de données Cloud Firestore et consulter nos solutions pour plus d'idées sur la façon de structurer votre base de données Cloud Firestore.

Sécurisez vos données

Que vous utilisiez les règles de sécurité Cloud Firestore pour les clients Android, Apple ou Web, ou la gestion de l'accès à l'identité (IAM) pour les serveurs, assurez-vous de sécuriser vos données dans Cloud Firestore ainsi que dans la base de données en temps réel. L'authentification des utilisateurs est gérée par Authentication pour les deux bases de données, vous n'avez donc pas besoin de modifier votre implémentation d'authentification lorsque vous commencez à utiliser Cloud Firestore.

Différences majeures à prendre en compte

  • Les SDK mobiles et Web utilisent les règles de sécurité Cloud Firestore, tandis que les SDK serveur utilisent Identity Access Management (IAM) pour sécuriser les données.
  • Les règles de sécurité Cloud Firestore ne se cascadent pas, sauf si vous utilisez un caractère générique. Les documents et les collections n'héritent pas autrement des règles.
  • Vous n'avez plus besoin de valider les données séparément (comme vous le faisiez dans Realtime Database ).
  • Cloud Firestore vérifie les règles avant d'exécuter une requête pour s'assurer que l'utilisateur dispose de l'accès approprié pour toutes les données renvoyées par la requête.

Déplacer les données historiques vers Cloud Firestore

Une fois que vous avez mappé vos structures de données et de sécurité aux modèles de données et de sécurité de Cloud Firestore, vous pouvez commencer à ajouter vos données. Si vous prévoyez d'interroger des données historiques après avoir déplacé votre application de Realtime Database vers Cloud Firestore, ajoutez une exportation de vos anciennes données vers votre nouvelle base de données Cloud Firestore. Si vous prévoyez d'utiliser à la fois Realtime Database et Cloud Firestore dans votre application, vous pouvez ignorer cette étape.

Pour éviter d'écraser de nouvelles données avec d'anciennes données, vous souhaiterez peut-être d'abord ajouter vos données historiques. Si vous ajoutez simultanément de nouvelles données aux deux bases de données, comme indiqué à l'étape suivante, assurez-vous de donner la priorité aux nouvelles données ajoutées à Cloud Firestore par Cloud Functions.

Pour migrer les données historiques vers Cloud Firestore, procédez comme suit :

  1. Exportez vos données à partir de la base de données en temps réel ou utilisez une sauvegarde récente .
    1. Accédez à la section Base de données en temps réel dans la console Firebase.
    2. Dans l'onglet Données , sélectionnez le nœud de niveau racine de votre base de données et sélectionnez Exporter JSON dans le menu.
  2. Créez votre nouvelle base de données dans Cloud Firestore et ajoutez vos données .

    Envisagez les stratégies suivantes lorsque vous transférez certaines de vos données vers Cloud Firestore :

    • Écrivez un script personnalisé qui transfère vos données pour vous. Bien que nous ne puissions pas proposer de modèle pour ce script, car chaque base de données aura des besoins uniques, les experts Cloud Firestore de notre chaîne Slack ou de Stack Overflow peuvent examiner votre script ou vous proposer des conseils adaptés à votre situation spécifique.
    • Utilisez les SDK du serveur (Node.js, Java, Python ou Go) pour écrire des données directement dans Cloud Firestore. Pour obtenir des instructions sur la configuration des SDK de serveur, consultez Mise en route .
    • Pour accélérer les migrations de données volumineuses, utilisez des écritures par lots et envoyez jusqu'à 500 opérations dans une seule requête réseau.
    • Pour respecter les limites de débit Cloud Firestore , limitez les opérations à 500 écritures/seconde pour chaque collection.

Ajouter de nouvelles données à Cloud Firestore

Pour maintenir la parité entre vos bases de données, ajoutez de nouvelles données aux deux bases de données en temps réel. Utilisez Cloud Functions pour déclencher une écriture dans Cloud Firestore chaque fois qu'un client écrit dans Realtime Database. Assurez-vous que Cloud Firestore donne la priorité aux nouvelles données provenant de Cloud Functions sur toutes les écritures que vous effectuez à partir de votre migration de données historiques.

Créez une fonction pour écrire des données nouvelles ou modifiées dans Cloud Firestore chaque fois qu'un client écrit des données dans la base de données en temps réel. En savoir plus sur les déclencheurs de base de données en temps réel pour Cloud Functions.

Faites de Cloud Firestore votre base de données principale pour les données migrées

Si vous avez décidé d'utiliser Cloud Firestore comme base de données principale pour certaines de vos données, assurez-vous de tenir compte de toutes les fonctions de mise en miroir des données que vous avez configurées et validez vos règles de sécurité Cloud Firestore.

  1. Si vous avez utilisé Cloud Functions pour maintenir la parité entre vos bases de données, assurez-vous de ne pas dupliquer les opérations d'écriture sur les deux bases de données dans une boucle. Basculez votre fonction pour écrire dans une seule base de données, ou supprimez complètement la fonction et commencez à supprimer progressivement la fonctionnalité d'écriture pour les données migrées dans les applications toujours liées à la base de données en temps réel. La façon dont vous gérez cela pour votre application dépend de vos besoins spécifiques et de vos utilisateurs.

  2. Vérifiez que vos données sont correctement sécurisées. Validez vos règles de sécurité Cloud Firestore ou votre configuration IAM.