Frage

Ich bin für eine Back-End-Lösung für eine Anwendung in Ruby geschrieben on Rails oder Merb, um Daten mit mehreren Milliarden von Datensätzen zu verarbeiten. Ich habe das Gefühl, dass ich angeblich mit einem verteilten Modell und im Moment gehe ich bei

sah

HBase mit Hadoop

CouchDB

Probleme mit HBase Lösung wie ich es sehe - Ruby-Unterstützung nicht sehr stark ist, und CouchDB nicht erreicht Version 1.0 noch

.

Haben Sie Vorschlag, was Sie für eine so große Menge an Daten verwenden würde?

Daten erfordert ziemlich schnell Importe manchmal von 30-40Mb auf einmal, aber die Einfuhren in Stücke kommen. So ~ 95% der Zeitdaten werden nur gelesen werden.

War es hilfreich?

Lösung

Je nach tatsächlichen Datennutzung, MySQL oder Postgres soll ein paar Milliarden Datensätze auf der richtigen Hardware zu handhaben kann. Wenn Sie eine besonders hohe Anzahl von Anfragen haben, können diese beiden Datenbanken auf mehrere Server repliziert werden (und lesen Sie die Replikation ganz einfach zu installieren ist (im Vergleich zu mehreren Master / Schreib-Replikation).

Der große Vorteil der Verwendung eines RDBMS mit Rails oder Merb verwendet, wird Ihnen Zugriff auf alle der ausgezeichneten Werkzeugunterstützung gewinnen für diese Art von Zugriff auf Datenbanken.

Mein Rat ist, um tatsächlich Ihre Daten in ein paar dieser Systeme profilieren und es von dort.

Andere Tipps

Es gibt eine Reihe von verschiedenen Lösungen Menschen verwendet haben. Nach meiner Erfahrung hängt es wirklich mehr auf Ihrem Nutzungsmuster in Bezug auf diese Daten und nicht die schiere Anzahl der Zeilen pro Tabelle.

Zum Beispiel: „Wie viele Einsätze / Updates pro Sekunde auftreten.“ Fragen wie diese werden in der Entscheidung spielen, was Back-End-Datenbanklösung Sie wählen.

Nehmen Sie Google zum Beispiel. Es gibt wirklich nicht eine Speicher / Suchlösung bestehen, die ihre Bedürfnisse befriedigt, so dass sie schufen ihre eigenen basierend auf einer Map / Reduce-Modell

Ein Wort über HBase der Warnung und andere Projekte dieser Art (weiß nichts über CouchDB - I denkt es ist nicht wirklich ein db überhaupt, nur ein Schlüssel-Wert-Speicher):

  1. Hbase ist nicht für die Geschwindigkeit abgestimmt ist; es ist für Skalierbarkeit abgestimmt. Wenn Reaktionsgeschwindigkeit überhaupt ein Problem ist, einige Beweise Konzept ausführen, bevor Sie auf diesen Pfad zu begehen.
  2. Hbase nicht unterstützt verbindet. Wenn Sie Active verwenden und haben mehr als eine Beziehung .. gut Sie können sehen, wohin das führt.

Das Hive-Projekt, auch auf der Hadoop gebaut, hat Unterstützung verbindet; so tut Schwein (aber es ist nicht wirklich SQL). Punkt 1 gilt für beide. Sie werden für schwere Datenverarbeitungsaufgaben gemeint, nicht die Art der Verarbeitung, sind Sie wahrscheinlich mit Rails zu tun.

Wenn Sie die Skalierbarkeit für einen Web-App wollen, im Grunde die einzige Strategie, die funktioniert, ist Ihre Daten partitionieren und so viel wie möglich tun, um die Partitionen zu gewährleisten isoliert (braucht nicht miteinander zu reden). Dies ist ein wenig schwierig mit Rails, wie es standardmäßig geht davon aus, dass es eine zentrale Datenbank. Es kann an dieser Front Verbesserungen, seit ich bei der Frage über ein Jahr sah und ein halben Tag. Wenn Sie Ihre Daten partitionieren können, können Sie horizontal ziemlich breit skalieren. Eine einzelne MySQL Maschine kann mit einem paar Millionen Zeilen beschäftigen (PostgreSQL wahrscheinlich auf eine größere Anzahl von Zeilen skalieren kann, aber vielleicht ein wenig langsamer arbeiten).

Eine andere Strategie, die funktioniert, ist eine Master-Slave eingerichtet haben, wobei alle Schreibvorgänge durch den Master fertig sind, und liest sind unter den Sklaven geteilt (und möglicherweise den Master). Offensichtlich hat sich zu recht sorgfältig getan! Unter der Annahme eines hohen Lese- / Schreib-Verhältnis, kann dies recht gut skalieren.

Wenn Ihre Organisation tiefe Taschen hat, zu prüfen, was Vertica, AsterData und Greenplum zu bieten haben.

Das Backend wird von den Daten abhängen und wie die Daten zugegriffen werden.

Aber für die ORM, würde ich wahrscheinlich verwenden, DataMapper und schreiben Sie ein benutzerdefinierten Datenobjekte Adapter zu bekommen, was Backend Sie wählen.

Ich bin mir nicht sicher, was CouchDB nicht bei 1,0 zu sein, mit ihm zu tun hat. Ich würde empfehlen, mit ihm einige Tests zu tun (nur eine Milliarde zufällige Dokumente erzeugen) und sehen, ob es wird halten. Ich würde sagen, es wird, obwohl sie nicht eine bestimmte Versionsnummer hat.

CouchDB wird Ihnen helfen, eine Menge, wenn es / Sharding Ihrer Daten zu partitionieren kommt und wie, scheint, wie es mit Ihrem Projekt passen könnte - vor allem, wenn Ihr Datenformat in Zukunft ändern könnte (das Hinzufügen oder Entfernen von Feldern), da CouchDB Datenbanken haben kein Schema.

Es gibt viele Optimierungen in CouchDB für schreiblastigen Anwendungen, wie gut und auf Grund meiner Erfahrung mit ihm, ist, wo es wirklich glänzt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top