Importazione di set di dati di grandi dimensioni in un database sul Web

3

Devo importare 100.000 prodotti da un database all'altro utilizzando i risultati di un'API RESTful. Ma posso farlo solo da un giorno all'altro. Quindi se non riesco a svolgere il lavoro in un giorno, ho bisogno di diffonderlo per più notti.

Ho un endpoint che restituirà un elenco di ID per un determinato set di criteri. Ho un endpoint che restituirà le informazioni complete sul prodotto per uno o più prodotti (posso specificare n numero di id per restituire gli oggetti completi di).

Non voglio ottenere 100.000 ID e iniziare semplicemente l'iterazione con un ciclo for. Sembra che potrebbe rompersi inaspettatamente e quindi non saprei dove ho finito. Ho bisogno di un modo per romperne una parte e salvare i miei progressi. Qualcuno ha qualche esperienza con questo genere di cose?

Il software che sto utilizzando: Flask , SQLAlchemy e Huey (per la pianificazione).

    
posta Colton Allen 20.05.2016 - 01:45
fonte

1 risposta

1

Se importi le voci una per una, dovresti essere in grado di sapere quando l'importazione è stata terminata semplicemente guardando il database di destinazione (immagino che ci sia un identificativo univoco nel database di destinazione che ti rende possibile collegare ogni prodotto lì a un prodotto nel database di origine, giusto?)

Se fai un inserto di massa, puoi dividere 100.000 prodotti in pagine. Quante pagine dipenderanno dall'impatto sulle prestazioni e quanti prodotti sei pronto a perdere se l'importazione della pagina viene interrotta. Una pagina contenente pochi prodotti probabilmente porterà a rallentare le importazioni. Una pagina che contiene troppi prodotti ridurrà la tua visibilità sullo stato di avanzamento dell'importazione.

Assicurati di non utilizzare un'origine dati esterna, come un file di testo, per registrare l'avanzamento. Un approccio più sicuro è pensare al problema più come se fosse un'operazione incrementale. In un dato momento, ci sono 100.000 prodotti nel database di origine e 23.600 prodotti nel database di destinazione: ciò significa che è necessario acquisire la mappatura di ogni 23.600 prodotti nel database di origine e importare solo i prodotti che non sono stati ancora importati .

    
risposta data 20.05.2016 - 11:32
fonte

Leggi altre domande sui tag