Framework di applicazioni Web e database consigliati per Enterprise, app "Big-Data"?

4

Ho un'applicazione web che ho sviluppato per un piccolo gruppo all'interno della mia azienda negli ultimi anni, utilizzando Pipeline Pilot (oltre a jQuery e Python scripting) per lo sviluppo web e il calcolo back-end, e Oracle 10g per il mio RDBMS. Gli utenti caricano i dati genomici sperimentali, che vengono analizzati in un database e resi disponibili per l'interrogazione, la trasformazione e il reporting.

I set di dati sperimentali sono grandi e hanno molti livelli di metadati. Un determinato record di dati sperimentali potrebbe avere una relazione di chiave esterna con una tabella che descrive il dosaggio di questo punto di dati. I test possono riguardare più geni, che possono avere più trascritti, che possono avere più mutazioni, che possono influenzare più vie di segnalazione, ecc. Gli utenti devono avvicinarsi a questi dati da qualsiasi punto in quei livelli nei metadati. Poiché tutti i set di dati per un determinato tipo di dati possono essere eseguiti su un miliardo di righe, ciò comporta alcune query dinamiche di grandi dimensioni difficili da prevedere.

Nuovi set di dati vengono aggiunti su base settimanale (~ 1 GB per set). I dati sperimentali non vengono mai aggiornati, ma i metadati associati possono essere aggiornati settimanalmente per alcuni record e annualmente per la maggior parte degli altri. Per ogni set di dati inserito dal sistema, verranno eseguiti da 10 a 100 selezioni e dati associati. Va bene se gli aggiornamenti e gli inserimenti sono lenti, a condizione che le query vengano eseguite rapidamente e siano quanto più aggiornate possibile.

L'applicazione continua a crescere in dimensioni e portata e sta già iniziando a funzionare più lentamente di quanto mi piaccia. Sono preoccupato per il fatto che abbiamo circa Pipeline Pilot troppo cresciuto, e forse Oracle (come unico database). Un database NoSQL o un sistema OLAP sarebbe appropriato qui? Quali framework di applicazioni web funzionano bene con sistemi come questo? Mi piacerebbe che la soluzione fosse qualcosa di scalabile, trasportabile e portabile X-years lungo la strada.

Ecco lo stato attuale dell'applicazione:

  • Server Web / elaborazione dati: Pipeline Pilot su Windows Server + IIS
  • Database: Oracle 10g, ~ 1 TB di dati, ~ 180 tabelle con più miliardi di tabelle di righe
  • Archiviazione di rete: Isilon, ~ 50 TB di dati grezzi con priorità bassa
posta woemler 02.04.2013 - 17:34
fonte

5 risposte

2

Poiché i dati sono per lo più immutabili, hai esaminato possibili denormalizzazioni? L'obiettivo sarebbe trovare valori che potrebbero essere sostanzialmente duplicati ma ridurre la complessità delle query.

Se le query di join regolari della catena sono collegate a pezzi di dati, è possibile creare una relazione di chiave esterna duplicata direttamente tra le due tabelle.

Se esiste un calcolo eseguito da più query, eseguirlo una volta e salvare il risultato nella tabella appropriata. Ad esempio, alcune proprietà dei test che vengono calcolate quando necessario possono essere calcolate quando inserite e aggiunte la tabella di analisi.

Questo è in definitiva ciò che fa una soluzione di tipo Data Warehouse, ma su scala molto più piccola.

    
risposta data 02.06.2013 - 21:16
fonte
2

Non sono sicuro se hai finalizzato su una soluzione, ma i miei due centesimi per coloro che incappano in questa domanda: Esistono due parti (1) Database (2) Framework di app Web.

Sul database, hai esplorato Hadoop? Seguendo le specifiche del tuo ambiente, Hadoop diventa una piattaforma attraente per l'elaborazione dei dati.

  1. ~ 1 TB di dati, ~ 50 TB di dati grezzi con priorità bassa
  2. diversi miliardi di tabelle di righe
  3. Nuovi set di dati vengono aggiunti su base settimanale (~ 1 GB per set)
  4. I dati sperimentali non vengono mai aggiornati, ma i metadati associati possono essere aggiornati settimanalmente / annualmente
  5. Inserisci per selezionare il rapporto è 10 a 100 volte
  6. tutti i set di dati per un determinato tipo di dati possono essere eseguiti su un miliardo di righe

