sábado, 14 de mayo de 2011

El Gestor de Base de Datos, Firebird

Firebird, es un sistema de administración de base de datos relacional (o RDBMS) SQL de código abierto, basado en la versión 6 de Interbase, cuyo código fue liberado por Borland en 2000. Su código fue reescrito de C a C++. 


Características

  • Es multiplataforma, y actualmente puede ejecutarse en los sistemas operativos: Linux, HP-UX, FreeBSD, Mac OS, Solaris y Microsoft Windows.
  • Ejecutable pequeño, con requerimientos de hardware bajos.
  • Arquitectura Cliente/Servidor sobre protocolo TCP/IP y otros (embedded).
  • Soporte de transacciones y claves foráneas.
  • Es medianamente escalable.
  • Buena seguridad basada en usuarios/roles.
  • Diferentes arquitecturas, entre ellas el Firebird empotrado (embedded server) que permite ejecutar aplicaciones monousuario en ordenadores sin instalar el software Firebird.
  • Bases de datos de sólo lectura, para aplicaciones que corran desde dispositivos sin capacidad de escritura, como cd-roms.
  • Existencia de controladores ODBC, OLEDB y JDBC.
  • Controlador nativo para PHP.
  • Requisitos de administración bajos, siendo considerada como una base de datos libre de mantenimiento, al margen de la realización de copias de seguridad y restauraciones periódicas.
  • Pleno soporte del estándar SQL-92, tanto de sintaxis como de tipos de datos.
  • Completo lenguaje para la escritura de disparadores (triggers) y procedimientos almacenados.
  • Capacidad de almacenar elementos BLOB (binary large objects).
Tipos de servidor
Existen dos tipos de servidor Firebird para ser instalados: “Classic” y “Super Server”. Si bien tienen varias diferencias menores entre si, la principal consiste en que el super server maneja hilos de ejecución individuales para cada conexión. Por lo tanto para un número reducido de conexiones el recomendado sería el classic porque consumirá menor cantidad de recursos.
Los propios desarrolladores de Firebird recomiendan lo siguiente a la hora de decidirse por uno de estos servidores:

•     En plataformas Windows seleccionar el Superserver.
•     En Linux simplemente elegir cualquiera, según las conexiones estimadas. En la mayoría de las situaciones no se notará diferencias en la ejecución.

Podría considerarse un tercer tipo, el Embedded. Éste consiste en una única DLL (de unos 2 MB de tamaño) que contiene todo el servidor. De esta forma se puede tener un DBMS completo disponible y distribuíble junto con aplicaciones de usuario.

Conceptos básicos
Para empezar, hay que entender que un servidor de base de datos -como Firebird/InterBase- es un proceso -es decir, un programa- ejecutándose en la computadora que se utiliza como servidor. Este proceso servirá de "intermediario" entre el programa cliente -que puede estar hecho con Power Builder, Java, Delphi, C++Builder, etc- y la base de datos física -en este caso, el archivo de base de datos, generalmente con extensión gdb-.
Este programa -Firebird/InterBase-, debe atender todas las órdenes que le hacen los programas cliente. Estas órdenes tienen que ver con alguna base de datos, por ejemplo: insertar un registro, modificar el valor de una columna de una tabla, modificar la estructura de una tabla, eliminar un registro, obtener un conjunto de registros, etcétera.
En el caso de los servidores de base de datos SQL, las órdenes deben ser escritas en ese lenguaje (SQL), pues es el único que el servidor entiende. Por ejemplo, para insertar un registro se debe escribir una orden INSERT, para eliminar uno o más registros se le debe dar una orden DELETE, etc.

Diferencias entre formatos de archivos y servidores SQL
Cuando utilizamos un formato de archivos (Paradox, dBase, Access), el programa cliente (hecho con Delphi/C++ Builder) utiliza una interfaz prefabricada de acceso a los archivos, como la BDE. Menciono el término prefabricada porque son bibliotecas de funciones precompiladas (DLL) las cuales al ser utilizadas por el programa cliente, permiten abrir, modificar y obtener datos de los archivos de datos (los archivos DB, DBF, MDB). Cuando utilizamos programas cliente que acceden a una base de datos localizada en un servidor de archivos, lo que estamos haciendo es que todos los programas cliente abren físicamente el archivo de datos, mediante un proceso que se ejecuta en cada computadora cliente.

Esta situación conlleva algunas “desventajas” como las siguientes:
  • Si alguna conexión de red o programa cliente tiene un problema, puede dañar el archivo de datos, ya que lo está abriendo directamente.
  • Las consultas a datos pueden llegar a ser muy lentas, ya que para seleccionar los registros de una consulta, cada programa cliente debe de pedir todo el archivo al servidor de archivos y toda esta información debe viajar por la red.
  • No se están aprovechando los recursos del servidor, solamente aquellos que optimizan el acceso a los archivos, dado que la máquina que ejecuta la consulta es la máquina cliente, además de que se crean cuellos de botella en la red, como se explica en el punto anterior.
Ahora veamos las “ventajas” de utilizar un servidor SQL:
  • Se minimizan los daños a la base de datos cuando falla uno de los programas clientes, pues lo peor que puede pasar es que se quede abierta una o más transacciones, las cuales posteriormente se pueden recuperar o eliminar.
  • Se aprovecha al máximo las capacidades del hardware del servidor, debido a que el proceso de consulta de datos es ejecutado por el servidor SQL, el cual corre sobre el servidor de hardware.
  • Se optimiza el tráfico en la red, debido a que cuando el servidor SQL devuelve los datos de una consulta al programa cliente, solamente envía el conjunto de datos producto de la consulta, y no el total de los datos de la tabla, como sucede cuando se utiliza un servidor de archivos.
  • Estas son únicamente las ventajas a nivel de acceso y transmisión de datos, ya que a nivel de seguridad e integridad tiene muchas más ventajas.
Programa para Administración de la Base de Datos
Personalmente utilizo IBExpert versión 2006.12.13, el cual es un gran Administrador para manejar las bases de datos de Firebird, es intuitivo y permite una gestión rápida de los objetos de la BD. En cuanto a la programación de disparadores y procedimientos almacenados presenta seguimiento paso a paso para identificar errores (debug).