Pregunta

¿El Java tiene (o hay una biblioteca disponible) que me permite tener un disco basado HashMap? No tiene por qué ser atómica o nada, pero se accede a través de múltiples hilos y no debe bloquearse si dos están accediendo al mismo elemento al mismo tiempo.

Alguien sabe de algo?

¿Fue útil?

Solución

archivos de propiedades o Berkeley DB podría ser lo que estás buscando. El java.util.Properties sí implementa java.util.Map y proporciona métodos para load desde y store en un archivo. La base de datos Berkeley menudo se ha recomendado como un valor clave ligero almacén de datos par.

Otros consejos

MapDB

MapDB proporciona TreeMap concurrente y HashMap respaldado por almacenamiento en disco o fuera de heap-memoria. Es un motor de base de datos de Java rápido, escalable y fácil de usar incrustado. Se embala con características tales como transacciones, espacio serialización eficiente, caché ejemplo y transparente de compresión / encriptación. También tiene un rendimiento excepcional sólo comparable a los motores DB nativo incrustado.

http://www.mapdb.org/

jdbm2

Embedded base de datos de valor de clave de Java.

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

Parece que usted necesita algo cercano a una base de datos de peso ligero. ¿Has mirado en / considerada Java DB? una base de datos con la luz una sola, tabla indexada sería básicamente un mapa hash seguro para subprocesos basado en disco.

JDBM2 es exactamente lo que está pidiendo. Proporciona un HashMap el respaldo de almacenamiento en disco (entre otros mapas). Es rápido, seguro para subprocesos y la API es muy simple.

Proyecto Voldemort es también un muy rápido / escalable / replicación "Hashmap". Se utiliza en una actuación LinkedIn es también bastante bueno:

Una cita de su sitio web:

  

Aquí es el rendimiento que vemos desde una   cliente multiproceso sola hablando con   un único servidor en el que los datos "calientes"   conjunto está en la memoria bajo artificialmente   carga pesada en el laboratorio de rendimiento:

     

Lecturas: 19384 req / seg
   Escribe: 16559 req / sec

Crónica mapa implementos ConcurrentMap y persiste datos en el disco a través de la cartografía de su memoria en un archivo.

Chronicle Mapa es conceptualmente muy similar a MapDB (proporciona API constructor similar y interfaz Map), pero Chronicle Mapa es veces más rápido que MapDB y tiene mucho mejor concurrencia (Crónica mapa utiliza altamente rayas bloqueos de giro de varios niveles).

Así que el año es ahora 2016. Y si alguien está buscando para hacer frente a este problema, he encontrado que el bajo nivel API entornos en Xodus de JetBrains obras para este mismo propósito, el uso de sus tiendas lambdas computeInTransaction.

Por supuesto, no es tan elegante como tener una instancia Map puro, pero funcionó para mi caso de uso.

Otra opción es utilizar reciente motor de almacenamiento MVStore de H2, que hace lo mismo, pero yo creo que es más adaptada hacia la propia base de datos.

Saludos!

En la tienda 2018 key value persistente es el más ligero href="http://www.h2database.com/html/mvstore.html" rel="nofollow noreferrer"> base de datos :

  

El MVStore es un persistente, ingrese estructurado almacén de claves-valor. Es   planeado para ser el siguiente subsistema de almacenamiento de H2, pero también puede ser   utilizado directamente dentro de una aplicación, sin necesidad de utilizar JDBC o SQL.

     
      
  • MVStore significa "tienda multi-versión".

  •   
  • Cada almacén contiene un número de mapas que se puede acceder mediante la interfaz java.util.Map.

  •   
  • Tanto la persistencia basada en archivos y en memoria operación son compatibles.

  •   
  • Se pretende que sea rápido, fácil de usar, y pequeñas.

  •   
  • lectura simultáneas y las operaciones de escritura son compatibles.

  •   
  • Transacciones son compatibles (incluyendo transacciones simultáneas y 2-fase de confirmación).

  •   
  • La herramienta es muy modular. Es compatible con los tipos enchufables de datos y la serialización, almacenamiento conectables (a un fichero, a la memoria fuera del montón), las implementaciones mapa enchufables (B-tree, árbol R, concurrente árbol B actualmente), el almacenamiento BLOB, y una abstracción del sistema de archivos para apoyar a los archivos cifrados y comprimir archivos.

  •   

H2 también está contenida en una única biblioteca de 1.8 meg

Yo también han visto:

  • MapDB (dependencias 13 meg)
  • crónica-mapa (dependencias 5.5 meg - rápido opcionalmente distribuido)
  • lmdbjava (2 meg biblioteca de Java + dependencias lmdb C) - aplicación más rápida, pero no fuera de la thread safe caja.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top