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





posted under , , , |

3 comentarios:

Unknown dijo...

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.

Jose Manuel Ayala Wilson dijo...

Juan Carlos, muchas gracias por tu importante comentario sobre las bases de datos NoSQL.

pp dijo...

muy bueno, gracias y adelante

Publicar un comentario

Entrada más reciente Entrada antigua Inicio