16 Stimmen

Benötigt wird ein verteiltes System zum Nachschlagen von Schlüsselwerten

Ich brauche eine Möglichkeit, Key-Value-Lookups über (potenziell) Hunderte von GB an Daten durchzuführen. Idealerweise etwas, das auf einer verteilten Hashtabelle basiert, die gut mit Java funktioniert. Es sollte fehlertolerant sein, und Open Source.

Der Speicher sollte beständig sein, würde aber idealerweise Daten im Speicher zwischenspeichern, um den Vorgang zu beschleunigen.

Es sollte in der Lage sein, gleichzeitige Lese- und Schreibvorgänge von mehreren Rechnern aus zu unterstützen (Lesevorgänge werden allerdings 100 Mal häufiger vorkommen). Der Zweck besteht im Wesentlichen darin, eine schnelle erste Abfrage von Benutzer-Metadaten für einen Webdienst durchzuführen.

Kann jemand etwas empfehlen?

0 Stimmen

Wofür wollen Sie optimieren? Zum Beispiel Lesedurchsatz (gleichzeitige Lesevorgänge von mehreren Rechnern), Fehlertoleranz angesichts nicht verfügbarer Rechner, geringe Anzahl von Rechnern... Benötigen Sie auch Schreibzugriffe?

0 Stimmen

Danke, ich habe die Frage mit diesen Informationen geändert.

0 Stimmen

Wie wollen Sie Ihre Daten verteilen? Sollen alle Daten an/auf/von jedem Knoten verfügbar sein oder nicht? Im ersten Fall lautet die nächste Frage: "Warum die verteilte Suche?".

0voto

Javier Punkte 58737

OpenChord klingt vielversprechend; aber ich würde auch in Betracht ziehen BDB oder jede andere Nicht-SQL-Hashtabelle kann ganz einfach verteilt werden (zumindest wenn die Anzahl der Speicherknoten (fast) konstant ist), indem der Schlüssel auf dem Client gehasht wird, um den entsprechenden Server zu finden.

0voto

ykaganovich Punkte 14234

0voto

Phillip B Oldham Punkte 18091

nmdb klingt, als wäre es genau das, was Sie brauchen. Verteilter, speicherinterner Cache mit persistenter Festplattenspeicherung. Aktuelle Backends sind qdbm, berkeley db, und (kürzlich hinzugefügt nach einer schnellen E-Mail an den Entwickler) Tokioter Kabinett Die Größe der Schlüssel/Werte ist zwar begrenzt, aber ich glaube, das kann aufgehoben werden, wenn Sie keine TICP-Unterstützung benötigen.

0voto

Nikita Koksharov Punkte 9489

Versuchen Sie die verteilte Map-Struktur von Redisson basiert sie auf Redis Server. Mit der Redis-Cluster-Konfiguration können Sie Daten auf 1000 Server verteilen.

Beispiel für die Verwendung:

Redisson redisson = Redisson.create();

ConcurrentMap<String, SomeObject> map = redisson.getMap("anyMap");
map.put("123", new SomeObject());
map.putIfAbsent("323", new SomeObject());
map.remove("123");

...

redisson.shutdown();

-1voto

Ryan Stille Punkte 1344

DNS ist dazu in der Lage. Ich weiß nicht, wie groß jeder Ihrer Datensätze ist (8 GB mit tonnenweise kleinen Daten?), aber es könnte funktionieren.

0 Stimmen

DNS geht von einer hierarchischen Datenstruktur aus, und ich fürchte, dass es nicht das tut, was ich brauche.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X