Bases de Datos

Cual es la razón de ser de una Base de Datos ?

Antes de contestar eso, sería conveniente saber porque nuestro sistema requiere de una Base de Datos y no es capaz de prescindir de una base de datos en ciertas situaciones. La gran mayoría de la información en un sistema de computo se encuentra basada en un tipo de "File System" en archivos denominados "Flat Files". El tipo de "File System" generalmente depende del sistema operativo y la funcionalidad que se requiera de la información, Windows utiliza VFAT o NTFS , Sun utiliza NFS , Linux usa ext2 . A pesar que los detalles de un "File System" son complejos, para el usuario final el accesar los archivos ("Flat Files") y subdividirlos por directorio es una operación transparente, el sabe que genero un archivo presentación.ppt o clases.doc pero esta insulado de saber que es o como funciona un "File System".

NOTA: Aunque en el sentido más estricto de la palabra estos "Flat Files" puedan ser considerados "Bases de Datos", la Industria casi ha reservado el termino "Base de Datos" a productos o implementaciones que utilicen control de transacciones avanzadas, que cumplan con el "ACID test" mencionado a continuación.

Que sucede cuando ocurre una actualización o búsqueda en un "Flat File" ?. Tomemos el caso de una aplicación de servidor que realiza una búsqueda o actualización de usuarios en un "Flat File".

El archivo usuarios.txt contiene varios datos de los usuarios y la información se encuentra separada por espacios.El primer problema es realizar una búsqueda en este archivo "usuarios.txt": Una vez escrito un programa que realice la búsqueda este programa deberá leer TODO el archivo para localizar la información, si el archivo (usuarios.txt) contiene 1000 o 2000 usuarios cada vez que se requiera información es necesario leer TODO el archivo de nuevo y en una aplicación que realice varias búsquedas por segundo esto puede resultar ineficiente.

El segundo problema es la actualización de información, suponiendo que en el mismo instante se dan de alta dos usuarios, el programa que haya sido escrito debe agregar dos lineas al archivo "usuarios.txt" con la información adecuada. Dependiendo como haya sido escrito el programa pueden ocurrir tres cosas:

  1. Los dos usuarios son agregados al archivo "usuarios.txt" exitosamente.
  2. La información de uno de los usuarios se pierde.
  3. La información de ambos usuarios se combina y el archivo "usuarios.txt" se actualiza con basura .

El problema se agrava aún más cuando estas transacciones contienen información critica como una transacción financiera , donde se debe garantizar que un "deposito a cuenta" de un cliente genere una "deducción de cuenta" a otro. Que ocurre si se depositan $10,000 al "usuario X", pero a la mitad de la transacción el equipo de computo falla, y al "usuario Y" no se le deducen los $10,000 ?. Esta es la razón de ser de una Base de Datos.

Nótese que para sitios de Internet que no requieran de alta complejidad o control de transacciones , un "flat file" es una solución viable (Vea Lectura y Escritura de Datos en Perl )

ACID

Se dice que toda "Base de Datos" debe cumplir con la prueba del acido, denominada "ACID" (Atomicity,Consistency,Isolation,Durability).

Indexar

La prueba del Acido garantiza que nuestra información mantenga una forma consistente, pero aún falta otro tema importante que ataca una Base de Datos que un "Flat File" no puede proporcionar.

El acceso eficiente y rápido a la información.

Es posible Indexar un archivo como el mencionado anteriormente (usuarios.txt) y cargarlo en memoria, pero recordemos que este archivo puede llegar a contener miles de lineas de información y en cada ocasión que se realice una búsqueda el programa tendrá que tener preparado un índice para eficientizar la búsqueda, a pesar que existe la posibilidad de indexar un "flat file", cada vez que se realice una actualización al "flat file" será necesario leer TODO el archivo de nuevo para mantener la información vigente ( DOM en XML soluciona algunos de estos aspectos ), aunado a esto existe el problema del uso del lenguaje secuencial que debe ser utilizado para actualizar el índice.

Como solución al uso del lenguaje secuencial surgió el modelo relacional (es por esto que muchos productos de Bases de Datos son denominados "RDBMS" "Relational Database Management Systems"), la mayor ventaja que presenta este modelo relacional es la utilización del lenguaje SQL ("Structured Query Language") que es un lenguaje declarativo ("declarative").Una gran parte de los lenguajes son de carácter secuencial ("procedural"), un programador debe indicar paso a paso que debe ejecutarse por medio de un procedimiento, los ejemplos clásicos son C,Fortran,Pascal....; en SQL el programador es capaz de declarar un funcionamiento : "deseo cumplir los siguientes requisitos".

Lo anterior presenta dos ventajas a un lenguaje secuencial , la primera es que las búsquedas no dependen de la representación de los datos, la base de datos es libre de guardar la información como a esta le convenga y la otra ventaja es la facilidad con la que se puede ejecutar una búsqueda o actualización sin la necesidad de escribir código fuente complejo.

Para realizar esta tarea cada base de datos contiene una parte denominada "optimizador" o "ejecución de búsqueda" que es el encargado de determinar: donde,como y que deberá ser ejecutado para realizar una actualización o búsqueda en la Base de datos.

Vendedores de Bases de Datos

Existen varios vendedores de Bases de Datos,pero quizás la marca que tiene mayor mercado es Oracle y en orden de uso posiblemente le sigan: Sybase, Solid, Postgres ,MySql y DB2; todas ofrecen las funcionalidades antes mencionadas y utilizan el lenguaje SQL, sin embargo, debido a la misma complejidad de las operaciones que se llevan acabo, cada vendedor utiliza diferentes algoritmos y diseños por lo que el migrar y aprender a utilizar un producto de cierta compañía requiere de un esfuerzo e inversión substancial.

Oracle es una de las Bases de Datos que ofrece mayor funcionalidad en muchas áreas ya que ofrece paquetes con operaciones lógicas por industria (orientaciones hacia SCM "Supply Chain Management" , servidor-páginas ("Web-Server") , CRM's , entre otras..., sin embargo su costo es de los más altos en la Industria oscilando desde $10,000 Dlls U.S hasta $750,000-$1,000,000 Dlls U.S dependiendo de las funcionalidades utilizadas y esto solo es el software básico , sin incluir administración o desarrollo de aplicaciones.

Ahora, dentro del ramo Open-Source existen varias alternativas que por su costo/beneficio quizás sobrepasen a Oracle, una de estas implementaciones es Postgres, aunque cabe mencionar también existen otras Bases de Datos Open-Source como: MySql o Interbase.

Links: