2011-02-17 17 views
6

Las licencias de Berkeley DB (JE) pueden ser una gran causa. Tengo una aplicación Java para un pequeño grupo de clientes, pero como es una aplicación de escritorio, mi precio no admite licencias de instancias individuales.Un solo archivo, tienda de valores-clave ordenada y persistente para Java (alternativa a Berkeley DB)

¿Existe una alternativa Java recomendada para Berkeley DB? Comercial o no (las buenas implementaciones de tiendas clave-valor pueden ser no triviales, prefiero diferir el mantenimiento en otro lugar). Necesito algo más que una tienda de hash ya que necesitaré iterar a través de subconjuntos de claves subsiguientes y las tiendas de hash básicas serían O (m * n) que buscarían y espero que la tienda sea ~ 50-60GiB en una máquina de escritorio. ¿Benefició a alguien más que puede recomendar que mantiene su tienda de respaldo en un solo archivo ?

+1

¿Alguna razón tiene que ser un archivo único, 50-60GiB? – corsiKa

+0

Sé que suena extraño, pero tiene que ver con la administración de TI de escritorio y una simple aplicación máxima de tamaño de disco por nodo. 1-3 archivos está bien, pero mantener un árbol de directorios completo o alguna otra estructura se convierte en la sobrecarga de administración para las reconstrucciones de computadoras portátiles, & c. – Xailor

+1

Berkeley DB JE es de código abierto.No tiene que pagarle a nadie por una licencia. http://www.oracle.com/technetwork/database/berkeleydb/downloads/jeoslicense-086837.html – JeremyP

Respuesta

2

--- Editado después de ver el tamaño del archivo ---

50 a 60 archivos GIB! Parece que debería saber que su motor de base de datos no cargó todo eso en la memoria a la vez, y fue muy eficiente en el manejo/eliminación de bloques de respaldo de datos descargados.

No sé si Cloudscape está a la altura, y no me sorprendería que no lo fuera.

--- --- post original sigue

nubes menudo encaja a la perfección. Es un poco más que Berkeley DB, pero ganó la tracción suficiente para ser distribuido incluso con algunas ofertas de JDK.

+0

He pensado en esto, pero necesito ser capaz de tener un grupo de soporte de escritorio para poder mover la tienda/base de datos durante los cambios de la computadora portátil. De lo contrario, estamos migrando los datos del escritorio cada vez. – Xailor

+0

según la edición, eso es correcto, no necesito necesariamente una memoria caché ya que la mayoría de los datos se transmitirán desde el archivo y presionar% sería bajo. – Xailor

5

Creo que SQLite es exactamente lo que usted quiere: Gratis (Dominio Público), Base de Datos de Un Solo Archivo, Zero-Configuration, Small Footprint, Fast, multiplataforma, etc. Aquí hay un list of wrappers, hay una sección para Java . Eche un vistazo al sqlite4java y lea más en Java + SQLite here.

+0

Me encanta, pero sqllite no es 100% Java, ¿o sí? – Xailor

+0

Es C, pero multiplataforma y tiene [varios envoltorios de java] (http://stackoverflow.com/questions/41233/java-and-sqlite). –

+0

@Xepoch, no, no es 100% Java, como dijo BlueRaja, pero con la lista de envoltorios de Java disponibles, esto no debería ser un problema. – JPelletier

3

No será un archivo único, pero si desea una base de datos incrustada, sugiero Java DB (una versión renombrada de Apache Derby, que utilicé en un trabajo anterior con resultados maravillosos).

Más, ambos son completamente gratis.

Editar: leyendo los otros comentarios, otra nota: Java DB/Derby es 100% Java.

+0

Mi temor es este: cuando los equipos de sobremesa/portátiles son reimpresos/reemplazados (lo que supongo es en promedio a ~ 10 meses, por extraño que parezca) probablemente necesitaría escribir una migración para extraer datos de Java DB y volver a insertarlos . ¿Puedo, literalmente, tomar los archivos de copia de seguridad de Java DB como una copia, puedo hacerlo a medida que cambian las versiones de JDK? – Xailor

+0

@Xepoch Hice esto en mi máquina como una copia de seguridad local y como una prueba, y fue simple copiar y reemplazar, y la base de datos estaba funcionando. Acerca de JDK, nunca lo probé, pero supongo que no tendrás problemas, ya que la compatibilidad con versiones anteriores siempre se mantiene. – mdrg

+0

Ciertamente he pensado acerca de este enfoque. Espero que los datos binarios sean compatibles hacia arriba con JavaDB. Debería comenzar otra pregunta sobre JavaDB en Java7. – Xailor

2

Considera ehcache. Muestro here una clase para envolverlo como java.util.Map. Puede almacenar listas u otras estructuras de datos fácilmente como sus valores, evitando el problema O (m * n) que le preocupa. ehcache es la licencia de Apache 2.0, con una versión de empresa comercial disponible por Terracotta. La versión de código abierto le permitirá verter su caché en el disco, y si elige no desalojar las entradas de caché, se trata efectivamente de un almacén de valores-clave persistente.

9

sin duda debe probar JDBM2, que hace lo que quiere:

  • disco HashMaps respaldados/TreeMaps por lo tanto se puede iterar a través de las teclas.
  • Apache 2 licencia

Además:

  • rápido, huella muy pequeña
  • transaccional
  • frasco independientes tienen sólo 145 KB.
  • Uso simple
  • Escalas así hasta registros 1E9
  • Usos serialización de Java, sin mapeo ORM

ACTUALIZACIÓN

El proyecto ha evolucionado hasta convertirse en MapDB http://www.mapdb.org

2

JavaDB aka Derby aka Cloudscape sería una elección decente; es una base de datos pura de Java SQL, y está incluida en el JRE, por lo que no tiene que enviarla con su código ni requerir que los usuarios la instalen por separado.

(en realidad no incluidos en el JRE proporcionado por algunos gestores de paquetes de Linux, pero hay que habrá un paquete independiente que es trivial para instalar)

Sin embargo, Derby tiene bastante pobre rendimiento. Una alternativa sería H2 - nuevamente, una base de datos Java SQL pura que almacena una base de datos en un solo archivo, con un jar ~ ~ 1MB bajo un redistributable license, pero que es considerably faster and lighter than Derby.

He utilizado felizmente H2 para una serie de pequeños proyectos. A JBoss le gustó lo suficiente como para que bundled it in AS7. Es trivial de configurar, y definitivamente vale la pena intentarlo.

2

Persistit es el nuevo rival. Es una biblioteca rápida, persistente y transaccional de Java B + Tree.

Me temo que no hay garantía de que se mantendrá. Akiban, la compañía que apoya a Persistit, fue recientemente adquirida por FoundationDB. Este último no proporcionó ninguna información sobre el futuro.

https://github.com/akiban/persistit

0

Eche un vistazo a LMDBJava, enlaces de Java a LMDB, la tienda clave-valor ACID clasificada más rápida que existe.

Cuestiones relacionadas