2008-10-13 17 views
16

Ich brauche eine Möglichkeit, Schlüssel-Wert-Lookups über (potenziell) Hunderte von GB Daten zu tun. Idealerweise etwas basierend auf einer verteilten Hashtabelle, die gut zu Java passt. Es sollte fehlertolerant und Open Source sein.Benötigen Sie ein verteiltes Key-Value-Lookup-System

Der Speicher sollte persistent sein, würde aber im Idealfall Daten im Speicher zwischenspeichern, um die Dinge zu beschleunigen.

Es sollte in der Lage sein, gleichzeitiges Lesen und Schreiben von mehreren Maschinen zu unterstützen (Lesevorgänge werden jedoch 100X häufiger). Im Grunde besteht der Zweck darin, eine schnelle anfängliche Suche nach Benutzermetadaten für einen Web-Service durchzuführen.

Kann jemand etwas empfehlen?

+0

Was Sie optimieren?Zum Beispiel Lesedurchsatz (gleichzeitige Lesevorgänge von mehreren Maschinen), Fehlertoleranz angesichts von nicht verfügbaren Maschinen, geringe Anzahl von Maschinen ... Brauchen Sie auch Schreibvorgänge? – Alexander

+0

Danke, ich habe die Frage mit diesen Informationen bearbeitet. – sanity

+0

Wie möchten Sie Ihre Daten verteilen? Sollten alle Daten für/an/von jedem Knoten verfügbar sein oder nicht? Im ersten Fall lautet die nächste Frage "warum die verteilte Suche?". – Alexander

Antwort

12

Sie möchten vielleicht Hazelcast auschecken. Es ist verteilt/partitioniert, super lite, einfach und kostenlos.

java.util.Map map = Hazelcast.getMap ("mymap"); 
map.put ("key1", "value1"); 

Grüße,

-talip

1

Sie sollten wahrscheinlich angeben, ob sie im Speicher persistent oder nicht, sein muss oder nicht, etc. Sie könnten versuchen: http://www.danga.com/memcached/

+0

Danke, ich habe eine Notiz hinzugefügt, dass es persistent sein muss, was meiner Meinung nach memcached ausschließt. – sanity

+0

Memcached war auch mein erster Gedanke, aber "Hundertstel GB" ist ein bisschen zu viel für RAM – Javier

-1

DNS die Fähigkeit, dies zu tun, ich weiß nicht, wie groß jeder Ihrer Aufzeichnungen ist (8 GB Tonnen von kleinen Daten?), aber es kann funktionieren.

+0

DNS nimmt eine hierarchische Datenstruktur, ich fürchte, es wird nicht tun, was ich brauche. – sanity

8

Open Chord ist eine Implementierung des Protokolls CHORD in Java. Es ist ein verteiltes Hash-Tabellenprotokoll, das perfekt zu Ihren Anforderungen passt.

0

Verteilte Hashtabellen umfassen Tapestry, Chord und Pastry. Einer davon sollte Ihren Bedürfnissen entsprechen.

0

OpenChord klingt vielversprechend; aber ich würde auch BDB oder jede andere Nicht-SQL-Hashtabelle in Betracht ziehen, so dass es dead-easy sein kann (wenn die Anzahl der Speicherknoten zumindest (fast) konstant ist), hasse einfach den Schlüssel auf dem Client, um zu erhalten der passende Server.

2

auf den Anwendungsfall (Tangosol verwendet werden soll) kann je nach Terracotta nur sein, was Sie brauchen.

0

nmdb klingt wie es genau das ist, was Sie brauchen. Verteilt im Arbeitsspeicher-Cache mit einem persistenten Festplattenspeicher. Aktuelle Back-Ends enthalten Qdbm, berkeley db und (vor kurzem nach einer kurzen E-Mail an den Entwickler hinzugefügt) tokyo cabinet. Schlüssel/Wert-Größe ist zwar begrenzt, aber ich glaube, dass kann aufgehoben werden, wenn Sie keine TICP-Unterstützung benötigen.

0

Versuchen Map-Struktur von Redisson verteilt, es auf Redis Server basiert. Mit der Redis Cluster-Konfiguration können Sie Daten auf 1000 Server aufteilen.

Anwendungsbeispiel:

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();