Frage

Ich habe viele Textdateien, ihre Gesamtgröße beträgt ca. 300 GB ~ 400 GB. Sie sind alle in diesem Format

key1 value_a
key1 value_b
key1 value_c
key2 value_d
key3 value_e
....

Jede Zeile besteht aus einem Schlüssel und einem Wert. Ich möchte eine Datenbank erstellen, mit der ich den gesamten Wert eines Schlüssels abfragen kann. Wenn ich beispielsweise Key1 abfrage, werden Value_a, Value_B und Value_C zurückgegeben.

Zunächst ist das Einfügen all dieser Dateien in die Datenbank ein großes Problem. Ich versuche, ein paar GBS -Größe in MySQL MyISAM -Tabelle mit Lastdaten -Infile -Syntax einzufügen. Es scheint jedoch, dass MySQL Multicores nicht zum Einfügen von Daten verwenden kann. Es ist so langsam wie die Hölle. Ich denke also, MySQL ist hier keine gute Wahl für so viele Platten.

Außerdem muss ich die Datenbank regelmäßig, wöchentlich oder sogar täglich neu erstellen, wenn möglich, daher ist die Einfügungsgeschwindigkeit für mich wichtig.

Es ist nicht möglich, dass ein einzelner Knoten das Computing und das Einsetzen effizient durchführt, um effizient zu sein. Ich denke, es ist besser, die Einfügung in verschiedenen Knoten parallelig durchzuführen.

Zum Beispiel,

node1 -> compute and store 0-99999.txt
node2 -> compute and store 10000-199999.txt
node3 -> compute and store 20000-299999.txt
....

Hier kommt also die ersten Kriterien.

Kriterien 1. Schnelle Einfügungsgeschwindigkeit in verteilter Charge.

Wie Sie im Beispiel für Textdateien sehen können, ist es dann besser, mehrere Schlüssel zu verschiedenen Werten zu bieten. Genau wie Key1 -Karten zu Value_a/value_b/value_c im Beispiel.

Kriterien 2. Mehrere Schlüssel sind erlaubt

Dann muss ich Schlüssel in der Datenbank abfragen. Es ist keine relationale oder komplexe Join -Abfrage erforderlich. Ich benötige nur eine einfache Schlüssel-/Wert -Abfrage. Der wichtige Teil ist der Mehrfachschlüssel zum gleichen Wert

Kriterien 3. Einfache und schnelle Key -Wert -Abfrage.

Ich weiß, dass es Hbase/Cassandra/MongoDB/Redis gibt ... und so weiter, aber ich bin nicht mit allen vertraut, nicht sicher, welcher meinen Bedürfnissen entspricht. Die Frage ist also - welche Datenbank zu verwenden? Wenn keiner von ihnen meinen Bedürfnissen entspricht, habe ich sogar vor, meine eigenen zu bauen, aber es erfordert Anstrengungen:/

Vielen Dank.

War es hilfreich?

Lösung

Ich war in einer ähnlichen Situation und empfehle dringend, MongoDB oder HBase für Ihre Bedürfnisse zu prüfen. Die anderen (Cassandra/Redis) sind ebenfalls gut, aber Hbase und MongoDB wurden in großen Umgebungen kämpft, haben eine große Gemeinschaft, eine gute Dokumentation (MongoDBs ist besser) und erfüllen im Allgemeinen die drei Anforderungen, die Sie suchen.

Andere Tipps

  • Wie groß sind die Schlüssel?
  • Wie groß sind die Werte?
  • Wird die Daten "kontinuierlich" ankommen oder ist dies eine einmalige Last?
  • Lassen Sie uns alle repräsentativen Fragen sehen. Sie haben nur erwähnt

SELECT val FROM tbl WHERE key = 'constant';

Gibt es andere?

Im Allgemeinen saugen Schlüsselwertspeicher große Zeit. Aber vielleicht können wir Ihren Sonderfall nicht allzu badly arbeiten lassen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top