Bases de datos empotradas (I)


Entendemos por bases de datos empotradas aquellas que no inician un servicio en nuestra máquina independiente de la aplicación, pudiendose enlazar directamente a nuestro código fuente o bien utilizarse en forma de librería.
También podemos definirlas a partir de lo que no son: servidores de bases de datos.Así no son bases de datos empotradas Postgresql, mySQL, Firebird, Oracle,…

Bases de datos empotradas (I)

Entendemos por bases de datos empotradas aquellas que no
inician un servicio en nuestra máquina independiente de la aplicación,
pudiendose enlazar directamente a nuestro código fuente o bien
utilizarse en forma de librería.
También podemos definirlas a partir de lo que no son: servidores de bases de datos.Así no son bases de datos empotradas Postgresql, mySQL, Firebird, Oracle,…

Normalmente las bases de datos empotradas comparten una serie de
características comúnes: su pequeño tamaño, el “small footprint” en términos de tamaño de código añadido a nuestra aplicación y recursos que consumen, y que en general
no están pensadas para el acceso multi usuario.

En algunos casos las bases de datos empotradas representan el primer paso hacia un servidor de bases de datos tradicional (mySQL utiliza una de estas bases de datos), en otros casos simplemente su pequeño tamaño las hace ideales como sistema de soporte de información en sistemas monousuario que deba utilizar los recursos de la forma más eficiente posible, o bien como soporte a nuestros scripts de gestión de sistemas.

Buceando un poco por la red podemos encontrar varios ejemplos de este tipo de base de datos:

La elección de estos ejemplos no es aleatoria: representan algunos de los ejemplos más populares y comparten la característica de que existe un API para Python y/o los lenguajes script más populares, lo que nos permitirá probarlas y utilizarlas
con un mínimo de esfuerzo. Las dos primeras son bases de datos que intentan en mayor o menor medida ser compatibles con SQL 92, las dos últimas representan báse de datos empotradas clásicas, con muchos años de historia a sus espaldas y que se han utilizado y se utilizan en algunas de las aplicaciones unix más comunes.

En este artículo intentaré daros a conocer la primera, dejando las otras y una comparativa de rendimiento para posteriores artículos.

SQLite

SQLite es una librería escrita en C que implementa un motor de base de datos SQL empotrable. Sus desarrolladores destacan entre sus principales caracteristicas su completo soporte de tablas e índices en un único archivo por base de datos, soporte transaccional, su rapidez y su escaso tañaño (unas 25 mil líneas de código C) y su completa portabilidad.
Su instalación es muy sencilla, requiere únicamente los pasos habituales de tar, configure, make y make install. Los desarrolladores recomiendan estos pasos:

$ tar xzf sqlite.tar.gz
$ mkdir bld
$ cd bld
$ ../sqlite/configure
$ make
$ make test

Existen ports de la API para distintos lenguajes, incluso un proyecto de ODBC para SQLite La API para Python la podemos encontrar en http://pysqlite.sourceforge.net/
En web de SQLite aparece un enlace hacia una comparativa de velocidad de esta base de datos.
Aquí podemos ver que sale muy bien parada trabajando en modo asíncrono en relación a mySQL o Postgresql, pero no olvidemos que se trata de motores de bases de datos para propósitos distintos. SQLite no permite múltipes usuarios accediendo en modo escritura a la base de datos, ya que el mecanismo de bloqueo que utiliza es muy “basto”: bloquea toda la base de datos. Así esta librería está especialmente indicada cuando queramos una gran rapidez en las consultas y nos baste que sólo un único usuario pueda realizar modificaciones. Por ejemplo es ideal como base de datos para guardar configuraciones, logs de scripts, o sencillamente como base de datos monousuario.
Como característica adicional que debe tenerse también en cuenta es la falta de tipos de datos definidos en una tabla SQLite:por defecto todos los datos se almacenan en como cadenas de carácteres
acabadas en nulo (típico de algo hecho en C) a excepción de las columnas definidas como INTEGER PRIMARY KEY que se almacenan como enteros y hacen las veces de campo autoincremental. Podemos suplir esta carencia mediante la directiva pysqlite_pragma expected_types si utilizamos la librería pysqlite
SQLite cuenta con una utilidad llamada sqlite que nos permitirá ejecutar comandos SQL contra una base de datos SQLite. Desde aquí podemos crear nuestra base de datos, realizar consultas,
insertar datos, etc. Además es muy sencillo utilizar este programa en un shell script, ya que sqlite permite ejecutar un comando SQL directamente desde la línea de comando, así basta ejecutar sqlite junto con el nombre de la base de datos a la que queramos acceder y la
sentencia SQL que queramos ejecutar.
Además de su soporte transaccional, su rapidez, su facilidad de instalación, una de las características que más me ha sorprendido de esta base de datos es la manera tan sencilla como podemos extender su funcionalidad. Permite definir funciones que operarán sobre los datos devueltos como si se tratasen de sentencias sql, toda la potencia del C o del Python al servicio de una base de datos!
Por ejemplo, supongamos que queremos crear una base de datos con los ordenadores de nuestra red, que por cierto se supone que son mucho más de los que yo doy como ejemplo. Podemos crear la base de datos y la tabla directamente con sqlite pero es mucho más práctico crear la estructura y la los datos a introducir en un fichero de texto. Así, he creado un fichero llamado db.sql con el siguiente contenido

CREATE TABLE MAQUINAS (
ID INTEGER UNIKE PRIMARY KEY,
NOMBRE VARCHAR(30),
IP VARCHAR(15),
USUARIO VARCHAR(30)
);
COMMIT;

INSERT INTO MAQUINAS (NOMBRE, IP, USUARIO)
VALUES (‘DELL’,’192.168.1.10′,’TONI’);
INSERT INTO MAQUINAS (NOMBRE, IP, USUARIO)
VALUES (‘HP’,’192.168.0.1′, ‘PEP’);
INSERT INTO MAQUINAS (NOMBRE, IP, USUARIO)
VALUES (‘ROUTER’,’192.168.0.100′,’ROUTER’);
COMMIT;

Y he ejecutado simplemente

$ sqlite test.db < db.sql

Veamos como podemos generar un sencillo archivo html con los datos de nuestra red en forma de tabla utilzando sqlite y awk (por cuestiones de claridad he troceado las líneas)

$ sqlite test.db “select * from maquinas” | awk
‘BEGIN {FS=”|”;
print “< table>< b> < tr> < td> ORDENADOR< /td> < td>
< CENTER > IP</CENTER > </td> </tr> </b> “};
{print “< td>”,$2,”</td> “,”< td> “,$3,”< /td> </tr> “};
END{print “</table> “}’ > prova.html

Para nuestros datos produce la salida
ORDENADORIP
DELL 192.168.1.10

Este post ha sido traido de forma automatica desde https://web.archive.org/web/20140625063149/http:/bulma.net/body.phtml?nIdNoticia=1472 por un robot nigromante, si crees que puede mejorarse, por favor, contactanos.


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.