Firestore cu date mai mare de 1Mb?

0

Problema

Eu sunt, folosind Baza de la magazinul de articole scrise de utilizatorii mei, și aceste articole ar putea fi mai mult de 1 MiB de conținut.

Știu că Firestore limitele dimensiunea documentului la 1 MiB și încerc să găsesc o cale pentru a rezolva asta.

Am văzut că postul pe Stackoverflow dar nu se aplica aici, pentru că este în legătură cu o listă de elemente care sunt prea mari.

Ideea mea inițială a fost de a stoca conținutul în Nor de Stocare în loc, și, atunci când încărcarea articolul document, în cazul în care conținutul începe cu gs://, mi-ar încărca documentul de stocare, și setați-l la "conținut" în mod direct, dar mă tem că acest lucru va fi prea lent.

Cum pot pune în aplicare o modalitate de a stoca mai mult de 1 MiB conținut în Firestore?

2

Cel mai bun răspuns

2

Regula de degetul mare este de a utiliza Firestore numai pentru date structurate care doriți să interogare într-un caz de utilizare, cum ar fi a ta.

Alte date mi-ar într-adevăr pus în Nor de Stocare de fișiere pe care le asocia cu documentul (de exemplu, folosind același ID, sau prin stocarea calea într-un domeniu).

Dacă aveți nevoie pentru a asculta în timp real actualizări de date în fișierul de Stocare, actualizare-un câmp în document (de exemplu, lastUpdated) după ce scrie o actualizare pentru Depozitare - să informeze ascultătorii care au nevoie pentru a reîncărca datele de la Stocare prea.


Singura alternativă pe care am folosit este de la preaplin de date pentru documente cu un act de IDENTITATE secvențială sufix (deci doar adăugând -1, -2, etc la documentul de IDENTITATE), dar asta a fost numai în cazurile în care vreau să interogare documentul de identitate (în loc de câmpuri într-acolo) și trebuie să aibă un timp real ascultător cu privire la conținutul documentelor.

2021-11-23 18:09:12
1

Eu personal am răspuns la întrebarea asta, și da, se referă la o listă de elemente. În cazul tău, dacă un articol conține text, precum și de imagini, voi adăuga, într-adevăr toate imaginile la Baza de Depozitare și textul să Firestore, și link-ul de ele ca deja @FrankvanPuffelen menționat în răspunsul său. În afară de asta, ca @ToddKerpelman membre în următorul răspuns:

Nu adăugați imagini pentru a Firestore. Nor de Stocare este destinat pentru asta.

Gândire despre cazul dumneavoastră de utilizare, pentru a obține "peste" această limitare, există un alt (similare) abordare. În loc de a încerca pentru a salva toate datele într-un singur document, aș adăuga la mai multe documente, cum ar fi aceasta:

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

Și după cum puteți vedea, fiecare articol este format din mai multe părți. Pentru a obține toate articolele din baza de date, trebuie să creați o collectionGroup de interogare, care arata ca aceasta:

db.collectionGroup("articleParts");

Pentru a citi fiecare articol individual, pur și simplu înlănțui toate părțile pentru fiecare articol potrivit articleId și numărul parte.

Pe de altă parte, dacă doriți doar pentru a citi un singur articol, de a crea o referință care indică:

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

Și de a face aceeași operațiune ca mai sus.

Sau puteți folosi:

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

Dar aici, nu uita, de asemenea, pentru a crea un index.

În acest fel, puteți crea cât mai multe documente, după cum doriți pentru un singur articol. Pentru Android, am creat o bibliotecă numită FirestoreDocument-Android, care vă va ajuta să verificați întotdeauna dimensiunea de un document împotriva maximă de 1 MiB (1,048,576 bytes) contingent. Deci, dacă articolul este mai mare decât limita maximă, split articol și adăugați conținutul în mai multe documente.

2021-11-24 08:56:17

În alte limbi

Această pagină este în alte limbi

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