Aplicaciones JEE - Bases de datos SQL y NOSQL
La
arquitectura Java Empresarial permite conectar virtualmente con todas
las bases de datos que están en el mercado y desde cualquier
plataforma donde estén desplegadas las aplicaciones.
En
este artículo vamos a revisar las principales bases de datos de
código abierto que podemos utilizar de manera gratuita en la
construcción de nuestras aplicaciones.
Las
bases de datos vamos a agruparlas en:
- Bases de datos SQL. Basadas en el modelo relacional propuesto por Codd en 1967. El motor (programa que permite gestionar el acceso y las operaciones sobre la base de datos) actúa sobre la información agrupada en estructuras denominadas tablas (formadas por filas y columnas) que representan entidades de un modelo de datos. Los valores únicos de determinadas filas permiten relacionar desde el punto de vista lógico una tabla o entidad con otras. Para operar con los datos almacenados en bases de datos relacionales se utiliza un lenguaje estándar denominado SQL (Structured Query Language o lenguaje estructurado de consulta).
- Bases de datos NOSQL. No están basadas en el modelo relacional clásico. El motor trabaja no sobre tablas de estructura fija de filas y columnas, sino sobre información estructurada en filas que pueden tener distinto tamaño. Por lo general utilizan un modelo clave-valor para almacenar y recuperar la información por lo que el motor es mucho más robusto, simple y rápido, pero no soportan operaciones como JOIN (operación que permite recuperar información combinada de más de una tabla) ni utilizan el SQL como lenguaje de manipulación de los datos.
Ambos
enfoques son perfectamente válidos y existen herramientas probadas
para implementar su uso en las aplicaciones programadas en Java o en
cualquier otro lenguaje.
De
la misma manera que en la naturaleza existe la biodiversidad, en
informática existe una gran diversidad de enfoques, paradigmas y
herramientas para resolver prácticamente cualquier tipo de problema.
¿Que
base de datos hay que elegir?
La
base de datos tendrá que ser la adecuada para el dominio del
problema que queremos resolver.
Por
ejemplo, si tenemos una base de datos de cliente donde hay que hacer
una búsqueda teniendo en cuenta la edad, el color de los ojos, la
ciudad, provincia o país en que vive un cliente, la mejor solución
sería emplear un motor de base de datos relacional porque
necesitamos un lenguaje de consulta que sea flexible, que permita
condiciones, rangos de valores, etc.
Es
evidente que el lenguaje SQL ofrece mucha potencia para manipular los
datos de muchas formas diferentes, sin embargo en situaciones donde
no necesitamos utilizar la potencia de este lenguaje, quizás la
inclusión de un motor relacional en la aplicación puede ser
excesiva o inadecuada.
Por
ejemplo, imaginemos que tenemos guardados los datos de clientes
ordenados por una clave que es su número de identidad (DNI). Nuestra
aplicación tiene una pantalla de entrada de datos muy simple: le
damos buscar un DNI y si existe recupera todos los datos, si no
existe nos muestra un mensaje de error.
Con
esta sencilla interfaz y forma de recuperar los datos, quizás el
motor adecuado es una base de datos NOSQL. Almacenamos grandes
volúmenes en forma de clave + valor y recuperamos haciendo búsqueda
por un único campo que es el DNI del cliente.
Otra
aplicación podría ser una base de datos de huellas dactilares como
las que usan los sistemas AFIS (Automated Fingerprint Identification
System).
En
la clave ponemos un vector formado por patrones de las huellas y en
valor los datos de la persona a la cuál corresponden.
La
búsqueda en un AFIS consistiría en leer cada una de las claves,
separar los patrones de las huellas registradas, comparar la huella
que tenemos cada uno de los patrones y si coincide con alguna detener
la búsqueda y mostrar la información correspondiente a la persona.
Bases
de datos SQL de código abierto
A
continuación presentamos algunas de las bases de datos de código
abierto que pueden utilizarse en proyectos de Java Empresarial:
Producto
|
Descripción
|
Base
de datos relacional implementada completamente en Java muy fácil
de desplegar y utilizar. Contiene un driver embebido JDBC y un
motor que ocupan unos 2.6 MB solamente y se distribuye bajo
licencia Apache Licence 2.0. La versión de Derby incluida en el
JDK de Oracle se denomina Java DB. Ultima versión: 10.8.2.2
|
|
Es
una base de datos relacional totalmente escrita en Java con un
motor pequeños, con soporte multihilos y soporte transaccional,
con tablas en memoria o en disco y que puede ser desplegada en
modo embebido (distribuida junto con la propia aplicación) o en
modo servidor (desplegada en un servidor). Soporta prácticamente
todo el dialecto ANSI SQL-92 y es muy estable y fiable. Ultima
versión: 2.2.9
|
|
Otro
motor de base de datos relacional escrito en Java. H2 es muy
pequeño (un archivo JAR de alrededor de 1 MB), rápido, soporta
modo embebido y modo servidor, búsqueda de textos, driver ODBC,
encriptación y concurrencia multiversiones. Ultima versión:
1.3.167
|
|
Motor
de base de datos relacional escrito en ANSI C. Soporta
transacciones ACID (atómicas, consistentes, aisladas y durables)
y casi todo el dialecto ANSI SQL-92. Es muy rápido, con una
interfaz (API) muy simple y puede tener bases de datos del orden
de los terabytes y cadenas de caracteres del orden de los
gigabytes. Es multiplataforma y es la base de datos embebida más
popular en los smartphones (Apple iOS, Google Android, Blackberry
OS). Ultima versión: 3.7.14
|
|
Es
un sistema de gestión de base de datos relacional muy potente con
más de 6 millones de instalaciones escrito en C/C++. Es
multiplataforma y presenta numerosas interfaces escritas en
distintos lenguajes de programación (C, C++, Pascal, Java, Perl,
PHP, Ruby, Python, etc.) Utiliza los motores MyISASM e InnoDB. Su
popularidad en la Web está ligada al PHP y los servidores
LAMP/WAMP/MAMP (Linux/Windows/Mac OSX Apache MySQL PHP). Ultima
versión 5.5.27.
|
|
Es
un sistema de base de datos relacional derivado de MySQL con
licencia GPL. Utiliza dos motores nuevos: Aria y XtraDB y presenta
una alta compatibilidad con MySQL desde el punto de
vista de aplicación. Este servidor surge tras la compra de Sun
Microsystem por Oracle, quien cambió la licencia de MySQL por una
privativa. Michael Widenius, uno de los fundadores de MySQL, creó
este proyecto derivado para ofrecerlo a la comunidad con licencia
GPL. Ultima versión: 5.5.27
|
|
Es
un sistema de base de datos orientado a objetos que cumple con los
estándares SQL-92 y SQL-99. Se distribuye bajo licencia BSD. Se
caracteriza por su gran variedad de tipos nativos como direcciones
IP o direcciones MAC, soporte de alta concurrencia,
multiplataforma (UNIX, Windows, Linux), soporta datos para objetos
multimedia (binary large objects) incluyendo fotos, sonido o vídeo
y posee numerosas interfaces de programación
escritas en C/C++, Java, Perl, Python, Ruby y lenguajes de la
plataforma Microsoft .NET. Última versión: 9.2.1.
|
Bases de datos NOSQL
de código abierto
Estas son algunas bases
de datos NOSQL que podemos utilizar en nuestros proyectos de Java
Empresarial:
Producto
|
Descripción
|
Sistema
de gestión de base de datos NOSQL que emplea el formato JSON para
almacenar los datos y JavaScript como lenguaje de consulta. Cada
base de datos es una colección de documentos independientes. Cada
documento mantiene sus propios datos y esquema autocontenido.
Todos los documentos tienen que tener un identificador único.Puede
operar desconectada (offline). Soporta interfaces para Java,
JavaScript, PHP, Ruby, Python, Erlang, Perl y otros. Última
versión: 1.2
|
|
Sistema
de gestión de base de datos NOSQL que guarda los documentos en
formato JSON con un esquema dinámico (MongoDB le llama a este
esquema BSON) facilitando la integración de los datos en las
aplicaciones. Se ejecuta en Linux, Windows, Mac OSX y Solaris y es
utilizada por empresas como MTV Network, Craiglist o Foursquare.
Soporta búsqueda por campos, consultas de rangos, expresiones
regulares, indexación, replicación y balanceo de carga. Soporta
interfaces para Python, Java, Ruby, PHP y Perl.Última versión:
2.2.0
|
|
Sistema
de gestión de base de datos NOSQL orientada a documentos
multiplataforma (Linux, Mac OSX, Windows). Posee una interfaz de
programación para C++, Java y PHP. Última versión: 0.120120923
|
|
Es
un sistema de gestión de base de datos NOSQL de alto rendimiento,
altamente escalable, modelada según la base de datos de Google
BigTable. Posee una interfaz de programación para Java, C++, PHP,
Python, Perl y Ruby.Última versión: 0.9.6.4
|
3 comentarios:
Hola, buen articulo, quisiera agregar que en las bases de datos documentales como djondb o mongodb puedes hacer consultas parecidas a las relacionales, pero directamente sobre el json, a esto se le conoce como Consultas ad-hoc, por ejemplo, si tienes un documento como:
{ nombre: "Pepe", apellido: "Cortez", edad: 33
}
podrias obtener una consulta de los clientes mayores de 30 asi:
find("mydb", "clientes", "$'edad' > 30");
(esto en djondb)
pero aun más complejo puedes hacer algo asi:
{ nombre: "Pepe",
apellido: "Cortez",
edad: 33,
heroes_preferidos: [ { nombre: "Spiderman"}, { nombre: "Batman" }]
}
y hacer una consulta como:
find("mydb", "clientes", "$'edad' > 30 and $'heroes_preferidos.nombre' == 'Batman'");
y te retornara todos los clientes que tienen preferencia por Batman.
Realmente se puede hacer cosas muy parecidas a SQL con las bases de datos NoSQL tipo documento , en especial con djondb (base de datos que yo represento), la diferencia es que no puedes hacer consultas con "joins" entre tablas.
Felicitaciones por promover este tipo de tecnologias entre la comunidad de habla hispana.
Juan Carlos, muchas gracias por tu importante comentario sobre las bases de datos NoSQL.
muy bueno, gracias y adelante
Publicar un comentario