Abbiamo una webapp che si affiderà a CSV di grandi dimensioni da fornitori esterni ogni mese. Quando dico grande, stiamo guardando circa 6 GB in modo da qualche milione di righe. Probabilmente, 2-5 CSV. Questa webapp consentirà inoltre agli utenti di inserire, correggere e segnalare / cancellare i dati. Il numero di colonne e la pulizia dei dati non sono garantiti dal punto di vista del fornitore. Inoltre, i dati potrebbero sovrapporsi (non possiamo mostrare dati sovrapposti nella nostra webapp).
Ho pensato a diversi modi per avvicinarti a questo:
- Carica questi CSV in una tabella per CSV che corrisponde alle intestazioni di colonna e quindi creare "viste" di ciò di cui abbiamo bisogno.
Questa soluzione sembra essere la più facile da implementare e gestire perché possiamo importare il CSV ogni mese nelle tabelle CSV e le cose funzionano. Sembra il meno efficiente e avrebbe i maggiori problemi con l'integrità dei dati. Inoltre, il punto di vista sarebbe Hella Complex.
- Carica questi CSV nel nostro schema ogni mese e crea la nostra webapp al di fuori del nostro schema.
Questa soluzione sembra essere più difficile da implementare e mantenere perché quando l'importazione arriva ogni mese, dovrai eseguire l'importazione e questo potrebbe rompere i tuoi dati esistenti. Sarebbe il meglio che la tua webapp sia il tuo schema e puoi semplicemente "mappare" su di essa. Inoltre, i CSV conterranno dati che invalideranno i dati più vecchi, quindi sarà difficile aggiornarli. Se dovessi seguire questa strada, faresti l'importazione in Java / C # o SQL? Sembra che Java / C # abbia senso in modo che possiamo elaborare le nostre regole aziendali ma è più lento ...
- Carica CSV in una tabella per CSV ed esegui solo query SQL per la webapp per creare modelli che soddisfino ciò di cui ha bisogno la webapp.
Questa soluzione ha lo stesso problema della soluzione di visualizzazione, tranne per il fatto che le tue query SQL sono di tipo Hella e tu hai il problema di gestirle. Se il fornitore esterno modifica lo schema, potrebbe interrompere le query SQL, anche se dovresti cambiare semplicemente il CSV prima di importarlo in modo che corrisponda all'importatore.
Quindi abbiamo queste domande:
-
Se un utente aggiorna una riga popolata dal CSV, diciamo che stiamo andando con il n. 2, che è quello a cui mi sto appoggiando, in che modo possiamo mantenere quell'aggiornamento quando arrivano i CSV?
- In che modo possiamo eseguire il rollback di un'importazione CSV? E se pensassimo che l'importazione CSV è valida per 1 mese e ora abbiamo un sacco di dati generati dagli utenti per quel CSV?
Sembra che non ci sia una soluzione banale e in entrambi i casi devo "prenderlo". Mi sto perdendo qualcosa? Qualcuno può trovare o pensare a una soluzione banale?