En el Mundo Open/Free, cabe destacar que una de las áreas más fuertes y de continuo desarrollo es el de los sistemas de Bases de Datos Relacionales, en parte gracias a comunidades históricas de desarrollo como la de PostgreSQL (con ya 16 años) o a empresas comerciales de software OpenSource1 con todo un equipo de desarrollo trabajando exclusivamente, como el caso de SleepyCat y MySQL AB (la primera desarrollando la Berkley DB y la segunda MySQL Server y MAX DB), y también gracias a una movida de grandes empresas desarrolladoras de Bases de Datos liberando el código de sus DBMS como IBM, Borland, SAP AG, Computers Associates.
Gracias a la conjunción de todos estos factores, nos encontramos en la actualidad con sistemas de Bases de Datos OpenSource/Free tan potentes como los sistemas comerciales, se analizaran principalmente los dos productos más famosos y utilizados dentro del mundo Open/Free, MySQL y PostgreSQL, se hará también mención a Firebird, sistema sucesor del InterBase 6.0 de Borland y que gracias a ello ya posee también todas las funcionalidades de los grandes DBMS sin haber que tenido que pasar por el proceso de maduración de un producto Open/Free y hoy día esta tomando fuerza en la disputa de los Sistemas de Bases de Datos OpenSource.
Probablemente el servidor de base de datos open source más popular en el mundo sea MySQL [115]. Cuenta con más de 5 millones de instalaciones activas y rápidamente se esta convirtiendo en parte fundamental de muchas aplicaciones críticas de negocio con manejo de datos de alto volumen. MySQL es desarrollado por MySQL AB, dicha empresa tiene alrededor de 60 desarrolladores trabajando para sus productos.
Entre sus usuarios encontramos a Yahoo!, Google, Cisco, HP y la NASA. Dichas empresas han obtenido ahorros significativos utilizando software MySQL para potenciar sitios web de gran magnitud, aplicaciones empresariales de negocios críticas y aplicaciones de software cerrado.
La popularidad de MySQL se dio principalmente gracias a que fue utilizada en miles de sitios web por las características que las versiones tempranas ofrecían para aplicaciones de esta índole, dado que el 80% de las operaciones sobre bases de datos en los sitios web es solamente de consultas, MySQL era el favorito dada su velocidad para consultas (en parte por su motor de almacenamiento no-transaccional). Con el correr del tiempo, se fueron agregando funcionalidades, más compatibilidad con los estándares SQL y motores de almacenamiento transaccionales. Lo que fue en un principio una Base de Datos tipo "juguete" para desarrolladores de sitios web, se convirtió en todo un DBMS que hoy día rivaliza con los sistemas de Bases de Datos comerciales más poderosos.
Escrito en C y C++.
Soporte para varias plataformas, entre ellas MS Windows y GNU/Linux.
APIs para C, C++, Eiffel, Java, Perl, PHP, Python, Ruby, Tcl
Fácilmente capaz de utilizar múltiples CPU's y multi-threading
Sistema basado en threads para alocación de memoria
Joins rápidos utilizando técnicas optimizadas de one-sweep multi-join.
Soporte ACID si se utiliza el motor de almacenamiento InnoDB (el sistema original de MySQL no era transaccional), licenciado GPL.
Utilización de tablas de hash en memoria, que son utilizadas como tablas temporales
El código de MySQL es testeado con Purify (detector comercial de leaks de memoria) así también como con Valgrind, herramienta GPL
El Servidor está disponible para utilizarse como un programa separado para trabajar en un ambiente de cliente/servidor por red. También se encuentra disponible bibliotecas que pueden ser embebidas para aplicaciones standalone
Cuenta con un conjunto muy completo de tipos de datos según la especificación SQL2003 (ver apéndice 7.3), también cuenta con tipos de datos propios (enteros con signo y sin signo de 1, 2, 3, 4, y 8 bytes de largo, FLOAT, DOBLE, CHAR, VARCHAR, TEXT, BLOB, DATE, TIME, DATETIME, TIMESTAMP, YEAR, SET, ENUM, y tipo de datos geométricos OpenGIS) .
Registros de largo fijo y variable.
Soporte completo de operadores y funciones en las cláusulas SELECT y WHERE
Soporte completo para cláusulas SQL GROUP BY y ORDER BY . Soporte para funciones de grupo (COUNT(), COUNT(DISTINCT ...), AVG(), STD(), SUM(), MAX(), MIN(), and GROUP_CONCAT()).
Soporte de LEFT OUTER JOIN y RIGHT OUTER JOIN con sintaxis standard SQL y ODBC .
Soporte de aliases en tablas y columnas como están definidas para el standard SQL.
DELETE, INSERT, REPLACE, y UPDATE retornan la cantidad de filas afectadas.
El comando específico de MySQL SHOW puede ser utilizado para devolver información referente a Bases de datos, tablas e índices.
Comando EXPLAIN para determinar como el optimizador resuelve una consulta
Se pueden juntar tablas de distintas bases de datos en una consulta.
Sistema flexible y seguro de privilegios y passwords, permite verificación host-based.
Todo tráfico de passwords es encriptado cuando se conecta al servidor.
Se han reportado Bases de datos con 50 millones de registros. Se han constatado usuarios que utilizan el servidor con 60000 tablas y 5TB de información almacenada.
Hasta 64 índices por tabla.
Cada índice puede consistir de 1 a 16 columnas o parte de columnas.
Los clientes se pueden conectar al servidor vía TCP/IP sockets en cualquier plataforma. (En Windows con named pipes, en sistemas UNIX los clientes se conectan vía archivos de sockets)
La interfaz Connector/ODBC provee soporte para programas cliente que utilizan conexiones ODBC (Open Database Connectivity). Los clientes pueden correr en UNIX o Windows. El código fuente de Connector/ODBC esta disponible.
Todas las funciones de ODBC 2.5 (actualmente muchas también de ODBC 3.0) están soportadas,así también como muchas otras.
La interfaz Connector/JDBC provee soporte para programas cliente Java que utilizan conexiones JDBC. Los clientes pueden correr en UNIX o Windows. El código fuente de Connector/JDBC esta disponible.
El servidor provee mensajes de error en varios lenguajes.
Soporte completo para diferentes sets de caracteres, incluyendo p.ej. latin1 (ISO-8859-1), german, big5, ujis, etc. Soporte Unicode esta también disponible.
Los datos son guardados en el set de caracteres elegido.
Operaciones de Sorting son hechas de acuerdo al set de caracteres elegido.
El servidor MySQL cuenta con soporte built-in para sentencias SQL para chequeo, optimización y reparación de tablas. Estas sentencias están disponibles desde línea de comandos vía el cliente mysqlcheck.
MySQL incluye también myisamchk, una utilidad muy rápida de línea de comandos para realizar estas operaciones en tablas MyISAM
Todos los programas MySQL se puede invocar con las opciones --help o -? para ayuda online
MySQL AB desarrolló las herramientas gráficas, MySQL Control Center y MySQL Administrator para administración
El sitio de developers de mySQL cuenta con una vasta documentación acerca de los productos mySQL. [128]
MaxDB es un sistema de de Base de datos de nivel empresarial que una vez fue conocido como SAP DB.
La historia de SAP DB remonta hacia los años 80, originalmente fue desarrollado como un producto comercial (Adabas), cuando la empresa SAP AG tomó el desarrollo, pasó a llamarse SAP DB. SAP AG desarrolló dicho Motor de Base de datos para que sirviera de sistema de almacenamiento para aplicaciones SAP de gran porte (llamadas R/3).
SAP DB fue concebida como una alternativa a productos de terceros para SAP R/3, como lo son Oracle, SQL Server y DB2.
En octubre de 2000 SAP AG libera SAP DB bajo licencia GPL, de ese entonces hasta principios del 2004 cerca de 2000 clientes de SAP AG utilizan SAP DB.
En mayo de 2003, se forma una sociedad entre MySQL AB y SAP AG, en la cual el desarrollo de SAP DB queda a cargo de MySQL AB, luego en octubre de 2003 SAP DB pasa a llamarse MAX DB.
MAX DB trabaja de la forma Cliente/Servidor y esta diseñado para soportar grandes cargas de OLTP (On-Line Transaction Process), tanto backup como expansión online del sistema están soportados.
Diferencias más significativas:
MAX DB funciona en modalidad Cliente/Servidor, MySQL también lo puede hacer como sistema embebido en la aplicación.
MAX DB utiliza un protocolo de red propietario, MySQL utiliza TCP/IP (con o sin SSL), sockets (en sistemas UNIX) o named pipes (sistemas Windows NT)
MAX DB implementa procedimientos almacenados y disparadores (triggers).
MAX DB soporta muchas de las interfaces de lenguajes que también soporta MySQL, sin embargo MAX DB no soporta RDO, ADO o .NET que si son soportados por MySQL, además MAX DB solo soporta SQL embebido con C y C++
MAX DB contiene herramientas administrativas como planificación de trabajos por tiempo, eventos, alertas y envío de mensajes al administrador por activación de alertas.
La empresa MySQL AB utiliza un sistema de licenciamiento dual para sus productos, si MySQL o MAX DB son utilizados para proyectos GPL, utiliza la licencia GPL, pero si se quiere desarrollar y utilizar código de alguno de los productos embebido en sistemas cerrados o el proyecto no se adecua al licenciamiento GPL de los productos de MySQL AB, la empresa ofrece un licenciamiento comercial (el cual es más barato que cualquier licencia de DBMS comercial).
Desde su concepción, PosgtreSQL [112] (anteriormente POSTGRES) fue diseñada para ser un sistema de Bases de Datos relacional completo, que estuviera a la par de sus homónimos comerciales (IBM DB2 UDB u Oracle DB, etc.). PostgreSQL es una mejora del sistema de Base de Datos POSTGRES, ya que mantiene los puntos fuertes de su antecesor como ser su poderoso modelo de datos y toda su riqueza en cuanto a tipos de datos, y remplaza el lenguaje de consultas PostQuel con un subconjunto más extenso de SQL.
PostgreSQL esta licenciado bajo BSD. Se considera también que PostgreSQL es un proyecto OpenSource mucho más puro, ya que no tiene empresas comerciales detrás como ser MySQL o Firebird (en un principio fue Borland).
Grandes corporaciones, instituciones gubernamentales y pequeños negocios en línea usan PostgreSQL para aplicaciones de misión crítica. Cuenta además con una historia de desarrollo de 16 años, una de las comunidades de desarrollo más fuertes del mundo y una reputación global de una alta calidad de ingeniería de software.
Actualmente PostgreSQL corre en la mayoría de las plataformas UNIX, en particular GNU/Linux, a partir de la versión 8 (beta) corre nativamente en sistemas basados en Windows NT como ser WinXp, Win2000, Win2003.
Versiones de Windows basadas en MSDOS como ser Win95/98/Me pueden correr PostrgreSQL utilizando Cywin.
Existe también un port para Novell Netware 6.
Soporte completo ACID, cumple con ANSI SQL e integridad referencial.
Replicación (soluciones comerciales y no comerciales) que permite la duplicación de bases de datos maestras en múltiples sitios de réplica.
Implementa WAL (Write-Ahead Logging), esta es una implementación estándar para logging de transacciones, el concepto central bajo WAL es que los cambios de los datos deben de hacerse efectivo luego de haber sido registrados en el log, el beneficio obvio es el de la reducción de escrituras en disco ya que solo se escribe el log en disco al momento de commit, el otro beneficio es el que se puede asegurar la consistencia de la base en caso de que el servidor se cuelgue.
Hot Backup.
Interfaces incluidas en la distribución : C (libpq), C embebido (ecpg),Java (jdbc), Python (PyGreSQL), TCL (libpgtcl).Existen también las siguientes interfaces : .Net Data Provider (Npgsql), C++ (libpq++), ODBC (psqlODBC), interfaz nativa Perl (pgperl), libpq para PalmOS, Object Pascal, PHP, Ruby,etc.
Implementa herencia entre tablas (como la herencia en programación de objetos).
Es considerado uno de los más completos en cuanto a tipos de Datos tanto cumpliendo con el estándar SQL2003 (ver apéndice 7.3) así como en tipos de datos propios, inclusive cuenta con tipos de datos más modernos como tipos de datos geométricos para el soporte de sistemas de información geográficos (OpenGIS) aunque aún faltan algunos tipos de datos importantes como BLOB y CLOBS.
También aquí PostgreSQL es considerado de los más completos DBMS en conformidad con el estándar SQL así como con funciones propias.
Soporte para: Vistas, Triggers, Secuencias, Outer Joins, Sub-selects, Stored Procedures.
Funciones de compatibilidad para ayudar en la transición desde otros sistemas menos compatibles con SQL.
Soporte para consultas con UNION, UNION ALL y EXCEPT.
EXPLAIN de consultas para ver como se optimizan las mismas o para ayudar a optimizarlas.
Extensiones para SHA1, MD5, XML y otras funcionalidades.
Tamaño máximo para una base de Datos 32 TB.
Tamaño máximo para una tabla 32 TB.
Tamaño máximo para una fila 1.6TB.
Tamaño máximo para un campo 1 GB.
Número máximo de filas en una tabla ilimitado.
Número máximo de columnas en una tabla 250-1600 (dependiendo del tipo).
Número máximo de índices sobre una tabla ilimitado.
La palabra "ilimitado" representa un límite virtual ya que todo esta limitado al espacio en disco y memoria/swap que se disponga. El máximo tamaño de tabla no requiere soporte de archivos especial por parte del sistema operativo ya que dichas tablas se almacenan en múltiples archivos de 1 GB.
Permite autenticación host-based.
Soporte nativo SSL.
Autenticación Kerberos nativa.
En esta área, podemos afirmar que, los mensajes de los programas de Postgresql (servidor y clientes) pueden ser presentados en diferentes idiomas, siempre y cuando hayan sido traducidos los catálogos de mensajes.
PostgreSQL utiliza el estándar ISO C y POSIX que provee el sistema operativo para la localización (locale).
Soporte completo para diferentes sets de caracteres, incluyendo p.ej.: latin1 al 10 (ISO-8859-1), UNICODE, SQL_ASCII. WIN, etc.
Los datos son guardados en el set de caracteres elegido.
Existen varias herramientas gráficas de alta calidad para administrar las bases de datos:
pgAdmin III
pgAccess
Para hacer diseño de bases de datos:
Tora
Data Architect
PostgreSQL también cuenta con herramientas para generar SQL portable para compartir con otros sistemas compatibles con SQL.
Existe extensiva documentación de PostgreSQL incluida con la distribución así también como los manuales oficiales Online y libros Online en el sitio postgreSQL.org .
También en el sitio se encuentra una colección de artículos técnicos [113].
Está también la ayuda de línea de comandos del cliente psql.
Históricamente y actualmente también, las afirmaciones que se pueden recabar para los dos Sistemas de Bases de datos Open/Free más famosos son:
MySql
Es más adecuado para Bases de datos pequeñas y con pocos usuarios concurrentes.
Es la plataforma ideal para aplicaciones Web de porte chico o mediano (la solución Linux-Apache-MySQL-Php es legendaria).
Es más performante y consume menos recursos.
Es el más estable de los DBMS Open/Free.
Consultas simples se realizan de forma muy rápida
El sistema de bloqueo no es muy eficiente.
No se recomienda utilizarlo en aplicaciones críticas de negocios (por ejemplo Software para Bancos o Aplicativos de Contabilidad).
Carece de funcionalidades más avanzadas como ser Stored Procedures, triggers, subquerys, transacciones, vistas, claves foráneas, etc.
PostgreSQL
Es mucho más adecuado para aplicaciones de negocios grandes y con muchos usuarios concurrentes.
Es el más estable de los DBMS Open/Free.
Tiene el mejor soporte de los estándares SQL 92 y SQL 99 del los DBMS Open/Free.
Es el único que tiene funcionalidades avanzadas a la par de Sistemas Comerciales de DBMS.
Es el más completo en cuanto a tipos de datos definidos (según especificación SQL 2003).
Consultas complicadas las realiza más rápido que otros DBMS Open/Free
Es más lento que otros DBMS para consultas sencillas.
Los límites de tamaño de los registros son chicos 8k o 32 k.
Un poco de cierto, un poco de mito, actualmente la realidad dicta que aparentemente ambos sistemas están convergiendo en un punto medio.
MySQL ya tiene soporte transaccional y bloqueo a nivel de registro (con InnoDB) y para siguiente versión, la implementación de vistas, triggers, stored procedures entre otras cosas, existen benchmarks que señalan que MySql esta a la par de Oracle en cuanto a performance en pruebas de carga de varios usuarios
Mientras tanto PostgresSQL en cada release, esta apuntando a mejoras significativas de performance y los límites de tamaños de tablas, registros, cantidades de índices por tablas se han vuelto virtualmente "ilimitados".
Ambos sistemas de DBMS en la actualidad tienen todas las cualidades para soportar todo tipo de aplicativo que requiera un Servidor de Bases de datos robusto, performante y con funcionalidades avanzadas. La decisión ya no depende de limitantes históricas como ser "utilizar postgreSQL si se necesita transacciones" o "utilizar MySQL si los registros son de un tamaño mayor a 32k".
Lo cierto es que como solución integral para PyMEs, hoy en día, ambos paquetes cubren ampliamente cualquier requerimiento que se le pueda presentar, desde aplicaciones web, aplicaciones críticas de negocio, soporte para otros paquetes como ser Servidores de correo, servidores de MI, Groupware, ERP's. En casos particulares que ameriten, la coexistencia de ambos DBMS se da sin problemas.
El 25 de julio de 2000, Borland libera bajo la licencia, aprobada por OSI InterBase, Public License (similar a la MPL), el código fuente de InterBase 6.0 (cuya primera versión data de 1984), a partir estos fuentes comienza a desarrollarse por un equipo independiente de la empresa de voluntarios el motor de bases de Datos Firebird, la versión actual 1.5 es fundamentalmente el traspaso del código en C a C++, lo que implicó una gran limpieza en el código.
De todas formas Firebird 1.0.x [123] continúa manteniéndose de forma activa, con la corrección de errores y la inclusión de mejoras tomadas de la versión 1.5.
Los puntos fuertes de Firebird son claramente heredados de Interbase, cubre prácticamente todas las características de sistemas de Bases de Datos comerciales. Los desarrolladores de Firebird afirman que el producto es muy poderoso pero sin embargo muy liviano y requiere mínima configuración y administración.
Es un sistema muy escalable pudiendo pasar de sistemas con solo un usuario en una sola base de datos a Sistemas para empresas. Un solo servidor Firebird es capaz de manejar múltiples bases de datos independientes, cada una con sus múltiples conexiones de clientes.
Transacciones A.C.I.D, Control completo de transacciones: una aplicación puede tener transacciones múltiples concurrentes, los niveles de aislación pueden ser controlados por el cliente, soporte para commit de dos fases.
"Multi-Generactional Architecture", permite que el motor de DB pueda manejar varias versiones del mismo registro físico, así cada transacción tiene su versión no importando otras transacciones concurrentes.
Soporte para Stored Procedures, Triggers, UDF (User Defined Functions) externas (pueden ser escritas en C, C++ o Delphi).
Backups Online .
Implementa varios set de caracteres incluyendo UNICODE .
Implementa completamente el nivel de entrada 1 del standard SQL-92 y la mayor parte del standard SQL-99, FULL/LEFT/RIGHT [OUTER] JOINs, sentencias UNION, DISTINCT subselects, implementa los tipos de datos SQL más comunes.
Conectividad: interfases nativas para C/C++, Delphi, ODBC, JDBC, PHP, OLEDB, Net data provider y llamadas directas mediante la API fbclient (.dll o .so).
El límite teórico de Firebird para una Bases de datos de una sola tabla es de 64 TB, el límite práctico lo da el sistema operativo, el sistema de archivos o el almacenamiento del que se disponga. El máximo número de índices para una tabla es de 256.
Existen tres versiones del motor de Firebird, todos comparten el mismo formato de almacenamiento de BD, y se pueden intercambiar según se necesite sin ninguna consecuencia sobre los datos.
Servidor Clásico: una instancia por conexión de cliente, soporta SMP (Symmetric Multiprocessing) en sistemas de más de una CPU.
SuperServer: todas las conexiones son manejadas por un módulo único.
Versión Embebida: todo el motor en un archivo .dll o .so para utilización de usuario único y base de datos única.
Windows, Mac OS X, Solaris and HP-UX. La migración de una plataforma a otra es muy sencilla ya que tiene la facilidad de respaldar las bases de datos utilizando lo que se llama Formato Transportable, luego se recupera en el otro Sistema Operativo
Uno de los posibles problemas de Firebird es que la documentación en general consta de una quick-guide y la documentación de la Interbase 6.0 Beta, la documentación oficial (de InterBase 6.0) sale US$ 50. Sin embargo, no se puede considerar mucho problema ya que la base de datos de conocimiento del sitio de firebird, tiene varios aportes de usuarios y referencias a falta de documentación oficial técnica.
Vemos que Firebird tiene todas las características para soportar cualquier tipo de aplicación para una pequeña o mediana empresa, también cuenta con las características para ser utilizada como soporte para aplicaciones para empresas como ser: Servidores de Correo, Mensajería instantánea, Groupware, etc.
Lo que es palpable, es que por su tardía entrada en el mundo Open/Free no está teniendo la misma fuerza ni adopción que sus dos principales contendientes, que fueron adoptados ya como los estándares de facto al hablar de DBMS's Open/Free (estamos hablando de MySQL y PostgreSQL).
En parte, esto se debe, a que los usuarios de estos dos sistemas ya están más que satisfechos con lo que le brindan dichos productos, pero de todas formas resulta una alternativa atractiva e interesante a tener en cuenta.
1Llamadas Empresas de Segunda Generación de OpenSource dado sus licenciamientos tanto compatibles con OSI como licenciamientos comerciales.
Estudio del Open/Free (GNU/Linux) como plataforma de servicios de red en entornos empresariales
Daniel Caraballo - Mario Madera - Marcelo Odin
Tutor: Ariel Sabiguero Yawelak
2004 - 2005.