Cloud Firestore + Android ist nur

Vor nicht allzu langer Zeit hat Google den Cloud Firestore gestartet. Cloud Firestore ist eine Cloud-basierte NoSQL-Datenbank, die Google als Ersatz für die Echtzeitdatenbank positioniert. In diesem Artikel möchte ich erklären, wie man es benutzt.


Die Möglichkeiten


Mit Cloud Firestore können Sie Daten auf einem Remote-Server speichern, einfach darauf zugreifen und Änderungen in Echtzeit überwachen. Die Dokumentation bietet einen hervorragenden Vergleich zwischen Cloud Firestore und Echtzeitdatenbank.


Erstellen und Verbinden mit einem Projekt


Wählen Sie in der Firebase-Konsole Datenbank aus und klicken Sie auf Datenbank erstellen. Wählen Sie als Nächstes die Zugriffseinstellungen aus. Zur Einarbeitung wird uns ein Testmodus ausreichen, aber es ist besser, dieses Problem ernsthafter anzugehen. Lesen Sie hier mehr über Zugriffsmodi.



Führen Sie die folgenden Schritte aus, um das Projekt zu konfigurieren:


  1. Fügen Sie dem Projekt Firebase gemäß den Anweisungen von hier hinzu.
  2. Fügen Sie Abhängigkeit zu app / build.gradle hinzu
    implementation 'com.google.firebase:firebase-firestore:18.1.0'

Jetzt ist alles fertig.


Um mich mit den grundlegenden Techniken der Arbeit mit Cloud Firestore vertraut zu machen, habe ich eine einfache Anwendung geschrieben . Um zu arbeiten, müssen Sie ein Projekt in der Firebase-Konsole erstellen und die Datei google-services.json zum Projekt in Android Studio hinzufügen.


Datenspeicherstruktur


Firestore verwendet Sammlungen und Dokumente zum Speichern von Daten. Ein Dokument ist ein Datensatz, der beliebige Felder enthält. Dokumente werden zu Sammlungen zusammengefasst. Ein Dokument kann auch verschachtelte Sammlungen enthalten, dies wird jedoch unter Android nicht unterstützt. Wenn wir eine Analogie zur SQL-Datenbank ziehen, ist die Sammlung eine Tabelle, und das Dokument ist ein Eintrag in dieser Tabelle. Eine Sammlung kann Dokumente mit einem anderen Satz von Feldern enthalten.


Daten empfangen und aufzeichnen


