2008-11-04 15 views
34

Estoy buscando una biblioteca tipo dbm que pueda usar en lugar de Berkeley DB, que actualmente estoy usando. Mi razón principal para cambiar es que las tarifas de licencia para BDB son bastante altas (gratis para las aplicaciones de código abierto, pero mi empleador no desea abrir esta aplicación en particular por varias razones).¿Alternativa a BerkeleyDB?

Miré brevemente qdbm pero no parece que satisfaga mis necesidades: muchas claves (varios millones) y elementos de datos grandes (> 1-5 megabytes). Antes de continuar con la búsqueda, pensé en preguntar porque parece que hay toneladas de bibliotecas tipo DBM.

Respuesta

10

SQLite es de dominio público, lo que significa que puede usarlo para cualquier propósito, y es ampliamente utilizado y admitido.

+1

Buena idea, pero SQLite, aparentemente, no se recomienda para grandes bases de datos. La nuestra tendrá unos 50 GB; lo siento, eso probablemente no estaba claro en la publicación original. –

+1

El otro problema es que BDB no es un SQL DBMS, es un motor de almacenamiento. Entonces, a menos que haya escrito una implementación de SQL encima de BDB, parece que habrá un poco más de trabajo para el puerto a SQL en lugar de otro motor de almacenamiento. – Ferruccio

+0

@Ferruccio, no tiene que realizar un puerto a SQL, simplemente puede implementar una API tipo BDB sobre SQL. fácilmente. –

0

db4o es bastante barato y rápido, pero sólo se puede utilizar con java o .net

+0

db4o se ve bien, pero desafortunadamente esta es una aplicación C++ ... –

+1

db4o es una alternativa absolutamente inapropiada a BerkeleyDB. Además, db4o no ofrece un modelo de licencia libre de regalías. Están cargando por cada despliegue. –

+0

bastante barato como en $ 1200 – KJW

0

Firebird es su mejor amigo.

+0

Firebird es una muy buena base de datos ** SQL **.No es genial como base de datos de almacenamiento, pero probablemente sea mejor que la mayoría debido a la excelente compatibilidad con BLOB. –

+1

¿Puedes elaborar un poco más sobre 'no tan bueno como un DB de almacenamiento'? Además, me gustaría saber más sobre lo que Firebird NO es genial (¿precio? ¿Tamaño? :)) –

18

Puede consultar Tokyo Cabinet. Es el sucesor de qdbm/gdbm, y si decide escalar tiene un buen front-end de red disponible.

Editar:

Otra variante es Kyoto Cabinet; desarrollado por la misma persona, pero supuestamente más fácil de usar.

8

Usted puede conseguir mucho mejor rendimiento de cualquier dBm (incluso qdbm) y la mejora de paralelismo con un simple nivel de indirección: Simplemente tome sus llaves y croquetas de ellos, y utilizar data_dir/H(key)/ como la base de datos para almacenar esas claves. Limite la salida hash a un valor pequeño (digamos) 255 para obtener mejores resultados.

Este enfoque tiene una serie de beneficios, fácil de resumir:

  • conceptualmente simple
  • Fácil de implementar y probar
  • no bloquea la base de datos de actualizaciones
  • podemos apoyar mucho más grande bases de datos
  • Fácil de reemplazar el componente DBM

Probablemente, el hash no necesite ser criptográficamente seguro; solo en su mayoría uniforme. DJB cdb hash funciona bien en la mayoría de los casos.

+0

Sugerencia interesante, pero es un poco ortogonal a la pregunta. Los méritos de usar una tabla hash frente a una estructura ordenada similar a btree son un tema diferente. – gonzojive

3

Puede probar JDBM. Es un almacén de clave-valor gratuito (Apache 2) con persistencia de disco. API simple y de alto rendimiento

20

C/C++

Java