2013-11-21 5 views
5

Ich bin ein Neuling auf Sturm. Ich denke nur, wenn ich storm verwenden kann, um zwei Tabellen aus zwei verschiedenen dbs zusammenzuführen/zusammenzufügen (von coz, haben zwei Tabellen eine Art Fremdschlüsselbeziehung, die zufällig in verschiedenen dbs/systems existieren), irgendwelche Ideen, wie ich mich versöhnen würde die Topologie? wie zwei getrennte Ausläufe zu haben, die regelmäßig von zwei dbs lesen und einen Bolzen haben, um die Join-Arbeit zu erledigen?Verwenden Sie Sturm, um zwei Tabellen von zwei verschiedenen dbs zu verbinden

Ist das sogar ein richtiger Anwendungsfall für Sturm?

alle Ideen sind willkommen!

Antwort

3

wie zwei getrennte Ausläufe mit periodisch von zwei dbs Lesen und einen Bolzen mit der Arbeit zu tun, verbinden

Ja, das ist sehr viel möglich. Storm kann mehrere haben. Und A bolt consumes any number of input streams, does some processing, and possibly emits new streams. ist es normalerweise besser, wenn Sie Ihren Auslauf aus einer Warteschlange wie Kafka oder RabbitMQ lesen lassen (Sie können eine Schnabelintegration mit den meisten Warteschlangen finden). In diesem Fall können Sie also die Warteschlange mit den Daten aus der DB füttern und dann den Auslauf gleich verbrauchen.

UPDATE:
Hier ist ein sehr schöne Article darüber, wie Sturm Parallelismus arbeitet

+0

Danke @ user2720864. Zwei Fragen: 1. wird der Bolzen unter viel Druck stehen, weil alle emittiert zu einem einzigen Bolzen gehen, da es eine Verbindung ist, ist es schwierig, eine Verbindung zu mehreren Schrauben zu parallelisieren, nehme ich an. 2. Besteht ein existierender Ansatz da draußen, der die db-Daten in eine Message Queue feuert, fügt sie eine weitere Schichtkomplexität in die Pipeline ein? – Shengjie

+1

Soweit mein Verständnis geht .. 1. Es könnte eine einzige Schraube sein, aber Sie können mehrere Instanzen der gleichen mit Sturm Parallelität ausführen. 2. Bist du auf der Suche nach einem bestehenden Projekt, das vernünftig ist? – user2720864

+0

ja, wenn es ein vorhandenes Projekt gibt, das es tut :) Im Moment schreibe ich eine periodische Abfrage gegen die originalen dbs innerhalb der Tülle selbst, nicht ganz sicher, ob das der richtige Weg ist. – Shengjie

6

Dies ist eine gute Verwendung von Sturm sein kann, aber es hängt wirklich von Ihrer Datenmenge. Wenn Sie nur zwei Tabellen in separaten DBMSs haben, die Sie beitreten und an einer dritten Stelle speichern möchten (DBMS oder anders), macht Storm nur Sinn, wenn es sich um einen Streaming-Join handelt, dh die beiden Tabellen werden häufig an Sie geschrieben Ich möchte mich den Sachen anschließen, die gerade erst zusammen geschrieben wurden.

Auch ist es fast selbstverständlich, dass Sie nur die Komplexität Storm verwenden sollten, wenn dies für etwas relativ großes und hohes Volumen ist.

Wenn es klein ist, werden Sie wahrscheinlich besser mit einem herkömmlichen ETL-Tool bedient, auch wenn das nur ein Teil des Codes ist, den Sie für den Zugriff auf die beiden Datenbanken verwenden und die Daten kombinieren.

Wenn der Datensatz groß ist und Sie Joins über mehr als einen kurzen Zeitraum hinweg durchführen müssen, würde ich dies auf eine andere Weise in Erwägung ziehen, z. B. die Verwendung eines Map-Reduce-Jobs, der Daten aus den beiden DBs extrahiert und verteilt Verbinde dich über einen Cluster.