2010-04-04 9 views
15

Berkeley DB wäre wahrscheinlich die beste Wahl, aber ich kann es aufgrund von Lizenzproblemen nicht verwenden.Auf der Suche nach einem leichten java-kompatiblen In-Memory-Schlüsselwert-Speicher

Gibt es Alternativen?

+0

@Stephen C: Sie sind willkommen, zu bearbeiten und bessere Erklärung zu liefern. Über "sarkastisch antworten": Es klingt seltsam für mich, dass die Alternative zu Berkeley DB HashMap ist. – Roman

+2

upvoting - Frage scheint echt, und nicht so viel Sarkasmus herumlaufen. Gegeben, Frage könnte von Anfang an gesagt haben, dass Hashmaps es nicht schneiden würde. – tucuxi

+0

OK @Roman ... was ** DO ** meinst du mit "// sarkasam" in deinem Kommentar unten ?? –

Antwort

4

Ihre Frage könnte eines von zwei Dingen bedeuten.

Wenn Sie eine Datenstruktur zum Speichern von Schlüssel/Wert-Paaren meinen, verwenden Sie eine der Map-Instanzen, die ein Standardteil des JDK sind.

Wenn Sie jedoch nach einem speicherinternen Schlüsselwertspeicher suchen, würde ich vorschlagen, einen Blick auf EHCache oder sogar memcached zu werfen.

+1

In-Memory-Schlüsselwertspeicher – Roman

+0

@cletus: verwendet hashmap nicht In-Memory-Schlüsselwertspeicher? – Ashwin

3
+0

Es fehlt die Transaktionsverwaltung und die Möglichkeit, einige Daten auf der Festplatte und einen anderen Teil im Speicher zu behalten usw. // sarkasmus – Roman

+0

Ah, ich sehe :) Es gab ein Problem vor einer Weile mit jemandem, der Sachen für Android entwickeln wollte Er benötigte jedoch eine speichergestützte Hash-Map, weil die Größe seiner Daten zu groß war. Etwas ähnliches, denke ich. –

0

Es gibt lightweigh oder eingebettete dbs wie HSQLDB, Derby, SQLite Aber wie andere nicht verstehen, warum Sie einen db benötigen Schlüssel/Werte zu speichern ...

Warum nicht eine Karte? Müssen Schlüssel/Werte beim App-Neustart beibehalten werden?

Auch ist es vielleicht nicht das, was Sie brauchen, aber mit html5 auf aktuellen Browsern haben Sie localStorage, die Ihnen erlaubt, Schlüssel/Werte im Browser mit Javascript zu speichern.

1

jdbm funktioniert gut für diese Art von Sache. Es ist für die Speicherung auf der Festplatte in einer ausgelagerten Datei gedacht, bietet grundlegende Unterstützung für Transaktionen (keine Garantie auf Isolation, aber ACD sind abgedeckt). Wir haben es in einem Produktionssystem mit ziemlich breitem Einsatz verwendet und waren ziemlich zufrieden mit der Leistung, Stabilität, etc ...

1

Betrachten Sie die Verwendung jredis. Es ist ein Java-Client für Redis, ein persistenter Schlüssel-Wert-Speicher. Es gibt auch einen JDBC-Treiber dafür: code.google.com/p/jdbc-redis/.

6

Sie können versuchen Hazelcast. Fügen Sie haselcast.jar einfach zu Ihrem Klassenpfad hinzu. Und starten Sie die Codierung

Sie erhalten ein In-Memory, verteilt, dynamisch skalierbare Datenraster, die super schnell funktioniert.

1

Ich weiß, das ist ein zwei Jahre alter Beitrag, aber ich habe vor kurzem mit Infinispan rumgemacht und ich mag es so weit. Ich bin zwar kein Experte, aber es war nicht so schwierig für mich, einen verteilten Cache mit ein paar Knoten einzurichten, und ich habe in ungefähr einer Stunde einige Daten von ihnen gezogen.

1

MapDb ist eine Alternative zu Berkley mit einer freundlichen Apache 2-Lizenz.

  • Bietet Schlüssel-Wert-Speicher über Java Karte Schnittstelle
  • Leicht (300KB jar)
  • Schnell und THREAD
  • Persists Änderungen auf der Festplatte, wenn Sie
  • wollen viele andere features
+0

Leichtgewicht? mvn copy-dependencies sammelt 14 MB für mapdb: 3.0.5 – weberjn

0

Ich würde empfehlen, eine Redisson zu versuchen.Sie können verteilte und skalierbare Map oder ConcurrentMap und andere (Set, List, Queue, Lock ...) Implementierungen auf dem Hochleistungsschlüsselwert Redis Server verwenden.

einfaches Beispiel:

Redisson redisson = Redisson.create(); 

ConcurrentMap<String, SomeObject> map = redisson.getMap("anyMap"); 

... 

redisson.shutdown(); 
2

Chronicle-Map ist eine starke Alternative.

  • reiner Java, einfach java.util.Map Implementierung
  • Speichert die Daten off-Haufen, beharrt optional auf der Festplatte über Memory-Mapped-Dateien
  • Open Source, permissive Apache 2.0 Lizenz
  • unglaublich schnell, kann Millionen verwalten von Updates/Abfragen pro Sekunde (see exact numbers)