Il n'y a pas si longtemps, Google a lancé Cloud Firestore. Cloud Firestore est une base de données NoSQL basée sur le cloud que Google positionne en remplacement de la base de données en temps réel. Dans cet article, je veux dire comment commencer à l'utiliser.
Les possibilités
Cloud Firestore vous permet de stocker des données sur un serveur distant, d'y accéder facilement et de surveiller les changements en temps réel. La documentation présente une excellente comparaison entre Cloud Firestore et la base de données en temps réel.
Création et connexion à un projet
Dans la console Firebase, sélectionnez Base de données et cliquez sur Créer une base de données. Ensuite, sélectionnez les paramètres d'accès. Pour se familiariser, un mode test nous suffira, mais sur prod il vaut mieux aborder ce problème plus sérieusement. En savoir plus sur les modes d'accès ici .

Pour configurer le projet, procédez comme suit:
- Ajoutez Firebase au projet selon les instructions d' ici.
- Ajouter une dépendance à app / build.gradle
implementation 'com.google.firebase:firebase-firestore:18.1.0'
Maintenant, tout est prêt.
Pour me familiariser avec les techniques de base du travail avec Cloud Firestore, j'ai écrit une application simple. Pour travailler, vous devez créer un projet dans la console Firebase et ajouter le fichier google-services.json au projet dans Android Studio.
Structure de stockage des données
Firestore utilise des collections et des documents pour stocker des données. Un document est un enregistrement qui contient des champs. Les documents sont regroupés en collections. Un document peut également contenir des collections imbriquées, mais cela n'est pas pris en charge sur Android. Si nous établissons une analogie avec la base de données SQL, la collection est une table et le document est une entrée dans cette table. Une collection peut contenir des documents avec un ensemble de champs différent.
Réception et enregistrement de données
Pour obtenir tous les documents d'une collection, le code suivant suffit
remoteDB.collection(“Tasks”) .get() .addOnSuccessListener { querySnapshot ->
Ici, nous demandons tous les documents de la collection Tâches .
La bibliothèque vous permet de générer des requêtes avec des paramètres. Le code suivant montre comment obtenir des documents de la collection par condition
remoteDB.collection(“Tasks”) .whereEqualTo("title", "Task1") .get() .addOnSuccessListener { querySnapshot ->
Ici, nous demandons tous les documents de la collection Tasks pour lesquels le champ de titre correspond à la valeur de Task1 .
Dès réception des documents, ils peuvent être immédiatement convertis dans nos classes de données
remoteDB.collection(“Tasks”) .get() .addOnSuccessListener { querySnapshot ->
Pour écrire, vous devez créer un Hashmap avec des données (où le nom du champ agit comme clé et la valeur de ce champ comme valeur) et le transférer dans la bibliothèque. Le code suivant illustre cela
val taskData = HashMap<String, Any>() taskData["title"] = task.title taskData["created"] = Timestamp(task.created.time / 1000, 0) remoteDB.collection("Tasks") .add(taskData) .addOnSuccessListener {
Dans cet exemple, un nouveau document sera créé et Firestore générera un identifiant pour celui-ci. Pour définir votre propre identifiant, procédez comme suit
val taskData = HashMap<String, Any>() taskData["title"] = task.title taskData["created"] = Timestamp(task.created.time / 1000, 0) remoteDB.collection("Tasks") .document("New task") .set(taskData) .addOnSuccessListener {
Dans ce cas, s'il n'y a pas de document dont l'ID est égal à Nouvelle tâche , il sera créé et s'il y en a, les champs spécifiés seront mis à jour.
Une autre option pour créer / mettre à jour un document
remoteDB.collection("Tasks") .document("New task") .set(mapToRemoteTask(task)) .addOnSuccessListener {
Abonnez-vous aux modifications
Firestore vous permet de vous abonner aux modifications des données. Vous pouvez vous abonner aux modifications de la collection ainsi qu'aux modifications d'un document spécifique
remoteDB.collection("Tasks") .addSnapshotListener { querySnapshot, error ->
querySnapshot.documents - contient une liste mise à jour de tous les documents
querySnapshot.documentChanges - contient une liste de modifications. Chaque objet contient un document et un type de modification modifiés. 3 types de modifications sont possibles
AJOUTÉ - document ajouté,
MODIFIÉ - le document a été modifié,
SUPPRIMÉ - document supprimé
Chargement de grandes quantités de données
La base de données en temps réel fournit un mécanisme moins pratique pour télécharger de grandes quantités de données, qui consiste à éditer manuellement le fichier json et à le télécharger. Hors de la boîte, Firestore ne fournit rien de tel. Il était très gênant d'ajouter de nouveaux documents jusqu'à ce que je trouve un moyen de charger facilement une grande quantité d'informations. Pour que vous n'ayez pas de problèmes comme le mien, ci-dessous, je vais joindre des instructions sur la façon de télécharger rapidement et facilement une grande quantité de données. L'instruction a été trouvée sur Internet.
- Installez Node.js et npm
- Installez le package firebase-admin en exécutant la commande
npm install firebase-admin --save
- Générez un fichier json avec des données de collecte. Un exemple peut être trouvé dans le fichier Tasks.json.
- Pour télécharger, nous avons besoin d'une clé d'accès. Comment l'obtenir est bien décrit dans cet article.
- Dans le fichier export.js enregistrez vos données
require ('./ firestore_key.json') - fichier avec clé d'accès. J'étais dans un dossier avec un script
<YOU_DATABASE> - le nom de votre base de magasin de pompiers
"./json/Tasks.json" - le chemin d'accès au fichier dans lequel les données
['créé'] - liste des noms de champs de type Horodatage - Exécuter le script
node export.js
Le script utilise les développements de dalenguyen
Conclusion
J'ai utilisé Cloud Firestore dans l'un de mes projets et je n'ai rencontré aucun problème sérieux. L'une de mes collections contient environ 15 000 documents et les requêtes à ce sujet sont assez rapides et cela sans l'utilisation d'index. En utilisant Cloud Firestore conjointement avec Room and Remote Config, vous pouvez réduire considérablement le nombre d'appels à la base de données et ne pas dépasser les limites gratuites. À un tarif gratuit par jour, vous pouvez lire 50 000 documents, enregistrer 20 000 et supprimer 20 000.
Performances des applications