Firestore con datos de más de 1Mb?

0

Pregunta

Yo estoy usando la base avanzada para almacenar artículos escritos por los usuarios, y estos artículos podrían ser más de 1 MiB de contenido.

Sé que Firestore limita el tamaño del documento a 1 MiB y estoy tratando de encontrar una manera de trabajar alrededor de eso.

Vi que el post en Stackoverflow pero no se aplica aquí porque es relativa a una lista de los artículos que son demasiado grandes.

Mi idea inicial era para almacenar el contenido en el Almacenamiento en la Nube en lugar de ello, y, cuando se carga el artículo documento, si el contenido se inicia con el gs://, que me iba a cargar el documento desde el almacenamiento, y la puso a "contenido" directamente, pero me temo que esto va a ser demasiado lento.

¿Cómo puedo implementar una forma de almacenar más de 1 MiB contenido en Firestore?

2

Mejor respuesta

2

Mi regla de oro es usar Firestore sólo para la estructuración de los datos que desea consultar en un caso de uso como el tuyo.

Los otros datos que me había hecho poner en la Nube de Almacenamiento de archivos que luego asociar con el documento (por ejemplo, utilizando el mismo ID, o por el almacenamiento de la ruta en un campo).

Si usted necesita para escuchar en tiempo real las actualizaciones de los datos en el archivo de Almacenamiento, la actualización de un campo en el documento (por ejemplo, lastUpdated) después de escribir una actualización de Almacenamiento - para notificar a los oyentes que necesitan para volver a cargar los datos de Almacenamiento también.


La única alternativa que yo he utilizado es el desbordamiento de los datos de los documentos con un ID secuencial sufijo (por lo que sólo la adición de -1, -2, etc para el documento de IDENTIFICACIÓN), pero eso fue sólo en los casos donde quiero consultar el documento Identificadores (en lugar de los campos de allí) y la necesidad de tener un tiempo real de escucha en el contenido de los documentos.

2021-11-23 18:09:12
1

Yo personalmente contestado a esa pregunta, y sí, se refiere a una lista de elementos. En tu caso, si un artículo contiene el texto así como imágenes, de hecho voy a agregar todas las imágenes a la base avanzada de Almacenamiento y el texto a Firestore, y vincularlos como ya @FrankvanPuffelen menciona en su respuesta. Además de que, como @ToddKerpelman los estados en la siguiente respuesta:

No agregar imágenes a Firestore. Almacenamiento en la nube se supone que es para eso.

Pensando en su caso, para obtener "más" que la limitación, no hay otro (similar) enfoque. En lugar de tratar de guardar todos los datos en un único documento, me gustaría añadir que a varios documentos como este:

Firestore-root
  |
  --- articles (collection)
        |
        --- $articleId (document)
             |
             --- articleParts (collection)
                    |
                    --- $firestoreRandomId
                    |      |
                    |      --- text: "Text of the article"
                    |      |
                    |      --- part: 1
                    |      |
                    |      --- articleId: $articleId
                    |
                    --- $firestoreRandomId
                           |
                           --- text: "Remaining text of the article"
                           |
                           --- part: 2
                           |
                           --- articleId: $articleId

Y como se puede ver, cada artículo se compone de varias partes. Para obtener todos los artículos de la base de datos tiene que crear un collectionGroup de la consulta, que se parecen a esto:

db.collectionGroup("articleParts");

Para leer cada artículo de forma individual, simplemente concatenar todas las piezas de cada artículo de acuerdo a la articleId y el número de pieza.

Por otro lado, si sólo quieres leer un solo artículo, crear una referencia que apunta a:

db.collection("allArticles").document($articleId).collection("articleParts");

Y hacer la misma operación que el anterior.

O usted puede utilizar:

db.collectionGroup("articleParts").whereEqualTo("articleId", someId);

Pero aquí, no te olvides de crear un índice.

De esta manera, usted puede crear tantos documentos como desee para un solo artículo. Para Android, he creado una biblioteca llamada FirestoreDocument-Android, que le ayudará a comprobar siempre el tamaño de un documento en contra de la máxima de 1 MiB (1.048.576 bytes) de la cuota. Así que, si el artículo es más grande que el máximo de prescripción, dividir el artículo y añadir el contenido en varios documentos.

2021-11-24 08:56:17

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................