¿Siguen siendo las bases de datos relacionales la mejor opción?
La solución a la persistencia de datos ha estado tradicionalmente ligada a las bases de datos relacionales. La transición a la programación orientada a objetos, que bien podríamos dar por finalizada, no ha cambiado en absoluto este hecho.
Cuando realizamos aplicaciones, la mayoría organizamos nuestro modelo en una jerarquía de clases y luego garantizamos su persistencia en una base de datos relacional. Las diferencias entre el modelo de objetos y el relacional causa algunos problemas con los que los desarrolladores estamos acostumbrados a lidiar.
Uno de ellos es la forma de acceder a los datos. Por una parte tenemos nuestros grafos de objetos, que acostumbramos a utilizar para la "navegación" a través del modelo:
employee.department().manager().salary();Y por otro lado tenemos las consultas SQL para manejar el modelo relacional:
SELECT e2.salary FROM
employee e1, employee e2, department,
WHERE
e1.id = current_employee_id
AND
e1.department = department.id
AND
department.manager = e2.id
Con el tiempo muchos desarrolladores han renegado de incrustar sentencias SQL en su código Java, pasando a emplear mapeadores objeto-relacionales como iBatis, Hibernate, TopLink, etc. Estos frameworks han permitido delegar el problema de la falta de concordancia objeto-relacional en una librería externa que nos hace casi transparente (casi) la traducción de un modelo a otro.
La mejora de productividad que aporta el mapeo objeto-relacional tiene su contrapartida en el apartado de rendimiento. Con una solución más clásica como es el uso de consultas SQL a través de JDBC obtenemos un rendimiento mayor que el que obtendremos poniendo por medio un Hibernate, por ejemplo.
Algunos críticos de este tipo de frameworks no los critican solamente por su rendimiento sino porque consideran que no es el enfoque correcto a la falta de concordancia entre el modelo de objetos y las bases de datos relacionales.
Debería considerarse la posibilidad de almacenar nuestros objetos en una base de datos orientada a objetos, librándonos del problema que pretenden solucionar los frameworks de mapeo objeto-relacional.
Estas bases de datos tienen un rendimiento mayor a las relacionales, ya que los datos se guardan de una forma muy similar a la que tienen nuestros objetos en memoria. Esto provoca que el mayor nicho de mercado para estas bases de datos sea el de dispositivos móviles, donde bajar el consumo de recursos es prioritario y no hay un DBA que pueda optimizar y mantener la base de datos.
En el lado opuesto, en el de las aplicaciones que requieren poder escalar de forma masiva, tenemos soluciones para la persistencia que tienen mucho que ver con bases de datos orientadas a objetos. A poco que indaguemos en tecnologías del ámbito del grid computing como GigaSpaces o Coherence, veremos que tienen mucha relación con las ODBMS.
Creo que sería interesante un debate sobre el tema en JavaHispano.
¿Sigue teniendo sentido hoy en día almacenar un modelo de objetos en tablas relacionales?
Os dejo un enlace a un artículo de la competencia (InfoQ) en el que se exponen distintos puntos de vista: Java Object Persistency: State of the union.
Reader Comments