Firestore avec des données supérieur à 1 mo?

0

La question

Je suis l'aide de Firebase pour stocker des articles écrits par mes utilisateurs, et ces articles peuvent être de plus de 1 mo de contenu.

Je sais que Firestore les limites de la taille du document 1 MiB et je vais essayer de trouver un moyen de contourner cela.

J'ai vu que le post sur Stackoverflow mais il ne s'applique pas ici, car il est lié à une liste d'éléments trop gros.

Mon idée initiale était de stocker le contenu dans le Cloud de Stockage au lieu de cela, et, lors du chargement du document article, si le contenu commence avec gs://, je voudrais charger le document de l'espace de stockage, et le "contenu" directement, mais j'ai peur que ce soit trop lent.

Comment puis-je mettre en place un moyen de stocker plus de 1 MiB contenu dans Firestore?

2

La meilleure réponse

2

Ma règle d'or est d'utiliser Firestore uniquement pour les données structurées que vous souhaitez interroger dans un cas d'utilisation tels que le vôtre.

Les autres données que j'avais en effet mis en Stockage dans le Cloud des fichiers, puis l'associer au document (par exemple, en utilisant le même IDENTIFIANT, ou par stocker le chemin d'accès dans un champ).

Si vous avez besoin d'écouter en temps réel les mises à jour les données dans le fichier de Stockage, de mise à jour d'un champ dans le document (par ex. lastUpdated) après l'écriture d'une mise à jour de Stockage - pour informer les auditeurs qu'ils ont besoin de recharger les données de Stockage.


La seule alternative que j'ai utilisé est un débordement de données de documents avec un ID séquentiel de suffixe (donc, juste l'ajout d' -1, -2, etc ID de document), mais c'était uniquement dans le cas où je veux interroger l'Id de document (au lieu de champs en y) et ont besoin d'avoir un temps réel d'écoute sur le contenu des documents.

2021-11-23 18:09:12
1

Personnellement, j'ai répondu à cette question, et oui, il se réfère à une liste d'éléments. Dans votre cas, si un article contient du texte ainsi que des photos, je vais en effet ajouter toutes les images de la Firebase de Stockage et le texte de Firestore, et le lien entre eux comme déjà @FrankvanPuffelen mentionné dans sa réponse. En plus, comme @ToddKerpelman unis dans la réponse suivante:

Ne pas ajouter des images à Firestore. Stockage dans le Cloud est conçu pour cela.

Penser à votre cas d'utilisation, afin d'obtenir "plus" de cette limitation, il y a une autre (de la même approche. Au lieu d'essayer de sauvegarder toutes les données dans un document unique, j'aimerais ajouter plusieurs documents comme ceci:

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

Et comme vous pouvez le voir, chaque article se compose de plusieurs parties. Pour obtenir tous les articles de la base de données, vous devez créer un collectionGroup requête, qui ressemblent à ceci:

db.collectionGroup("articleParts");

À lire chaque article individuellement, il suffit de concaténer toutes les pièces de chaque article en fonction de la articleId et le numéro de pièce.

De l'autre côté, si vous voulez lire un article unique, créer une référence qui pointe vers:

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

Et faire la même opération que ci-dessus.

Ou vous pouvez utiliser:

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

Mais ici, ne pas oublier de créer un index.

De cette façon, vous pouvez créer autant de documents que vous le souhaitez pour un seul article. Pour Android, j'ai créé une bibliothèque appelée FirestoreDocument-Android, qui vous aidera à toujours vérifier la taille d'un document par rapport à la concurrence de 1 MiB (1 048 576 octets) quota. Donc, si l'article est plus grand que la limitation maximum, split, l'article et ajouter le contenu de plusieurs documents.

2021-11-24 08:56:17

Dans d'autres langues

Cette page est dans d'autres langues

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