Frage

Enthält Java (oder gibt es eine Bibliothek vorhanden), die mir eine Platte haben kann basierend HashMap? Es braucht nicht atomar oder irgendetwas zu sein, aber es wird über mehrere Threads zugegriffen werden und soll nicht abstürzen, wenn zwei das gleiche Element zur gleichen Zeit zugreifen.

Wer weiß, von was?

War es hilfreich?

Lösung

So oder Eigenschaften Dateien oder Berkeley DB sein könnte, was Sie suchen. Die java.util.Properties selbst implementiert java.util.Map und stellt Methoden zur load aus und store in eine Datei. Die Berkeley DB wird oft als leichte Schlüssel-Wert-Paar-Datenspeicher empfohlen.

Andere Tipps

MapDB

bietet MapDB gleichzeitige TreeMap und HashMap unterstützt durch Plattenspeicher oder off-Heap-Speicher. Es ist ein schneller, skalierbare und einfache Java-Datenbank-Engine eingebettet zu verwenden. Es ist vollgepackt mit Funktionen wie Transaktionen, platzspar Serialisierung Instanz Cache und transparente Kompression / Verschlüsselung. Es hat auch hervorragende Leistung wetteifern nur durch native eingebettete db-Motoren.

http://www.mapdb.org/

jdbm2

Embedded Schlüssel Wert Java-Datenbank.

https://code.google.com/p/jdbm2/

Klingt wie Sie brauchen etwas nah an einem leichten db. Haben Sie sich / als Java DB? Ein Licht db mit eine einzige, im Grunde indiziert Tabelle eine Disk-basierte, Thread-sichere Hash-Karte sein würde.

JDBM2 ist genau das, was Sie fordern. Es bietet eine HashMap von Plattenspeichern (unter anderen Karten) gesichert. Seine schnelle, Thread-sicher und die API ist wirklich einfach.

Projekt Voldemort auch wirklich schnell / skalierbare / Replikation "HashMap". Er wird verwendet bei LinkedIn ist eine Leistung auch ziemlich gut:

Ein Zitat von ihrer Website:

  

Hier ist der Durchsatz wir von einem sehen   Single multithreaded Client im Gespräch mit   ein einzelner Server, auf dem die „heiße“ Daten   Satz ist im Speicher unter künstlich   schwere Last in unserer Leistung Labor:

     

Liest: 19.384 req / sec
   Writes: 16.559 req / s

Chronik Karte implementiert ConcurrentMap und verharren Daten auf der Festplatte über es Speicher in eine Datei zuordnen.

Chronik Karte ist vom Konzept her sehr ähnlich MapDB (bietet Ähnliche Builder API und Map Schnittstelle), aber Chronik Karte ist

In 2018 das leichteste persistent key value Store ist der H2 Database mit seinen MVStore :

  

Die MVStore ist ein hartnäckiges, log strukturierte Schlüsselwert zu speichern. Es ist   geplant die nächste Speichersubsystem von H2 zu sein, aber es kann auch sein,   direkt in einer Anwendung verwendet werden, ohne JDBC oder SQL.

     
      
  • MVStore steht für "Multi-Version speichern".

  •   
  • Jeder Speicher enthält eine Reihe von Karten, die die java.util.Map Schnittstelle zugegriffen werden kann.

  •   
  • Sowohl dateibasierte Persistenz und In-Memory-Betrieb unterstützt werden.

  •   
  • Es ist beabsichtigt, schnell zu sein, einfach zu bedienen und klein.

  •   
  • Concurrent Lese- und Schreiboperationen unterstützt werden.

  •   
  • Die Transaktionen werden unterstützt (einschließlich gleichzeitige Transaktionen und 2-Phasen-Commit).

  •   
  • Das Tool ist sehr modular aufgebaut. Es unterstützt die steckbaren Datentypen und die Serialisierung, steckbare Speicher (in eine Datei, um off-Heap-Speicher), steckbar Kartenimplementierungen (B-Baum, R-Baum, Concurrent B-Baum zur Zeit), BLOB Speicher und einen Dateisystem-Abstraktions Unterstützung von verschlüsselten Dateien und zIP-Dateien.

  •   

H2 auch in einer einzigen Bibliothek von 1.8 meg enthalten ist

ich auch sieht:

  • MapDB (13 meg Abhängigkeiten)
  • Chronik-Karte (5.5 meg Abhängigkeiten - schnell optional verteilt)
  • lmdbjava (2 meg java Abhängigkeiten + lmdb C-Bibliothek) - schnellste Umsetzung aber nicht thread safe aus der Box.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top