# DBM (informática)

En informática, DBM es una biblioteca y un formato de archivo que proporciona acceso rápido y con una sola tecla a los datos. Siendo una base de datos clave-valor del Unix original, dbm es uno de los primeros ejemplos de un sistema NoSQL.

## Historia

La biblioteca original y el forma de archivo de dbm eran simplemente un motor de base de datos, escrito por Ken Thompson y publicado por AT&T en 1979. El nombre es una sigla de tres letras que significan DataBase Manager (Gestor de Bases de Datos), que también puede referenciar a la familia de motores de base de datos con APIs y funciones derivadas del primer dbm.
La biblioteca dbm almacena datos arbitrarios usando una sola clave (una clave primaria) en contenedores de tamaño fijo y usa técnicas de hashing para permitir la recuperación rápida de los datos por clave.
El esquema de hash utilizado es una forma de hash extensible, de modo que el esquema de hash se expande a medida que se agregan nuevos depósitos a la base de datos, lo que significa que, cuando está casi vacía, la base de datos comienza con un depósito, que luego se divide cuando se llena. Los dos depósitos secundarios resultantes se dividirán cuando se llenen, por lo que la base de datos crece a medida que se agregan claves.
La biblioteca dbm y sus derivados son bases de datos prerrelacionales: administran matrices asociativas, implementadas como tablas hash en disco. En la práctica, pueden ofrecer una solución más práctica para el almacenamiento de alta velocidad al que se accede por clave, ya que no requieren la sobrecarga de conexión y preparación de consultas. Esto se equilibra con el hecho de que, por lo general, solo se pueden abrir para escritura por un único proceso a la vez. Un agente demonio puede manejar solicitudes de múltiples procesos, pero introduce una sobrecarga de IPC.

## Implementaciones

La biblioteca dbm original de AT&T ha sido reemplazada por muchas de sus implementaciones sucesivas. Algunos ejemplos notables son:
* ndbm ("new dbm"), basado en el dbm original con algunas características nuevas.
* GDBM ("GNU dbm"), reescritura de GNU de la biblioteca que implementa las características de ndbm y su propia interfaz.
* sdbm ("small dbm"), una reescritura de dominio público de dbm . Es parte de las distribuciones estándar de Perl y Ruby.
* qdbm, un dbm de mayor rendimiento que utiliza muchas de las mismas técnicas que Tokyo/Kyoto Cabinet. Escrito por el mismo autor antes de pasar a los gabinetes.
* tdb, una base de datos simple utilizada por Samba que admite varios escritores. Tiene una API basada en gdbm.
* Berkeley DB, 1991 reemplazo de ndbm por Sleepycat Software (ahora Oracle) creado para evitar los derechos de autor de AT&T Unix en BSD. Cuenta con muchas extensiones como paralelismo, control transaccional, hash y almacenamiento de árbol B.
* LMDB: implementación de árbol B+ de copia en escritura mapeada en memoria en C con una API de estilo Berkeley.
Las siguientes bases de datos están inspiradas en dbm, pero no proporcionan directamente una interfaz dbm, aunque sería trivial empaquetar una:
* Tokyo Cabinet: Implementación de C empleando tablas hash, árbol B+ o estructuras de matriz de longitud fija de FAL Labs. Tiene mejoras en el paralelismo.
* Kyoto Cabinet: implementación de C++ que emplea tablas hash, árbol B+ o estructuras de matriz de longitud fija de FAL Labs. Tiene mejoras en el paralelismo.
* Tkrzw, sucesor con licencia de Apache 2.0 de Kyoto Cabinet.
* WiredTiger: base de datos con almacenamiento tradicional orientado a filas y a columnas.

## Disponibilidad

En 2001, la implementación ndbm de DBM era estándar en Solaris e IRIX, donde gdbm es ubicuo en Linux . Las implementaciones Berkeley DB eran comunes en algunos sistemas operativos gratuito. Después de un cambio de licencia de Berkeley DB a GNU AGPL en 2013, proyectos como Debian se han trasladado a LMDB.

## Fiabilidad

En 2018, un test de fuzzing AFL, usado en muchas bases de datos de la familia DBM, expuso bastantes problemas en la implementación cuando se intenta corromper o invalidar ficheros de la base de datos. Solo freecdb de Daniel J. Bernstein no tuvo problemas. Los autores de gdbm, tdb y lmdb respondieron rápidamente. Berkeley DB se quedó atrás debido a la gran cantidad de otros problemas; las correcciones serían irrelevantes para los usuarios de software de código abierto debido a que el cambio de licencia los bloqueaba en una versión anterior.