Sono impressionato dalla velocità di esecuzione delle trasformazioni, caricamento dei dati e facilità d'uso di Pandas
e voglio sfruttare tutte queste belle proprietà (tra le altre) per modellare alcuni insiemi di dati di grandi dimensioni (~ 100-200k righe, < 20 colonne). L'obiettivo è quello di lavorare con i dati su alcuni nodi di calcolo, ma anche di fornire una vista dei set di dati in un browser tramite Flask
.Pandas come memoria dati veloce per l'applicazione Flask
Attualmente sto utilizzando un database Postgres per archiviare i dati, ma l'importazione (proveniente dai file CSV) dei dati è lenta, noiosa e soggetta a errori e il recupero dei dati dal database e l'elaborazione non è molto Più facile. I dati non verranno mai modificati una volta importati (nessuna operazione CRUD), quindi ho pensato che fosse ideale per memorizzarli come diversi panda DataFrame
(memorizzati nel formato hdf5 e caricati tramite pytables).
La domanda è:
(1) Si tratta di una buona idea e quali sono le cose a cui prestare attenzione? (Ad esempio, non mi aspetto che i problemi di concorrenza come DataFrame
s siano (dovrebbero?) Essere apolidi e immutabili (curati dal lato dell'applicazione)). Per quale altro motivo bisogna essere sorvegliati?
(2) Come farei per mettere in cache i dati una volta che è stato caricato dal file hdf5 in un DataFrame
, quindi non è necessario caricarlo per ogni richiesta client (almeno il datafram più recente/frequente). Flask
(o werkzeug
) ha una classe SimpleCaching
, ma, internamente, raccoglie i dati e despassa i dati memorizzati nella cache all'accesso. Mi chiedo se sia necessario nel mio caso specifico (supponendo che l'oggetto memorizzato nella cache sia immutabile). Inoltre, è un metodo di caching così semplice da utilizzare quando il sistema viene distribuito con Gunicorn (è possibile avere dati statici (la cache) e richieste simultanee (processo differente?) Accedere alla stessa cache?).
Mi rendo conto che queste sono molte domande, ma prima di investire più tempo e costruire una dimostrazione di concetto, ho pensato di ottenere un feedback qui. Ogni pensiero è benvenuto.
Interessante domanda. Mi occupo anche di grandi quantità di dati di sola lettura, e spesso mi chiedo un approccio snello e pragmatico per farlo. Posso chiederti quanti dischi hai a che fare? (Ho circa 300 milioni = circa 4 GB di dati) – Hexatonic
È nell'intervallo di decine di migliaia (forse 100.000 al massimo). Mi sono stabilito con hdf5 e sono molto contento di questa decisione e dell'uso di Pandas (sono passati quasi 2 anni fa). La cosa buona di hdf5 e pytables è che puoi eseguire query su disco senza caricare l'intero file. Con il mio piccolo set di dati, tuttavia, non ho mai avuto bisogno di farlo (nel tuo caso potrebbe essere diverso). Sono rimasto particolarmente colpito dalla velocità di I/o di leggere un file hdf5 rispetto a una query sql. – orange