Question
Est-ce que Java a (ou est-il une bibliothèque disponible) qui me permet d'avoir un disque basé HashMap? Il n'a pas besoin d'être atomique ou quoi que ce soit, mais il est accessible via plusieurs threads et ne doit pas se bloquer si deux accèdent au même élément en même temps.
Quelqu'un sait de quoi que ce soit?
La solution
Soit fichiers ou Berkeley DB peut-être ce que vous cherchez. Lui-même met en œuvre java.util.Properties
java.util.Map
et fournit des méthodes pour load
de et store
dans un fichier. Le Berkeley DB est souvent recommandé comme une paire légère valeur clé datastore.
Autres conseils
MapDB
MapDB fournit TreeMap simultanée et HashMap soutenu par le stockage sur disque ou hors segment de mémoire. Il est un moyen rapide, évolutive et facile à utiliser le moteur de base de données intégré Java. Il est emballé avec des fonctionnalités telles que les transactions, l'espace sérialisation efficace, par exemple le cache et la compression / chiffrement transparent. Il a également des performances exceptionnelles ad'égal que les moteurs db natifs embarqués.
jdbm2
Embarqué base de données Valeur clé Java.
On dirait que vous besoin de quelque chose près d'un db léger. Avez-vous regardé / Java DB? Une lumière db avec une seule table, indexée serait essentiellement un sur disque, carte de hachage thread-safe.
JDBM2 est exactement ce que vous demandez. Il fournit un HashMap sauvegardé par la mémoire de disque (entre autres cartes). Son rapide, thread-safe et l'API est très simple.
projet Voldemort est aussi un très rapide / évolutive / réplication "hashmap". Il est utilisé à LinkedIn une performance est également très bon:
Une citation de leur site:
Voici le débit que nous voyons d'un seul client multithread parler un seul serveur où les données « à chaud » ensemble est en mémoire sous artificiellement lourde charge dans notre laboratoire de performance:
Reads: 19384 req / sec
Écrit: 16559 req / s
Chronique carte met en œuvre ConcurrentMap
et de données sur le disque via persiste la cartographie de sa mémoire dans un fichier.
Chronique La carte est conceptuellement très similaire à MapDB (API fournit constructeur similaire et une interface Ainsi, l'année est maintenant 2016. Et si quelqu'un vous cherche à résoudre ce problème, je trouve que les environnements à faible niveau API dans moteur de stockage Vive! Map
), mais Chronicle La carte est
MVStore
H2 qui fait la même chose, mais je pense qu'il est plus adapté à la base de données elle-même.
Dans 2018
le plus léger magasin key value
persistant est H2 base de données avec sa MVStore :
Le MVStore est persistant, connectez-vous structuré mémoire de valeur clé. C'est prévu pour être le prochain sous-système de stockage de H2, mais il peut aussi être utilisé directement dans une application, sans utiliser JDBC ou SQL.
MVStore signifie "magasin multi-version".
Chaque magasin contient un certain nombre de cartes accessibles via l'interface java.util.Map.
- la persistance à base de fichiers sont pris en charge et le fonctionnement en mémoire.
Il est destiné à être rapide, simple à utiliser, et petit.
En même temps de lecture et les opérations d'écriture sont pris en charge.
Les opérations sont prises en charge (y compris les opérations simultanées et 2 phases).
L'outil est très modulaire. Il prend en charge les types de données enfichables et la sérialisation, le stockage enfichable (dans un fichier, la mémoire hors tas), les mises en œuvre de la carte enfichable (B-tree, R-tree, B-arbre concurrent a), le stockage de BLOB, et une abstraction du système de fichiers à en charge les fichiers chiffrés et les fichiers zip.
H2
est également contenu dans une seule bibliothèque de 1.8 meg
Je aussi:
- MapDB (dépendances de
13 meg
) - chronique-carte (dépendances
5.5 meg
- rapide en option distribuée) - lmdbjava (
2 meg
dépendances java + bibliothèquelmdb
C) - le plus rapide, mais pas la mise en œuvrethread safe
de la boîte.