2009-07-21 10 views
8

Necesito crear un formato de archivo de almacenamiento para algunos datos simples en un formato tabular, estaba tratando de usar HDF5 pero he renunciado debido a algunos problemas, y yo ' Me gustaría volver a examinar el uso de bases de datos integradas para ver si son lo suficientemente rápidas para mi aplicación.base de datos incrustada java w/capacidad de almacenar como un archivo

¿Existe una base de datos embebida de reputación de Java que tenga la opción de almacenar datos en un archivo? El único que conozco es SQLite (enlaces de Java disponibles). Intenté con H2 y HSQLDB, pero de forma automática parecen crear varios archivos, y es muy conveniente que tenga una base de datos en un archivo.

editar: el rendimiento razonablemente rápido es importante. El almacenamiento de objetos no es; por cuestiones de rendimiento, solo necesito almacenar enteros y BLOB. (+ algunas cadenas pero nada de rendimiento crítico)

edición 2: la eficiencia de los datos de almacenamiento es importante para conjuntos de datos más grandes, por lo que XML está desactivado.

+0

¿Has probado Apache Derby/JavaDB? No tengo idea de cómo almacena datos detrás de escena, pero es otra cosa que puedes ver. –

+0

Firebird definitivamente cumple con el requisito razonablemente rápido. :) – jsight

+0

Pruebe https://github.com/jankotek/MapDB – kervin

Respuesta

0

Creo que por ahora solo voy a seguir usando HDF5 para el almacenamiento persistente de datos, junto con H2 o alguna otra base de datos para la indexación en memoria. No puedo hacer que SQLite use BLOB con el controlador de Java que tengo, y no puedo integrar Firebird y ejecutarlo, y aún no confío en H2 con PAGE_STORE.

2

Una vez que utilicé una base de datos de objetos que guardaba sus datos en un archivo. Tiene una interfaz Java y .NET. Quizás quieras revisarlo. Se llama db4o.

+1

+1: por mencionar db4o, ya que lo habría publicado si no hubiera – dfa

1

Si está buscando una base de datos pequeña y rápida para enviar con otro programa, podría marcar Apache Derby No sé cómo definiría la base de datos integrada, pero la usé en algunos proyectos como una base de datos de depuración que puede ser se registró con la fuente y está disponible en cada máquina de desarrollador instantánea.

+1

Apache Derby es ahora el Java DB. Como tal, está bien documentado y respaldado, y probablemente haya venido con su IDE. – daveb

0

Como mencionó sqlite, asumo que no le importa un db nativo (siempre que haya disponibles enlaces buenos de Java). Firebird funciona bien con java, y el almacenamiento de archivos individuales por defecto.

Tanto H2 como HSQLDB serían excelentes opciones, si no tenía el requisito de un solo archivo.

+1

¿está usando el controlador Jaybird? –

1

Esto no es un motor SQL, pero si usa Prevayler con XStream, puede crear fácilmente un solo archivo XML con todos sus datos. (Prevayler lo llama un archivo de instantánea.)

Aunque no está basado en SQL, por lo que requiere un poco de esfuerzo, su naturaleza autónoma hace que el desarrollo (y especialmente las buenas pruebas) sea mucho más fácil. Además, es increíblemente rápido y confiable.

3

Si solo necesita acceso de lectura, H2 puede read the database files from a zip file.

Del mismo modo, si no necesita persistencia, es posible tener una versión solo en memoria de H2.

Si necesita tanto acceso de lectura/escritura como persistencia, puede que no tenga suerte con las bases de datos de tipo SQL estándar, ya que prácticamente todas mantienen uniformemente los archivos de índice y de datos.

3

H2 usa solo un archivo, si utiliza la última versión de H2 con la opción PAGE_STORE. Es una característica nueva, por lo que podría no ser sólida.

1

Es posible que desee comprobar jdbm - lo usamos en varios proyectos, y es bastante rápido. Utiliza 2 archivos (un archivo de base de datos y un archivo de registro) si lo está utilizando para aplicaciones de tipo ACID, pero puede soltar directamente al acceso directo a la base de datos (sin archivo de registro) si no necesita ACID sólido.

JDBM admitirá fácilmente enteros y blobs (lo que quieras), y es bastante rápido. En realidad, no está diseñado para concurrencia, por lo que tiene que administrar el bloqueo usted mismo si tiene múltiples hilos, pero si está buscando una base de datos simple y sólida, es una buena opción.

+0

JDBM ha sido reemplazado por el autor con MapDB en http://www.mapdb.org/. – kervin

+0

Un poco de historia divertida: Jan Kotek, uno de los colaboradores posteriores de jdbm, pero definitivamente no el autor original, bifurcó el proyecto en mapdb y ha hecho un trabajo increíble con él. mapdb ya no es ni remotamente como jdbm; es mejor en todos los sentidos imaginable, y Jan sigue impresionando. Vale la pena echarle un vistazo. –

1

Chronicle Map es una base de datos incorporada pura de Java.

  • Almacena datos en un archivo, i. mi.

    ChronicleMap<Integer, String> map = ChronicleMap 
        .of(Integer.class, String.class) 
        .averageValue("my-value") 
        .entries(10_000) 
        .createPersistedTo(databaseFile); 
    
  • Crónica mapa es maduros (no hay errores graves reportados almacenamiento durante meses, mientras está en uso activo).

  • Las pruebas de referencia Idependent muestran que el Mapa de la crónica es the fastest y the most memory efficient tienda de clave-valor para Java.

La principal desventaja para su caso de uso es que Crónica Mapa admite sólo un simple modelo clave-valor, sin embargo solución más compleja podría construir en la parte superior de la misma.

Descargo de responsabilidad: Soy el desarrollador de Chronicle Map.

1

Base de Datos de nitrito http://www.dizitart.org/nitrite-database.html

NoSQL Objeto (NO2 a.k.a nitrito) de base de datos es una fuente abierta nosql almacén de documentos incorporado escritas en Java con MongoDB como API. Es compatible con almacenamiento persistente en memoria y archivo único.

Cuestiones relacionadas