Firebase Firestore : Stocker et gérer des données en temps réel facilement

Par hekram, 20 février, 2025
Bonjour et bienvenue dans notre quatrième article !

Dans l'article précédent, nous avons exploré l'authentification avec Firebase. Aujourd'hui, nous allons nous plonger dans Firebase Firestore, une base de données flexible et performante qui permet de stocker et gérer des données en temps réel.


C'est quoi Firestore ?

Firestore est une base de données cloud proposée par Google qui permet aux développeurs de stocker et de gérer des données facilement, sans avoir à s’occuper des serveurs. Elle fonctionne sous forme de documents et de collections, ce qui la rend idéale pour créer des applications web, mobiles et IoT. Les données sont stockées en JSON dans des collections, ce qui les rend faciles à organiser et à consulter.

C'est quoi Firebase Realtime Database

Firebase Realtime Database est une base de données cloud qui organise les informations en format JSON et met à jour les données en temps réel sur tous les appareils connectés. Elle est parfaite pour les applications qui ont besoin de mises à jour en temps réel, comme les chats en ligne ou les outils de collaboration.

Différences entre Firestore et Firebase Realtime Database

1. Structure des données

  • Firestore : Utilise une structure collection et document, ce qui permet une organisation propre des données et une gestion plus efficace des relations complexes.
  • Realtime Database : Stocke les données sous forme d’une structure en arbre JSON, ce qui est plus simple mais peut devenir difficile à gérer lorsque les données sont en plusieurs niveaux de sous-catégorie.

2. Performances

  • Firestore : Facilite la recherche et la récupération des données, tout en permettant de les organiser, de les filtrer et de les trier rapidement.
  • Realtime Database : Très rapide pour mettre à jour les données en direct, mais moins pratique pour trouver des informations spécifiques.

3. Sécurité

  • Firestore : Permet de contrôler l’accès aux données plus précisément, en appliquant des règles de sécurité sur chaque document et collection.
  • Realtime Database : Utilise des règles de sécurité générales sur l’ensemble des données, ce qui peut être plus compliqué à ajuster pour des accès spécifiques.

4. Recommandés

  • Firestore : Parfait pour les applications complexes et évolutives, où l'on a besoin d'une gestion efficace des données
  • Realtime Database : Idéal pour les applications en temps réel

Choix entre Firestore et Realtime Database

Firebase propose deux solutions adaptées à différents types d’applications. Nous allons surtout découvrir Firestore, qui est plus flexible pour la plupart des sites web. Realtime Database est présenté afin de montrer qu’il peut être utilisé pour des applications en temps réel, ce qui le rend très pratique.


Structure et Modèle de Données

Firestore organise les données en collections et documents, au lieu d'utiliser des tables comme les bases de données classiques. Chaque document est un fichier au format JSON qui peut contenir différents types d'informations, sans structure fixe.

1. Organisation des données

Au lieu d'utiliser des tables et des lignes comme dans une base de données SQL, Firestore organise ses données en collections et documents.

  • Une collection regroupe plusieurs documents, par exemple une collection "Utilisateurs" qui contient tous les utilisateurs de l’application.
  • Un document est un objet stocké au format JSON, comme un fichier contenant les informations d’un utilisateur connecté (nom, âge, courriel).
   ├── utilisateur_1 
   │      ├── nom : "Hamza"
   │      ├── âge : 25
   │      ├── courriel: "hamza11@gmail.com"
   │
   ├── utilisateur_2 
          ├── nom : "Jason"
          ├── âge : 26
          ├── courriel: "jason22@gmail.com"

2. Exemple de modèle avec sous-collections

Firestore permet aussi d’ajouter des sous-collections à l’intérieur des documents pour organiser encore mieux les données.

   ├── utilisateur_1 (Document)
   │      ├── nom : "Hamza" 
   │      ├── âge : 25
   │      ├── cours (Sous-collection)
   │                  ├── Math (Document)
   │                  │            ├── groupe : "E23"
   │                  │            ├── code : "E-23321"
   │                 
   │

Opérations CRUD

Firestore fournit déjà des méthodes pour ajouter, lire, mettre à jour et supprimer des données (CRUD) dans sa documentation officielle. Il permet de gérer facilement des données dans une base NoSQL en utilisant un système de collections et documents.

Les méthodes proposées par la documentation doivent être placées dans un fichier dédié à Firestore, après avoir intégré Firebase dans le projet. Nous allons créer un fichier spécifique : firebase.js, qui sera dédié à Firestore. Avant d'utiliser Firestore, nous devons importer la bibliothèque correspondante : import { getFirestore } from "firebase/firestore";

Création de données (Create)

  • Cloud Firestore organise les données en documents stockés dans des collections. Lors du premier ajout de données, il crée automatiquement la collection et le document, sans nécessiter de configuration préalable.
  • Un exemple d'ajout d'un nouvel utilisateur dans la collection users.
import { collection, addDoc } from "firebase/firestore"; 
try {
  const docRef = await addDoc(collection(db, "users"), {
    first: "Ada",
    last: "Lovelace",
    born: 1815
  });
  console.log("Document written with ID: ", docRef.id);
} catch (e) {
  console.error("Error adding document: ", e);
}

Lecture des données (Read)

  • Vous pouvez vérifier vos données directement dans la console Firebase avec le visualiseur de données. Pour récupérer toute une collection, utilisez la méthode getDocs().
  • L'exemple suivant permet d'afficher tous les utilisateurs stockés dans Firestore :
import { collection, getDocs } from "firebase/firestore"; 
const querySnapshot = await getDocs(collection(db, "users"));
querySnapshot.forEach((doc) => {
  console.log(`${doc.id} => ${doc.data()}`);
}); 

Mise à jour des données (Update)

  • Firestore permet d'utiliser la méthode updateDoc() pour modifier un document spécifique, mais il ne peut pas midifier une collection.
  • Pour modifier un champ spécifique d'un document :
import { doc, updateDoc, arrayUnion, arrayRemove } from "firebase/firestore";

const washingtonRef = doc(db, "cities", "DC");

// Atomically add a new region to the "regions" array field.
await updateDoc(washingtonRef, {
    regions: arrayUnion("greater_virginia")
});
// Atomically remove a region from the "regions" array field.
await updateDoc(washingtonRef, {
    regions: arrayRemove("east_coast")
}); 

Suppression de données (Delete)

  • Pour supprimer un document, utilisez la méthode deleteDoc(), en spécifiant son chemin dans Firestore :
import { doc, deleteDoc } from "firebase/firestore";
await deleteDoc(doc(db, "cities", "DC"));

Conclusion

Nous avons découvert Firestore, une base de données cloud flexible et performante qui permet de stocker et gérer des données en temps réel. Grâce à son système de collections et documents, il facilite l'organisation des informations et offre des fonctionnalités avancées comme la synchronisation automatique et le mode hors ligne. Avec Firestore, il est possible d’ajouter, lire, mettre à jour et supprimer des données facilement.


Référence

Étiquettes

Commentaires2

abnousinane

il y a 1 mois 1 semaine

Merci pour cet article! Je me demande s’il est possible d’utiliser Firestore et Realtime Database ensemble dans une même application?

gmousseaulangevin

il y a 1 mois

Je me demande s'il y a certains types d'applications qui sont mieux adaptées pour utiliser une base de données Firestore ?