pares - Base de datos de clave-valor en disco de la biblioteca incorporada java
pares clave valor (2)
También eche un vistazo a esta pregunta: Alternativa a BerkeleyDB?
Lo que creo que estoy buscando es una base de datos no-SQL, incrustada en la biblioteca, en el disco (es decir, no en la memoria), a la que se puede acceder desde Java (y preferiblemente se ejecuta dentro de mi instancia de la JVM). Eso no es realmente una gran base de datos, y estoy tentado a rodar mi propia cuenta. Básicamente, estoy buscando la parte de una base de datos de "deberíamos mantener esto en la memoria o ponerlo en el disco".
Nuestro modelo ha crecido a varios gigabytes. En este momento, todo esto se hace en la memoria, lo que significa que estamos presionando a la JVM para que suba varios gigabytes. Actualmente, todo está almacenado en un archivo XML plano, serializado y deserializado con xstream y comprimido con Java''a integrado en las bibliotecas gzip. Eso funcionó bien cuando nuestro modelo se mantiene por debajo de 100 MB, pero ahora que es más grande que eso, se está convirtiendo en un problema.
en términos generales, ese modelo se puede desglosar como
- Proyecto
- Componente de configuración (direct-acyclic-graph), no compatible con la base de datos
- una lista de una docena de estructuras de "experimento"
- cada una contiene una lista de una docena de estructuras de "modelo de ejecución".
- Cada modelo de ejecución contiene cientos de megas de datos. Una vez escritos, nunca se editan.
- cada una contiene una lista de una docena de estructuras de "modelo de ejecución".
Lo que me gustaría hacer es tener algo que se ajuste a una interfaz de mapa, de guid -> run-model. Esta mini-base de datos mantendría una tabla plana de estos objetos. En nuestro modelo de experimento, reemplazamos la lista de modelos de ejecución con una lista de guías, y agregamos, en la capa de la aplicación, una llamada get a este mapa, que lo sacará del disco y lo guardará en la memoria.
Eso significa que podemos mantener la configuración de nuestro programa en XML (con lo que estoy muy contento) y mantener una tabla de big data en un DBMS que evitará que consumamos varios GB de memoria. Al iniciar y salir del programa, podría cargar y descargar las dos partes de nuestro modelo (la sección de configuración en XML y los modelos de ejecución en el formato de base de datos) desde un formato de archivo.
En cierto modo estoy sintiéndome desconcertado por esto, y creo que probablemente podría implementarlo con algunas de las estrategias de inspección XML de X-Stream y una implementación de mapa personalizada, pero algo como una voz en la parte posterior de mi cabeza me dice que Debería encontrar una biblioteca para hacerlo en su lugar.
¿Debo hacer mi propia cuenta o hay una base de datos que sea lo suficientemente pequeña para ajustarse a este proyecto de ley?
Gracias chicos,
-Geoff
Dado que MapDB es una posible solución para su problema, Chronicle Map también vale la pena considerar. Es un almacén de clave-valor Java incorporable, opcionalmente persistente, que ofrece un modelo de programación muy similar a MapDB: también a través de la interfaz vanilla java.util.Map
y una serialización transparente de claves y valores.
La principal diferencia es que, según los puntos de referencia de terceros, Chronicle Map es más rápido que MapDB .
Con respecto a la estabilidad, no se informaron errores sobre el almacenamiento de datos del Chronicle Map durante meses, mientras que está en uso activo en muchos proyectos.
Descargo de responsabilidad: soy el desarrollador de Chronicle Map.