Le seguenti specifiche sono comunque preoccupanti:

  1. query di grandi dimensioni e dinamiche difficili da prevedere.
  2. (ok per gli aggiornamenti e gli inserimenti per l'esecuzione lenta), a condizione che le query vengano eseguite rapidamente

Hadoop è incredibilmente scalabile, ma Hadoop offre il meglio con l'elaborazione in batch. Per domande online YMMV. A meno che tu non provi, sarà difficile prevedere se sarai migliore o peggiore. Devi sperimentare con Hive, Cloudera Impala ecc. Questo L'articolo ha una panoramica introduttiva su Impala. Indica anche alcune altre opzioni.

Se Hive / Impala non ti stanno dando le giuste prestazioni, ci sono delle varianti che puoi esplorare in base al tuo ambiente

  1. Poiché lo spazio su disco è relativamente economico, genera molte più tabelle "intermedie riassunte", che potrebbero velocizzare le query.
  2. Pre partecipazione ai metadati, se ciò può ridurre il numero di join nelle query
  3. Utilizza un approccio ibrido di Oracle + Hadoop (ma con una maggiore complessità complessiva).
risposta data 11.07.2013 - 17:31
fonte
0

Probabilmente non dovresti preoccuparti di un particolare framework web. Assicurati che le tue app siano prontamente distribuibili / clusterabili (evita dipendenze specifiche del file system, assicurati che possano essere eseguite su qualsiasi sistema con una singola build, ...) e che i tuoi sistemi siano configurati per gestire più nodi.

Per quanto riguarda il backend, dipende davvero dalla tua funzionalità; vuoi scegliere un datastore (s) che abbia senso per la tua app. Vorresti esaminare le varie categorie di archivi di dati di tipo "NoSQL" (documento, grafico, valore-chiave, ...) per vedere se uno o più possono essere adatti alle tue esigenze. Volete anche assicurarvi che Oracle o un altro RDBMS abbiano effettivamente dei limiti con cui la vostra azienda non può convivere (ex / avete guardato al RAC?).

In breve, non c'è una buona risposta a questa domanda. Comprendi le tue esigenze, isola i colli di bottiglia, conosci le tue opzioni e non aver paura di mischiare le soluzioni, se necessario.

    
risposta data 02.04.2013 - 18:02
fonte
0

Ci sono due modi per ridimensionare (caselle più grandi / migliori / più veloci) e fuori (più caselle). Up è buono ad un certo punto, ma nessuno sta ancora facendo le scatole di petaflop. Prende più lavoro, ma se hai rimosso i colli di bottiglia non c'è limite significativo al numero di scatole che possono essere eseguite in parallelo.

In base ai tuoi commenti, sembra che tu abbia alcuni colli di bottiglia da rimuovere, in modo che tu possa essere clusterbile ecc.

Per quanto riguarda l'eventuale superamento di Pipeline Pilot, è una domanda a cui il fornitore può rispondere al meglio.

    
risposta data 03.04.2013 - 19:09
fonte
0

L'esigenza di cercare dati arbitrari e query dinamiche è un buon esempio per un database in memoria.

Disclaimer per il resto della risposta: lavoro per SAP, quindi sono più familiare con i prodotti SAP.

SAP ha già risolto un caso d'uso simile (analisi del genoma) già con il suo database di memoria HANA, quindi funziona. Per saperne di più qui: link

La programmazione in HANA viene eseguita principalmente utilizzando stored procedure. HANA ha una build in JavaScript runtime per implementare il livello dell'applicazione. Oppure puoi esporre le stored procedure come servizi e utilizzare qualsiasi altro server app in cima (ad es. Java).

Qui puoi trovare tutorial e ambienti di sviluppo di prova: link Maggiori informazioni: link

    
risposta data 02.06.2013 - 21:42
fonte

Leggi altre domande sui tag