Um alle Dokumente einer Sammlung abzurufen, reicht der folgende Code aus


 remoteDB.collection(“Tasks”) .get() .addOnSuccessListener { querySnapshot -> //   .   querySnapshot.documents } .addOnFailureListener { exception -> //      } } 

Hier fordern wir alle Dokumente aus der Tasks- Sammlung an.


In der Bibliothek können Sie Abfragen mit Parametern generieren. Der folgende Code zeigt, wie Dokumente nach Bedingung aus der Sammlung abgerufen werden


 remoteDB.collection(“Tasks”) .whereEqualTo("title", "Task1") .get() .addOnSuccessListener { querySnapshot -> //   .   querySnapshot.documents } .addOnFailureListener { exception -> //      } } 

Hier fordern wir alle Dokumente aus der Tasks- Sammlung an, für die das Titelfeld dem Wert von Task1 entspricht .


Nach Erhalt der Dokumente können diese sofort in unsere Datenklassen konvertiert werden


 remoteDB.collection(“Tasks”) .get() .addOnSuccessListener { querySnapshot -> //   .   querySnapshot.documents val taskList: List<RemoteTask> = querySnapshot.toObjects(RemoteTask::class.java) } .addOnFailureListener { exception -> //      } } 

Zum Schreiben müssen Sie eine Hashmap mit Daten erstellen (wobei der Name des Felds als Schlüssel und der Wert dieses Felds als Wert fungiert) und in die Bibliothek übertragen. Der folgende Code demonstriert dies


 val taskData = HashMap<String, Any>() taskData["title"] = task.title taskData["created"] = Timestamp(task.created.time / 1000, 0) remoteDB.collection("Tasks") .add(taskData) .addOnSuccessListener { //   } .addOnFailureListener { //     } 

In diesem Beispiel wird ein neues Dokument erstellt und Firestore generiert eine ID dafür. Gehen Sie wie folgt vor, um Ihre eigene ID festzulegen


 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 { //   } .addOnFailureListener { //     } 

Wenn in diesem Fall kein Dokument mit der ID " Neue Aufgabe" vorhanden ist , wird es erstellt. Wenn dies der Fall ist, werden die angegebenen Felder aktualisiert.


Eine weitere Option zum Erstellen / Aktualisieren eines Dokuments


 remoteDB.collection("Tasks") .document("New task") .set(mapToRemoteTask(task)) .addOnSuccessListener { //   } .addOnFailureListener { //     } 

Änderungen abonnieren


Mit Firestore können Sie Datenänderungen abonnieren. Sie können Änderungen an der Sammlung sowie Änderungen an einem bestimmten Dokument abonnieren


 remoteDB.collection("Tasks") .addSnapshotListener { querySnapshot, error -> // querySnapshot -   // error -  } 

querySnapshot.documents - enthält eine aktualisierte Liste aller Dokumente
querySnapshot.documentChanges - enthält eine Liste der Änderungen. Jedes Objekt enthält ein geändertes Dokument und eine Art der Änderung. 3 Arten von Änderungen sind möglich
HINZUGEFÜGT - Dokument hinzugefügt,
GEÄNDERT - das Dokument wurde geändert,
ENTFERNT - Dokument gelöscht


Laden großer Datenmengen


Die Echtzeitdatenbank bietet einen weniger bequemen Mechanismus zum Herunterladen großer Datenmengen, der darin besteht, die JSON-Datei manuell zu bearbeiten und herunterzuladen. Firestore bietet sofort nichts dergleichen. Es war sehr unpraktisch, neue Dokumente hinzuzufügen, bis ich einen Weg gefunden hatte, eine große Menge an Informationen einfach zu laden. Damit Sie keine Probleme wie meine haben, werde ich unten Anweisungen anhängen, wie Sie schnell und einfach eine große Datenmenge herunterladen können. Die Anweisung wurde im Internet gefunden.


  1. Installieren Sie Node.js und npm
  2. Installieren Sie das firebase-admin-Paket, indem Sie den Befehl ausführen
    npm install firebase-admin --save
  3. Generieren Sie eine JSON-Datei mit Sammlungsdaten. Ein Beispiel finden Sie in der Datei Tasks.json.
  4. Zum Herunterladen benötigen wir einen Zugangsschlüssel. Wie man es bekommt, wird in diesem Artikel gut beschrieben .
  5. Tragen Sie in die Datei export.js Ihre Daten ein
    require ('./ firestore_key.json') - Datei mit Zugriffsschlüssel. Ich war in einem Ordner mit einem Skript
    <YOU_DATABASE> - Der Name Ihrer Firestore-Basis
    "./json/Tasks.json" - der Pfad zu der Datei, in der sich die Daten befinden
    ['created'] - Liste der Feldnamen vom Typ Timestamp
  6. Skript ausführen
    node export.js
    Das Skript verwendet die Entwicklungen von Dalenguyen

Fazit


Ich habe Cloud Firestore in einem meiner Projekte verwendet und hatte keine ernsthaften Probleme. Eine meiner Sammlungen enthält ungefähr 15.000 Dokumente und Abfragen sind ziemlich schnell und dies ohne die Verwendung von Indizes. Mit Cloud Firestore in Verbindung mit Room und Remote Config können Sie die Anzahl der Anrufe in die Datenbank erheblich reduzieren und die freien Grenzen nicht überschreiten. Bei einem kostenlosen Tarif pro Tag können Sie 50.000 Dokumente lesen, 20.000 aufzeichnen und 20.000 löschen.


Anwendungsleistung

Source: https://habr.com/ru/post/de447640/


All Articles