Informe de investigación de Bases De Datos

Descripción del módulo de bases de datos.

El módulo de bases de datos se encargará de centralizar la gestión de la información que necesita internamente el programa, y de abstraer el tratamiento de la misma para evitar complejidad y dependencias al resto de módulos del sistema.

Las funcionalidades más representativas del módulo son:

  • Proporcionar una API a los demás módulos para que accedan a las bases de datos de manera segura y eficiente.
  • Ocultar la base de datos que utilice el programa para poder cambiarla si fuera necesario.
  • Gestionar otros problemas posibles que esto generaría (versiones diferentes de base de datos en versiones actualizadas del programa, por ejemplo).

Abstracción al problema

HD Lorean se encarga de gestionar un importante volumen de información: cuántas instantáneas existen, a qué archivo pertenecen, la fecha en que fueron creadas, u otras informaciones como su tamaño o un checksum para validar que la restauración ha sido bien hecha y no hay posibles corrupciones de datos. También almacena los cambios que se fueron realizando en orden, para poder deshacer mediante ese orden si se usa la "barra de tiempo" comentada en los casos e historias de uso.

Abstracción a la solución

Para poder tratar eficientemente toda esa información se opta por la tecnología establecida de bases de datos, a fin de reutilizar soluciones y de no tener que preocuparnos en exceso por problemas de integridad de esos datos (fundamental), o de concurrencia en los accesos. Utilizar el lenguaje SQL nos permitirá realizar consultas relativamente complejas de un modo entendible (por ejemplo, "cambios en los archivos de determinada subcarpeta entre tal y tal fecha").

Además se necesitará bastante eficiencia (pues potencialmente estamos escribiendo una entrada por cada cambio que se realice, que pueden ser muchísimos en caso de una operación importante de archivos).

Tecnologías empleadas

Ante todo, hemos tratado de evitar depender de servidores externos (como una instalación completa de mysql o postgresql) porque se consideran dependencias demasiado importantes para una aplicación "de usuario", además de que no tienen por qué estar instaladas por defecto y suponen bastante overhead para nuestras necesidades al estar diseñadas para usos más "grandes". Además, depender de una base de datos standalone supone depender de un control de accesos (nombre de usuario y contraseña, base de datos bien configurada) que hace a nuestra aplicación más vulnerable.

Por tanto, se ha decidido utilizar una librería que proporcione la funcionalidad de "base de datos en un archivo" para poder realizar consultas SQL pero solo depender de una librería externa y no de ningún demonio adicional corriendo. El requisito de enlazar contra esta librería, posiblemente de modo estático, nos obliga a buscar entre licencias GPL-compatibles, y ello nos ha dejado como opción sqlite3, que ofrece gran cantidad de funcionalidades para la gestión de bases de datos tanto en C como en C++, como nosotros estamos trabajando en python usaremos un conector llamado pysqlite2. Además, sqlite está sobradamente probado en el mundo del software libre por proyectos que hacen importante uso de él como rhythmbox o amarok.

He aquí unos ejemplos de como funciona esta librería a modo de tutorial.

Conclusión

Un envoltorio sobre sqlite3 es una buena opción para implementar este módulo ya que es similar a las tecnologías que ya conocemos (MySQL, ó SQL en general) y tiene una API online bastante clara.

Para realizar este módulo necesitaremos una buena comunicación con los responsables del resto de módulos, que nos tendrán que definir con claridad la información que requieren del sistema a fin de diseñar correctamente las bases de datos y crear las funciones que encapsulen las llamadas SQL.

Comentarios:

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License