2011-11-29 9 views
18

Ho bisogno di compilare un sistema di analisi (reporting, creazione di grafici &) nella mia applicazione Django. In un mondo ideale potrei semplicemente interrogare il mio DB Postgres e ottenere i dati che voglio ma quando la quantità di dati nel DB passa attraverso il tetto, colpirò i colli di bottiglia delle prestazioni e altri problemi come l'inferno dell'indice.Data mining in un'applicazione Django/Postgres

mi chiedo se mi si potrebbe puntare in una direzione giusta per implementare questo:

  • È questo un buon piano d'azione per usare un NoSQL DB come (CouchDB, MongoDB, Redis) e interrogare i dati da quella?
  • Poiché Postgres e Django non supportano OLAP/MDX, dovrei seguire uno schema a stella in un altro database e interrogarlo?

Sto cercando di evitare due cose:

  • Non voglio interrogare la mia attuale DB per analisi, come si potrebbe prendere un enorme calo di prestazioni.
  • Mi piacerebbe mantenere la mia analisi il più aggiornata possibile, ad esempio, vorrei aggiornare in modo incrementale il mio data warehouse per avere i dati più recenti. Ogni volta, c'è un'operazione CRUD sul mio DB transazionale, vorrei aggiornare il data warehouse.

Questo è l'ennesimo scenario in cui non ho lavorato e sto cercando di capire il modo più rapido e migliore per realizzare.

Spero di essere stato abbastanza prolisso. Altrimenti, avrei spiegato volentieri di più.

Grazie a tutti


Dopo aver scavato intorno al web e utilizzando le conoscenze che ho, sono venuto per questa soluzione:

Utilizzare i Postgres per memorizzare i dati relazionali. In ogni operazione CRUD, chiamare il codice di analisi per eseguire i calcoli sui dati e archiviare i dati in un DB NoSQL come Redis/CouchDB.

Guardando questo buon confronto dei DB NoSQL (http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis), penso che Redis o CouchDB si adattino perfettamente. Destinato per l'analisi.

È possibile memorizzare Analytics calcolato in Redis/CouchDB e aggiornarli in modo incrementale quando i dati di origine cambiano.

Questa è una buona soluzione?

+0

hi Mridang, sono molto interessato a questo thread. Seguo la tua domanda da questo è stato pubblicato. Forse il database di palo olap è una soluzione, ma non l'ho ancora testato. Sono pubblicato per notizie sul tuo progetto. C'è un modo per inviarti la mia e-mail in privato? – danihp

risposta

10

Si potrebbe prendere in considerazione Cube. Non è un'app di Django, ma ha molte belle funzionalità integrate e Django può comunicare facilmente. Inoltre, è adorabile.

Cube screenshot

si potrebbe avere si Django app appena saltare fuori eventi in MongoDB quando la si verificano. Questa separazione dei sistemi impedirebbe ulteriore stress alla tua app Django.

+0

+1 Bello! Adoro inciampare in cose del genere su SO. –

2

Scusa Mridang Agarwalla, alcune volte la tua domanda torna in mente ...

Ho pensato che il modo di mantenere sincronizzati entrambi i database, OLAP e OLTP, aggiornati con basso impatto in OLTP.

Nel 2002 ho impiegato con successo questa tecnica per un problema simile. Funziona come segue:

  1. Si scrive un trigger per ogni tabella dei fatti. Quando i dati dei fatti vengono modificati, il trigger inserisce una riga in una tabella che riflette questo evento (idEvent + update | delete | insert + foreign key to fact table).
  2. Un daemon a bassa priorità esegue un ciclo infinito, per ogni iterazione del ciclo si "pop" 10 eventi dalla tabella e si aggiorna il database OLAP con queste nuove informazioni.

È possibile ottimizzare il comportamento del daemon, ad esempio, se la tabella non dispone di nuovi eventi daemon può dormire per 15 secondi.

Nel mio escenario solo le tabelle dei fatti hanno trigger. Se i dati di riferimento della tabella dei fatti non sono presenti nel database OLAP, ho creato i dati in questo momento (OLTP e OLAP hanno uno schema diverso).

Se si analizza il database è possibile trovare centinaia di tabelle ma solo poche tabelle sono tabelle di fatti reali.

Bene, ho capito che questa è solo una risposta parziale della risposta. La seconda parte della domanda parla di uno strumento elettrico per analizzare i dati. Non posso suggerirti alcun prodotto open source (perché non ho esperienza con gli strumenti di analisi open source). Ho lavorato con Microsoft Analysis Services + software Tableau in frontend. Questa è una soluzione molto bella, ma non so se corrisponde alla tua filosofia. Per il datamining hai KNIME (Konstanz Information Miner) che è una piattaforma di integrazione, elaborazione, analisi ed esplorazione dei dati open source completa e user-friendly (ma hai bisogno di un'attività ETL precedente).

Per favore, inviatemi notizie sul tuo progetto, sono molto interessato. Ho una soluzione per la partecipazione degli studenti django e voglio aggiungere funzionalità di analisi.

Problemi correlati