Best practice per il caricamento collettivo dei dati
Caricamento collettivo dei dati in Firestore con compatibilità MongoDB con strumenti come mongoimport e mongorestore.
Firestore è un sistema altamente distribuito che offre la scalabilità automatica per soddisfare le esigenze della tua attività. 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 di Firestore presenta alcune caratteristiche importanti e uniche rispetto ad altri database di documenti, che è importante tenere presente durante la modellazione dei dati.
La natura distribuita di Firestore può richiedere la modifica di alcune scelte di progettazione, in particolare per i workload ottimizzati per i database in cui la replica primaria è il collo di bottiglia per la velocità effettiva di scrittura.
Best practice
I workload 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 thread singolo per il caricamento collettivo dei dati, poiché la velocità effettiva del client e del server sono simili. Un database 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 Firestore, imposta il numero di worker con il flag --numInsertionWorkers. L'impostazione corretta potrebbe richiedere l'ottimizzazione in base alle dimensioni del client.
mongorestore
Quando utilizzi lo strumento mongorestore, rimuovi il parametro retryWrites=false dalla stringa di connessione per migliorare la resilienza agli errori temporanei.
Per migliorare il tempo di caricamento in Firestore, puoi anche aumentare il numero di worker di inserimento per raccolta con il flag --numInsertionWorkersPerCollection e il numero di raccolte parallele con il flag --numParallelCollections. Le impostazioni corrette potrebbero richiedere l'ottimizzazione in base alle dimensioni del client.
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 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 per le scritture non riuscite senza che l'operazione di caricamento collettivo più grande non vada a buon fine.