En informática, una DBM es una biblioteca y un formato de archivo que proporciona acceso rápido a los datos mediante una sola clave. DBM , una base de datos clave-valor del Unix original , es un ejemplo temprano de un sistema NoSQL . [ 1 ] [ 2 ] [ 3 ]
Historia
La biblioteca y el formato de archivo dbm originales eran un motor de base de datos sencillo , escrito originalmente por Ken Thompson y lanzado por AT&T en 1979. El nombre es un acrónimo de tres letras de DataBase Manager , y también puede referirse a la familia de motores de base de datos con API y características derivadas del dbm original .
La biblioteca dbm almacena datos arbitrarios mediante una única clave (una clave primaria ) en cubos de tamaño fijo y utiliza técnicas de hash para permitir una recuperación rápida de los datos por clave.
El esquema de hash utilizado es una forma de hash extensible , de modo que se expande a medida que se añaden nuevos depósitos a la base de datos. Esto significa que, cuando está casi vacía, la base de datos comienza con un solo depósito, que se divide al llenarse. Los dos depósitos secundarios resultantes también se dividirán al llenarse, por lo que la base de datos crece a medida que se añaden claves.
La biblioteca dbm y sus derivados son bases de datos pre-relacionales : gestionan matrices asociativas , implementadas como tablas hash en disco . En la práctica, ofrecen una solución más práctica para el almacenamiento de alta velocidad con acceso por clave, ya que no requieren la sobrecarga de conexión y preparación de consultas. Esto se compensa con el hecho de que, por lo general, solo un proceso a la vez puede abrirlas para escritura. Un demonio agente puede gestionar las solicitudes de múltiples procesos, pero introduce una sobrecarga de comunicación entre procesos (IPC) .
Implementaciones
La biblioteca dbm original de AT&T ha sido reemplazada por muchas implementaciones sucesoras. Algunos ejemplos notables incluyen: [ 3 ]
- ndbm ("nuevo 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. También proporciona nuevas características como tolerancia a fallos para garantizar la consistencia de los datos. [ 4 ] [ 5 ]
- sdbm ("small dbm"), una reescritura de dominio público de dbm . Forma parte de la distribución estándar de Perl y está disponible como biblioteca externa para Ruby . [ 6 ] [ 7 ]
- qdbm ("Quick Database Manager"), un gestor de bases de datos de alto rendimiento que emplea muchas de las mismas técnicas que Tokyo/Kyoto Cabinet. Escrito por el mismo autor antes de que pasaran a trabajar en los gabinetes. [ 8 ]
- tdb ("Trivial Database"), una base de datos simple utilizada por Samba que admite múltiples escritores. Tiene una API basada en gdbm. [ 9 ]
- Berkeley DB , lanzado en 1991 como reemplazo de ndbm por Sleepycat Software (ahora Oracle ), fue creado para sortear los derechos de autor de AT&T Unix sobre BSD . Incluye numerosas extensiones como paralelismo, control transaccional, funciones hash y almacenamiento en árbol B.
- LMDB : implementación en C de un árbol B+ mapeado en memoria con copia en escritura y una API al estilo Berkeley.
Las siguientes bases de datos están inspiradas en dbm, pero no proporcionan directamente una interfaz dbm, aunque sería trivial encapsularla:
- cdb ("base de datos constante"), base de datos de Daniel J. Bernstein , los archivos de la base de datos solo se pueden crear y leer, pero nunca modificar.
- Tkrzw , sucesor con licencia Apache 2.0 de Kyoto Cabinet y Tokyo Cabinet.
- WiredTiger : base de datos con almacenamiento tradicional orientado a filas y columnas.
Disponibilidad
En 2001, la implementación ndbm de DBM era estándar en Solaris e IRIX , mientras que gdbm es omnipresente en Linux . Las implementaciones de Berkeley DB eran estándar en algunos sistemas operativos libres. [ 2 ] [ 10 ] Tras un cambio de licencia de Berkeley DB a GNU AGPL en 2013, proyectos como Debian han migrado a LMDB. [ 11 ]
Fiabilidad
Una prueba de fuzzing de AFL de 2018 contra muchas bases de datos de la familia DBM expuso muchos problemas en las implementaciones en lo que respecta a archivos de base de datos corruptos o inválidos. Solo freecdb de Daniel J. Bernstein no mostró fallos. Los autores de gdbm, tdb y lmdb respondieron rápidamente. Berkeley DB se quedó atrás debido a la gran cantidad de otros problemas; [ 10 ] las correcciones serían irrelevantes para los usuarios de software de código abierto debido al cambio de licencia que los obligaba a seguir usando una versión antigua. [ 11 ]
Véase también
Referencias
- ↑ Kew 2007 , pág. 80 : "Los DBM nos acompañan desde los inicios de la informática, cuando se reconoció la necesidad de búsquedas rápidas mediante claves. El DBM original es una biblioteca y formato de archivo basado en UNIX para un acceso rápido y altamente escalable a los datos mediante claves. Le siguieron (en orden) NDBM ('nuevo DBM'), GDBM ('GNU DBM') y Berkeley DB. Este último es, con mucho, el más avanzado y el único DBM en desarrollo activo en la actualidad. No obstante, todos los DBM desde NDBM en adelante proporcionan la misma funcionalidad básica utilizada por la mayoría de los programas, incluido Apache. Un SDBM de implementación mínima también se incluye con APR y está disponible para las aplicaciones junto con los demás DBM.Aunque NDBM es ahora antiguo, como la ciudad llamada Ciudad Nueva ('Neápolis') por los griegos alrededor del año 600 a. C. y que todavía se llama Nápoles hoy en día, sigue siendo el DBM base. NDBM fue utilizado por los primeros módulos de Apache, como las versiones Apache 1.x dey. Tanto GDBM como Berkeley DB proporcionan Las emulaciones de NDBM y las distribuciones de Linux incluyen una u otra de estas emulaciones en lugar de la NDBM "real", que se excluye por motivos de licencia. Desafortunadamente, los distintos formatos de archivo son totalmente incompatibles y existen sutiles diferencias de comportamiento en lo que respecta al bloqueo de la base de datos. Estos problemas llevaron a un flujo constante de usuarios de Linux a reportar problemas con las DBM en Apache 1.x.
mod_auth_dbmmod_rewrite - 1 2 Hazel 2001 , p. 500 : "El formato [de clave única] más común se llama DBM. La mayoría de las versiones modernas de Unix tienen una biblioteca DBM instalada de forma estándar, aunque esto no ocurre en algunos sistemas más antiguos. Las dos bibliotecas DBM más comunes son ndbm (estándar en Solaris e IRIX) y Berkeley DB versión 2 o 3 (estándar en varios sistemas operativos libres). Exim admite ambas, así como las versiones anteriores Berkeley DB versión 1, gdbm y tdb ."
- 1 2 Ladd & O'Donnell 2001 , pp. 823–824 : "La mayoría de los sistemas UNIX tienen algún tipo de base de datos DBM. DBM es un conjunto de rutinas de biblioteca que administra archivos de datos que consisten en pares clave-valor. Las rutinas DBM controlan cómo los usuarios ingresan y recuperan información de la base de datos. Si bien no es el mecanismo más potente para almacenar información, usar DBM es un método más rápido para recuperar información que usar un archivo plano. Debido a que la mayoría de los sitios UNIX usan una de las bibliotecas DBM, las herramientas que necesita para almacenar su información en una base de datos DBM están fácilmente disponibles.Existen casi tantas variantes de las bibliotecas DBM como sistemas UNIX. Aunque la mayoría de estas bibliotecas son compatibles entre sí, todas funcionan básicamente de la misma manera...A continuación se presenta una lista de algunas de las bibliotecas DBM más populares disponibles:
- DBM - DBM almacena la base de datos en dos archivos. El primero tiene la extensión
.Pagy contiene el mapa de bits. El segundo, que tiene la extensión.Dir, contiene los datos. - NDBM - NDBM es muy similar a DBM pero con algunas características adicionales; fue escrito para proporcionar mejores métodos de almacenamiento y recuperación. Además, NDBM permite abrir varias bases de datos, a diferencia de DBM, en el que solo se permite tener una base de datos abierta dentro del script. Al igual que DBM, NDBM almacena su información en dos archivos usando las extensiones
.Pagy.Dir. - SDBM viene incluido con el archivo Perl, que se ha adaptado a numerosas plataformas. Por lo tanto, puede usar bases de datos DBM siempre que exista una versión de Perl compatible con su ordenador. SDBM se diseñó para que coincidiera con las funciones de NDBM, por lo que la portabilidad del código no debería ser un problema. Perl está disponible en prácticamente todas las plataformas más populares.
- GDBM es la versión GNU de la familia de rutinas de base de datos DBM. GDBM también permite almacenar datos en caché, lo que reduce el tiempo de escritura en la base de datos. La base de datos no tiene límite de tamaño; su tamaño depende completamente de los recursos del sistema. Los archivos de base de datos GDBM tienen la extensión
.Db. A diferencia de DBM y NDBM, que utilizan dos archivos, GDBM solo utiliza uno. - Berkeley db : Berkeley db amplía significativamente las rutinas originales de DBM. Utiliza tablas hash, al igual que las demás bases de datos DBM, pero también puede crear bases de datos basadas en un árbol binario equilibrado ordenado
BTREEy almacenar información con un número de línea de registroRECNO. El método que se utilice depende completamente de cómo se desee almacenar y recuperar la información de la base de datos. Berkeley db crea un único archivo, sin extensión.
- DBM - DBM almacena la base de datos en dos archivos. El primero tiene la extensión
- ↑ "Tolerancia a fallos" . Manual de GDBM . Consultado el 3 de octubre de 2021 .
- ↑ "Protegiendo contra fallos el almacén de clave-valor NoSQL original" . Consultado el 3 de octubre de 2021 .
- ↑ yigit, ozan. "sdbm.bun" . cse.yorku.ca . Consultado el 8 de mayo de 2019 .
- ↑ "Biblioteca Ruby SDBM" . SDBM en Github .
Cabe destacar que Ruby incluía SDBM en la distribución estándar hasta la versión 2.7, después de la cual solo estuvo disponible como una biblioteca externa, de forma similar a las bibliotecas DBM y GDBM, que se eliminaron de la biblioteca estándar en Ruby 3.1.
- ↑ "QDBM: Quick Database Manager" . fallabs.com . 2006. Archivado del original el 27 de febrero de 2020. Consultado el 27 de febrero de 2020 .
- ↑ "tdb: Página principal" . tdb.samba.org .
- 1 2 Debroux, Lionel (16 de junio de 2018). "oss-security - Diversión con bases de datos tipo DBM..." openwall.com .
- 1 2 Surý, Ondřej (19 de junio de 2014). "Nuevo objetivo del proyecto: deshacerse de Berkeley DB (post jessie)" . debian-devel (Lista de correo). Debian .
Bibliografía
- Hazel, Philip (2001). Exim: El agente de transferencia de correo . O'Reilly.
- Ladd, Eric; O'Donnell, Jim (2001). Uso de XHTML, XML y Java 2: Edición Platino . Que. ISBN 9780789724731.
- Kew, Nick (2007). El libro de módulos de Apache: Desarrollo de aplicaciones con Apache . Prentice Hall Professional. ISBN 9780132704502.
- Biblioteca SDBM en Apache
- Matthew, Neil; Stones, Richard (2008). "Bases de datos". Introducción a la programación en Linux . Wiley.
- Olson, Michael A.; Bostic, Keith; Seltzer, Margo (1999). "Berkeley DB" (PDF) . Actas de la pista FREENIX: Conferencia Técnica Anual USENIX de 1999 .
- Motores de bases de datos
- Sistemas de gestión de bases de datos gratuitos
- Almacenamiento estructurado
- Bases de datos integradas