Questa pagina descrive le best practice per il caricamento collettivo dei dati in Cloud Firestore
con strumenti come mongoimport.
Cloud Firestore è un sistema altamente distribuito che offre la scalabilità automatica per soddisfare le esigenze della tua attività. Cloud Firestore suddivide 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 Cloud Firestore presenta alcune caratteristiche importanti e uniche rispetto ad altri database di documenti, che è importante tenere presenti durante la modellazione dei dati.
La natura distribuita di Cloud 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 principale è 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 un singolo thread per caricare collettivamente i dati, poiché la velocità effettiva del client e del server sono simili. Un database Cloud Firestore può gestire un parallelismo significativamente maggiore, ma ciò richiede la configurazione dei client per l'invio di richieste in parallelo.
mongoimport
Quando si utilizza lo strumento mongoimport, le richieste vengono effettuate in sequenza per impostazione predefinita.
Per migliorare il tempo di caricamento in Cloud Firestore,
imposta il numero di worker con il --numInsertionWorkers flag.
L'impostazione corretta potrebbe richiedere l'ottimizzazione in base alle dimensioni del client, ma in genere consigliamo di iniziare con almeno 32.
Programmazione asincrona
Quando sviluppi il tuo software utilizzando operazioni 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 si effettuano chiamate al database. Ogni flusso di richieste può utilizzare connessioni indipendenti ed effettuare chiamate al database in parallelo.
- Utilizza offerte di computing 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 Cloud Firestore, potresti riscontrare errori temporanei come interruzioni di rete o conflitti su un documento.
Quando carichi collettivamente grandi quantità di informazioni, è importante mantenere una strategia di ripetizione dei tentativi per le scritture non riuscite senza che l'operazione di caricamento collettivo più grande non vada a buon fine.