Ene 292013
 

En este artículo exponemos la funcionalidad que ofrece Berkeley DB y los conceptos que maneja.

Introducción

Como su nombre indica, BerkeleyDB (Berkeley Data Base) es un sistema de base de datos. Al igual que MySQL, Postgres y otras bases de datos muy conocidas, es Open Source, pero a diferencia de dichas base de datos, no relacional.

En lugar de utilizar un lenguaje SQL, Berkeley DB proporciona un API en forma de un conjunto de llamadas a funciones para el acceso y la administración de los datos.

La licencia de Berkeley DB es Open Source en el sentido de que garantiza que este software puede ser utilizado libremente y redistribuido con otros productos open source. La empresa Sleepycat Software vende licencias comerciales para la redistribución de Berkeley DB con aplicaciones propietarias, pero en cualquier caso todo el código fuente de Berkeley DB está disponible gratuitamente para su descarga y uso.

Otra diferencia entre Berkeley DB y otros sistemas de base de datos es que está “empotrado” (embedded) en la aplicación. Berkeley DB se ejecuta en el mismo espacio de direcciones que la aplicación que lo utiliza, y como resultado no es necesario ningún mecanismo de comunicación inter-procesos, ya sea a través de la red o local. Berkeley DB se implementa como una librería con interfaces en forma de una colección de funciones para una serie de lenguajes de programación, entre los cuales se incluyen C, C++, Java, Perl, Tcl, Python y PHP. La base de datos puede ser accedida simultáneamente por varios procesos o varios threads de un mismo proceso, y la librería gestiona de manera transparente los servicios de bajo nivel, como el locking, registro de transacciones, gestion de buffer compartido, gestión de memoria, etc.

La librería puede ser instalada prácticamente en todo tipo de plataformas, Linux, Windows y sistemas operativos empotrados de tiempo real. Se ejecuta tanto en sistemas de 32 como de 64 bits.

Por las razones expuestas, normalmente Berkeley DB ofrece un rendimiento superior al que se obtiene con bases de datos relacionales y bases de datos orientadas a objetos: No hay comunicación inter-procesos, y no hay un lenguaje de consultas que deba ser interpretado.

Estructuras de almacenamiento

Al implementar una base de datos en Berkeley DB, se puede escoger entre cuatro tipos de estructuras de almacenamiento:

Hash Tables

En una hash table cada registro de la base de datos está identificado por una clave única. Las hash tables normalmente son adecuadas para bases de datos muy grandes que necesitan tiempos de acceso y actualización de registro predecibles en acceso aleatorio a los registros.

Btrees

Los Btrees son adecuados cuando es necesario obtener los registros existentes para un rango de valores de la clave. La estructura en árbol mantiene físicamente próximos los datos de los registros cuyas claves tiene valores próximos.

Record-number-based

Este tipo de almacenamiento es adecuado para aplicaciones que identifican los registros por su número de registro. Es similar a una Hash Table en la que el identificador del registro es un número. Berkeley DB genera automáticamente estos números de registro.

Queues

 Las colas son adecuadas para aplicaciones que crean registros, y después deben procesarlos en el orden de creación. Un buen ejemplo es un sistema de compra on-line. Los pedidos pueden entrar al sistema en cualquier momento, pero deberían ser procesados en el orden en que fueron recibidos.

Servicios de gestión de datos

Berkely DB implementa los servicios de concurrencia, transacciones y recuperación.

Se pueden agrupar varias operaciones en una única transacción, que puede ser validada (commited) o anulada (rolled back) atómicamente. Berkeley DB utiliza una técnica denominada “bloqueo en dos fases” para asegurar que dos transacciones concurrentes estés aisladas entre sí, y una técnica denominada “write-ahead logging” para garantizar que las transacciones finalizadas se mantienen pese a posibles fallos de la aplicación o del sistema operativo, o averías hardware.

Cuando una aplicación comienza su ejecución, puede solicitar a la librería que realice una recuperación. La recuperación restaura la base de datos a un estado limpio, incluso después de una caída del sistema.

La aplicación también puede indicar los servicios que desea utilizar, e inhabilitar los que no necesita. Así, por ejemplo, si lo que necesita la aplicación es un almacenamiento en Btree rápido, con acceso por parte de un único usuario y sin necesidad de transacciones, puede inhabilitar los sistemas de bloqueo y de transacciones.

Ejemplos de programación con Berkeley DB

El lector interesado puede consultar los artículos dedicados a la programación con Berkeley DB en distintos lenguajes:

 Publicado por en 5:41 pm

 Deja un comentario

(requerido)

(requerido)