Frage

arbeite ich zur Zeit an einem Problem, das eine enorme Menge an Daten (Milliarden von Zeilen) beinhaltet das Abfragen und mit dieser Art der Sache ist etwas unerfahren, würde einige klugen Ratschläge liebt.

Die Daten / Problem sieht wie folgt aus:

  1. Jede Tabelle hat 2-5 Schlüsselspalten und 1 Spalte Wert.
  2. Jede Zeile verfügt über eine einzigartige Kombination von Tasten.
  3. Ich brauche von jeder Teilmenge von Schlüsseln abfragen können (das heißt key1 = 'blah' und key4 = 'bloo').
  4. Es wäre in der Lage schön, schnell auf neue Zeilen einfügen (den Wert zu aktualisieren, wenn die Zeile bereits vorhanden ist) aber ich wäre zufrieden, wenn ich dies langsam tun könnte.

Zur Zeit habe ich dies in MySQL implementiert auf einer einzige Maschine mit separater Indizes auf jeder Taste definiert ausgeführt wird, ein Index über alle Tasten (unique) und ein Index, den den ersten und letzten Schlüssel kombiniert (derzeit ist die häufigste Abfrage I‘ m machen, aber das könnte leicht ändern). Leider ist dies ziemlich langsam ist (und die Indizes am Ende unter ~ 10x den Speicherplatz, der kein großes Problem ist).

ich zufällig eine Schar von schnellen Computern zu meiner Verfügung haben (~ 40), die die unglaubliche Langsamkeit dieser nur mit einem Gerät Datenbank umso ärgerlicher macht. Ich möchte Vorteil all dieser Macht zu übernehmen diese Datenbank schnell zu machen. Ich habe eine verteilte Hash-Tabelle betrachtet Gebäude, aber das würde es schwer für nur eine Teilmenge des Schlüssels abzufragen. Es scheint, dass so etwas wie BigTable / HBase eine anständige Lösung wäre, aber ich bin noch nicht davon überzeugt, dass eine einfachere Lösung gibt es nicht.

Vielen Dank, jede mögliche Hilfe wäre sehr geschätzt!

Keine korrekte Lösung

Andere Tipps

Ich würde vorschlagen, Sie zu diesem Podcast für einige ausgezeichnete Informationen über verteilte Datenbanken hören. Folge-109-ebays -Architektur-Prinzipien-with-randy-Shoup

Um die offensichtliche hinweisen. Sie wahrscheinlich Scheibe gebunden sind

An einem gewissen Punkt, wenn Sie randomish Abfragen und Ihr Arbeitssatz ist ausreichend größer als RAM tun dann werden Sie durch die geringe Anzahl von Zufall IOPS begrenzt eine Platte machen kann. Sie werden in der Lage sein zu tun, besser nicht als ein paar Dutzend Unterabfragen pro Sekunde pro angeschlossenen Datenträger.

Wenn Sie sich gegen diesen Engpass sind, könnten Sie mehr gewinnen, indem sie auf eine SSD Schalten einer größeren RAID oder Lose-of-RAM als würden Sie, indem Sie die Datenbank unter vielen Computern zu verteilen (was würden meist nur Sie bekommen mehr die letzten beiden Ressourcen)

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