Firestore con dati superiori a 1Mb?

0

Domanda

Sto usando Firebase per negozio di articoli scritti dai miei utenti, e questi articoli possono essere più di 1 mb di contenuti.

So che Firestore limiti per le dimensioni del documento 1 MiB e sto cercando di capire un modo per aggirare questo.

Ho visto che il post su Stackoverflow , ma non si applica qui perché è legato a un elenco di elementi troppo grandi.

La mia idea iniziale era di memorizzare i contenuti in Cloud, invece, e, durante il caricamento dell'articolo documento, se il contenuto inizia con gs://, vorrei caricare il documento dall'archivio, e impostarlo su "contenuto" direttamente, ma ho paura che questo sarà troppo lento.

Come posso implementare un modo per memorizzare più di 1 MiB contenuto in Firestore?

2

Migliore risposta

2

La mia regola è quella di utilizzare Firestore solo per i dati strutturati che si desidera eseguire la query in un caso come il vostro.

Altri dati vorrei infatti mettere in Cloud Storage di file che poi associare al documento (ad esempio, utilizzando lo stesso ID, o per memorizzare il percorso in un campo).

Se avete bisogno di ascoltare gli aggiornamenti in tempo reale ai dati contenuti nel file di Archiviazione, aggiornamento di un campo nel documento (ad es. lastUpdated) dopo scrivere un aggiornamento di Memorizzazione - per informare gli ascoltatori che hanno bisogno di ricaricare i dati di Archiviazione.


L'unica alternativa che ho usato è quello di overflow di dati per i documenti con un ID sequenziale suffisso (quindi, solo l'aggiunta di -1, -2ecc per l'ID del documento), ma che era solo nei casi in cui si desidera eseguire una query Id documento (invece di campi di lì) e la necessità di avere in tempo reale l'ascoltatore sul contenuto dei documenti.

2021-11-23 18:09:12
1

Personalmente ho risposto a quella domanda, e sì, si riferisce a un elenco di elementi. Nel tuo caso, se un articolo contiene testo, immagini, io infatti aggiungere le immagini Firebase di Archiviazione e il testo Firestore, e collegarli come già @FrankvanPuffelen citato nella sua risposta. Oltre che, come @ToddKerpelman stati la seguente risposta:

Non aggiungere immagini a Firestore. Il Cloud Storage è fatta per questo.

Pensando al caso d'uso, per ottenere un "oltre" che la limitazione, c'è un altro (simile) approccio. Invece di cercare di salvare tutti i dati in un unico documento, mi piacerebbe aggiungere a più documenti come questo:

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

E come si può vedere, ogni articolo è composto da diverse parti. Per ottenere tutti gli articoli dal database, è necessario creare un collectionGroup query, che assomigliano a questo:

db.collectionGroup("articleParts");

Per leggere ogni articolo singolarmente, basta concatenare tutte le parti per ogni articolo secondo il articleId e il numero di parte.

D'altra parte, se si desidera solo per leggere un solo articolo, è possibile creare un riferimento che punta a:

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

E fare la stessa operazione precedente.

Oppure è possibile utilizzare:

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

Ma qui, non dimenticate di creare un indice.

In questo modo, è possibile creare tutti i documenti che vuoi per un singolo articolo. Per Android, ho creato una libreria che si chiama FirestoreDocument-Android, che vi aiuterà a verificare sempre le dimensioni di un documento contro il massimo di 1 MiB (1.048.576 byte) di quota. Quindi, se l'articolo è maggiore del limite massimo, dividere l'articolo e aggiungere il contenuto in più documenti.

2021-11-24 08:56:17

In altre lingue

Questa pagina è in altre lingue

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