Disk-basierten HashMap
-
27-09-2019 - |
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?
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.
jdbm2
Embedded Schlüssel Wert Java-Datenbank.
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 So ist das Jahr jetzt 2016. Und wenn jemand sucht, dieses Problem in Angriff zu nehmen, fand ich heraus, dass das niedrige Niveau Umgebungen API in H2 die Cheers! Map
Schnittstelle), aber Chronik Karte ist
MVStore
Speicher-Engine , die die gleiche Sache tut, aber ich denke, es ist mehr zugeschnitten auf die Datenbank selbst.
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 nichtthread safe
aus der Box.