No hace mucho tiempo, Google lanzó Cloud Firestore. Cloud Firestore es una base de datos NoSQL basada en la nube que Google posiciona como un reemplazo para la Base de datos en tiempo real. En este artículo quiero decir cómo comenzar a usarlo.
Las posibilidades
Cloud Firestore le permite almacenar datos en un servidor remoto, acceder fácilmente a ellos y monitorear los cambios en tiempo real. La documentación tiene una excelente comparación de Cloud Firestore y Realtime Database.
Crear y conectarse a un proyecto
En la consola de Firebase, seleccione Base de datos y haga clic en Crear base de datos. A continuación, seleccione la configuración de acceso. Para familiarizarnos, un modo de prueba será suficiente para nosotros, pero en la producción es mejor abordar este problema con más seriedad. Lea más sobre los modos de acceso aquí .

Para configurar el proyecto, realice los siguientes pasos:
- Agregue Firebase al proyecto de acuerdo con las instrucciones de aquí.
- Agregar dependencia a app / build.gradle
implementation 'com.google.firebase:firebase-firestore:18.1.0'
Ahora todo está listo.
Para familiarizarme con las técnicas básicas de trabajar con Cloud Firestore, escribí una aplicación simple. Para trabajar, debe crear un proyecto en la consola de Firebase y agregar el archivo google-services.json al proyecto en Android Studio.
Estructura de almacenamiento de datos
Firestore utiliza colecciones y documentos para almacenar datos. Un documento es un registro que contiene cualquier campo. Los documentos se combinan en colecciones. Un documento también puede contener colecciones anidadas, pero esto no es compatible con Android. Si dibujamos una analogía con la base de datos SQL, la colección es una tabla y el documento es una entrada en esta tabla. Una colección puede contener documentos con un conjunto diferente de campos.
Recepción y registro de datos.
Para obtener todos los documentos de una colección, el siguiente código es suficiente
remoteDB.collection(“Tasks”) .get() .addOnSuccessListener { querySnapshot ->
Aquí solicitamos todos los documentos de la colección Tareas .
La biblioteca le permite generar consultas con parámetros. El siguiente código muestra cómo obtener documentos de la colección por condición
remoteDB.collection(“Tasks”) .whereEqualTo("title", "Task1") .get() .addOnSuccessListener { querySnapshot ->
Aquí solicitamos todos los documentos de la colección Tareas para los cuales el campo de título corresponde al valor de la Tarea1 .
Al recibir los documentos, se pueden convertir inmediatamente a nuestras clases de datos
remoteDB.collection(“Tasks”) .get() .addOnSuccessListener { querySnapshot ->
Para escribir, debe crear un Hashmap con datos (donde el nombre del campo actúa como la clave y el valor de este campo como el valor) y transferirlo a la biblioteca. El siguiente código demuestra esto
val taskData = HashMap<String, Any>() taskData["title"] = task.title taskData["created"] = Timestamp(task.created.time / 1000, 0) remoteDB.collection("Tasks") .add(taskData) .addOnSuccessListener {
En este ejemplo, se creará un nuevo documento y Firestore generará una identificación para él. Para configurar su propia identificación, haga lo siguiente
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 {
En este caso, si no hay ningún documento con una identificación igual a Nueva tarea , se creará y, si lo hay, se actualizarán los campos especificados.
Otra opción para crear / actualizar un documento
remoteDB.collection("Tasks") .document("New task") .set(mapToRemoteTask(task)) .addOnSuccessListener {
Suscríbase a los cambios
Firestore le permite suscribirse a los cambios de datos. Puede suscribirse a cambios en la colección, así como a cambios en un documento específico
remoteDB.collection("Tasks") .addSnapshotListener { querySnapshot, error ->
querySnapshot.documents: contiene una lista actualizada de todos los documentos
querySnapshot.documentChanges: contiene una lista de cambios. Cada objeto contiene un documento modificado y un tipo de cambio. Son posibles 3 tipos de cambios
AGREGADO - documento agregado,
MODIFICADO: el documento ha sido modificado,
ELIMINADO - documento eliminado
Cargando grandes cantidades de datos
Realtime Database proporciona un mecanismo menos conveniente para descargar grandes cantidades de datos, que consiste en editar manualmente el archivo json y descargarlo. Fuera de la caja, Firestore no proporciona nada de eso. Fue muy incómodo agregar nuevos documentos hasta que encontré una manera de cargar fácilmente una gran cantidad de información. Para que no tenga problemas como el mío, a continuación adjuntaré instrucciones sobre cómo descargar rápida y fácilmente una gran cantidad de datos. La instrucción fue encontrada en Internet.
- Instale Node.js y npm
- Instale el paquete firebase-admin ejecutando el comando
npm install firebase-admin --save
- Generar archivo json con datos de recopilación. Se puede encontrar un ejemplo en el archivo Tasks.json.
- Para descargar, necesitamos una clave de acceso. Cómo obtenerlo está bien descrito en este artículo.
- En el archivo export.js anote sus datos
require ('./ firestore_key.json'): archivo con clave de acceso. Estaba en una carpeta con un script
<YOU_DATABASE>: el nombre de su base de almacén de incendios
"./json/Tasks.json": la ruta al archivo en el que se encuentran los datos
['creado'] - lista de nombres de campo con tipo Marca de tiempo - Ejecutar script
node export.js
El guión utiliza los desarrollos de dalenguyen
Conclusión
Utilicé Cloud Firestore en uno de mis proyectos y no tuve ningún problema grave. Una de mis colecciones contiene alrededor de 15,000 documentos y las consultas sobre ella son bastante rápidas y esto es sin el uso de índices. Usando Cloud Firestore junto con Room y Remote Config, puede reducir significativamente el número de llamadas a la base de datos y no ir más allá de los límites libres. Con una tarifa gratuita por día, puede leer 50,000 documentos, registrar 20,000 y eliminar 20,000.
Rendimiento de la aplicación