2010-12-13 3 views
1

Ich suche nach einem Schlüsselwertspeicher, der Werte mit einer Größe von einigen Gigabyte verarbeiten kann. Ich habe einen Blick auf Riak, , CouchDb, MongoDB.No-SQL-Datenbank für große Werte

Ich möchte einen Arbeitsbereich eines Benutzers (entspricht einem Verzeichnis im Dateisystem, rekursiv mit Unterverzeichnissen und Dateien darin) in diesem DB speichern. Natürlich könnte ich das Dateisystem verwenden, aber dann habe ich keine Funktionen wie Caching im RAM, Failover-Lösung, Backup und Replikation/Clustering, die zum Beispiel von Redis unterstützt werden.

Dies bedeutet, dass die meisten der gespeicherten Werte Binärdaten sind, eventuell einige Gigabyte groß, da eine Datei in einem Arbeitsbereich einem Schlüssel-Wert-Tupel zugeordnet ist.

Hat jemand einige Erfahrungen mit irgendwelchen dieser Produkte?

+0

Was sind die Multi-Gigabyte-Werte? Binärdaten? Massive Textzeichenfolgen? – ceejayoz

+0

Bitte [verwenden Sie keine Signaturen oder Slogans] (http://stackoverflow.com/faq#signatures) in Ihren Posts. – meagar

+0

Die Werte sind binäre Daten. – Erik

Antwort

1

Wir verwenden jetzt MongoDB, da es große Binärwerte unterstützt, ist sehr beliebt und hat eine große Benutzerbasis. Vielleicht werden wir in einen anderen Laden wechseln, aber momentan sieht es sehr gut aus!

2

Zunächst einmal wird das Erlangen einer MD5 oder CRC32 von der Datengröße von GB schmerzlich teuer rechnerisch sein. Wahrscheinlich besser, das zu vermeiden. Wie wäre es, die Daten in einer Datei zu speichern und den Dateinamen zu indizieren?

Wenn Sie darauf bestehen, ist mein Vorschlag immer noch nur den Hash, nicht den gesamten Datenwert, mit einem Lookup-Array/Tabelle zum endgültigen Speicherort zu speichern. Die Sicherheit dieses Ansatzes (nicht eindeutige Möglichkeit) hängt direkt von der Anzahl der großen Stichproben ab. Je länger der Hash, den Sie erstellen - 32 Bit im Vergleich zu 64 Bit im Vergleich zu 1024 Bit usw. - desto sicherer wird es auch. Die meisten Wörterbuchsysteme in einer Programmiersprache oder eine Datenbank-Engine haben einen binären Datenspeichermechanismus. Andernfalls können Sie eine Zeichenfolge mit dem Hexwert speichern, der der Hash-Nummer in einer Char-Spalte entspricht.

+0

Warum muss ich Hashes von Gigabyte berechnen? Meine Schlüssel sind sehr kurze Saiten. – Erik

+0

OP: "Werte mit einer Größe von einigen Gigabyte" - aber mit diesem Kommentar sehe ich jetzt, dass Sie möglicherweise eine Menge von Werten meinen, die insgesamt viel RAM belegen wird. und das macht auch Sinn. – zanlok

+0

Warum nicht [SQL-Lite] (http://www.sqlite.org/) verwenden? Es gibt viele Vorteile. – zanlok