Best practice per il caricamento collettivo dei dati
Questa pagina descrive le best practice per il caricamento collettivo dei dati in Firestore con compatibilità MongoDB con strumenti comemongoimport
.
Firestore è un sistema altamente distribuito che offre scalabilità automatica per soddisfare le esigenze della tua attività. Firestore divide e combina dinamicamente i dati in base al carico ricevuto dal sistema.
La suddivisione basata sul carico avviene automaticamente senza alcuna preconfigurazione richiesta. Il sistema di suddivisione basato sul carico di Firestore presenta alcune caratteristiche importanti e uniche rispetto ad altri database di documenti che è importante tenere a mente durante la modellazione dei dati.
La natura distribuita di Firestore può richiedere la modifica di alcune scelte di progettazione, in particolare per i carichi di lavoro ottimizzati per i database in cui la replica primaria è il collo di bottiglia per la velocità effettiva di scrittura.
Best practice
I carichi di lavoro che elaborano grandi quantità di dati in un client a thread singolo possono creare un collo di bottiglia. I client potrebbero essere in grado di utilizzare il single threading per il caricamento collettivo dei dati, poiché la velocità effettiva del client e del server sono abbinate in modo simile. Un database Firestore può gestire un parallelismo significativamente maggiore, ma ciò richiede che tu configuri i client per inviare le richieste in parallelo.
mongoimport
Quando utilizzi lo strumento mongoimport
, le richieste vengono effettuate in sequenza per impostazione predefinita.
Per migliorare il tempo di caricamento in Firestore,
imposta il numero di worker con il flag --numInsertionWorkers
.
L'impostazione corretta potrebbe richiedere una messa a punto in base
alle dimensioni del cliente, ma in genere consigliamo di iniziare con almeno 32
.
programmazione asincrona
Quando sviluppi il tuo software utilizzando API compatibili con MongoDB, puoi migliorare il parallelismo nei seguenti modi:
- Framework asincroni: l'utilizzo di framework asincroni consente di elaborare e rispondere alle richieste in parallelo. Non è necessario sviluppare pool o code complessi quando effettui chiamate al tuo database. Ogni flusso di richieste può utilizzare connessioni indipendenti ed effettuare chiamate al database in parallelo.
- Utilizza offerte di calcolo parallelizzate: utilizzando servizi come Cloud Run, il tuo sistema può scalare il numero di worker di calcolo necessari per elaborare i dati.
Errori temporanei
Quando lavori con un sistema distribuito di grandi dimensioni come Firestore, potresti riscontrare errori temporanei come interruzioni di rete o conflitti su un documento.
Quando carichi in blocco grandi quantità di informazioni, è importante mantenere una strategia di ripetizione per le scritture non riuscite senza interrompere l'operazione di caricamento in blocco più grande.