2013-11-21 13 views
5

Sono un principiante in tempesta. solo pensando se posso usare storm per unire/unire due tabelle da due differenti dbs (di coz, due tabelle hanno una qualche sorta di relazione di chiave esterna, esistono solo in diversi dbs/sistemi), qualche idea su come farei la topologia? come avere due beccucci separati che leggono periodicamente da due db e che hanno un bullone per fare il lavoro di join?Usa la tempesta per unire due tabelle da due differenti db

E 'questo anche un caso di uso corretto per la tempesta?

tutte le idee sono apprezzate!

risposta

3

come avere due beccucci separate leggere periodicamente da due db ed avente un bullone per fare il lavoro join

Sì, questo è molto possibile. Storm può avere più spouts. E A bolt consumes any number of input streams, does some processing, and possibly emits new streams. in genere è meglio far leggere il beccuccio da una coda come Kafka o RabbitMQ (è possibile trovare l'integrazione dello spout con la maggior parte del sistema di accodamento). Quindi in quel caso puoi alimentare la coda con i dati dal DB e poi lasciare che lo spout consumi lo stesso.

UPDATE:
Ecco un bel Article su come funziona tempesta parallelismo

+0

Grazie @ utente2720864. due domande: 1. il bullone sarà sotto molta pressione, perché tutte le emette vanno a un singolo bullone dato che è un join, è difficile parallelizzare un join a più bulloni suppongo. 2. Esiste qualche approccio esistente là fuori che spara i dati del db a una coda di messaggi, aggiungerà un ulteriore livello di complessità nella pipeline? – Shengjie

+1

Per quanto riguarda la mia comprensione .. 1. Potrebbe esserci un singolo bullone ma è possibile eseguire più istanze dello stesso usando il parallelismo temporale. 2. stai cercando un progetto esistente che fa il sano? – user2720864

+0

sì, se c'è un progetto esistente che lo fa :) Per ora, sto scrivendo una query periodica contro il db originale all'interno dello spout stesso, non sono sicuro che sia il modo corretto di farlo. – Shengjie

6

Questo può essere un buon uso di tempesta, ma in realtà dipende dal vostro set di dati. Se hai solo due tabelle in DBMS separati che vuoi unire e archiviare in un terzo posto (DBMS o altro), Storm avrà davvero senso se si tratta di un join di streaming, cioè le due tabelle vengono spesso scritte e tu voglio unirmi alle cose che sono state appena scritte insieme.

Inoltre, è quasi inutile dire che si dovrebbe impiegare solo la complessità che Storm porterà se si tratta di qualcosa di relativamente grande e di volume elevato.

Se è piccolo, sarà probabilmente meglio servito con uno strumento ETL tradizionale, anche se questo è solo un codice che si frusta per accedere ai due database e combinare i dati.

Se il set di dati è di grandi dimensioni ed è necessario eseguire join in più di un breve periodo di tempo, prenderei in considerazione l'idea di farlo in un altro modo, ad esempio utilizzando un lavoro di riduzione della mappa che estrae i dati dai due DB e li diffonde. unirsi a un gruppo.