03 julio 2006

db4o, la gran promesa...

Comenzaré a relatar esta historia de acuerdo a los hechos reales que acaecieron durante este último mes en el cual he estado redactando mi anteproyecto de tesis y por ende he estado un poco alejado de mi blog pero ahora retomo todo y comparto con ustedes este mes de investigación, en el cual me he llevado gratas sorpresas.

Mi primer problema despues de haber definido mi tema para la tesis fue el seleccionar una metodología formal de desarrollo de software, tenía varias en mente pero no sabía cual sería la mejor para mi caso (desarrollo web) así que después de escuchar varias sugerencias el camino pareció ser más claro y finalmente me decidí por Rational Unified Process (RUP).

Inicialmente mi proyecto estaba pensado para ser desarrollado bajo PHP5 - MySQL pero al seleccionar RUP apareció un gran problema, ¿cómo hago persistir los objetos en el tiempo? esa pregunta no me la hecho sólo yo sino que gran parte de los desarrollaores que programan bajo el concepto de objetos pero que usan una base de datos relacional. Pero, ¿dónde está el problema? el problema es de conceptos, básicamente al tratarse de "mundos distintos", entiéndase bien este concepto ya que si analizamos un poco más el caso nos daremos cuenta que estamos trabajando con diferentes formas de pensar, esto es, el mundo de las bases de datos relacionales básicamente es la aplicación de las matemáticas a través de las teorías de conjuntos las cuales nos llevan a manejar la información en este caso en particular, y por su contraparte, el mundo de los objetos es un mundo abstracto, por ende, son paradigmas diferentes.

El problema que genera todo esto es que los objetos no se pueden almacenar en una base de datos relacional así como así, primero que nada se debe hacer un mapeo de los objetos para que puedan ser almacenados en una BD relacional, aunque muchos digan que esa es la mejor solución para mi no la es y estoy de acuerdo con los detractores de la idea ya que al ser 2 mundos incompatibles desde un comienzo, jamás serán compatibles por ser "mundos distintos". Por ejemplo, las clases soportan relaciones de muchos a muchos (N:N), en cambio este tipo de relaciones no están soportadas en un modelo entidad relación, la solución es crear una tabla intermedia para poder permitir las relaciones muchos a muchos.

Si buscan info en la web se darán cuenta que la solución al problema de impedancia de objetos creado al usar POO y modelo ER será usar un framework de persistencia de objetos como hibernate por ej. logrando resultados aceptables, pero si analizamos más a fondo el problema nos daremos cuenta que perdemos performance en nuestra aplicación, específicamente con los tiempos de respuesta y a mi parecer usar tecnologías diferentes lleva consigo el riesgo implícito de que en cualquier momento nuestra aplicación no cumpla con las espectativas deseadas.

Es así que despues de analizar multiples alternativas me encontré en mi camino con db4o (Database for objects) el cual es una base de datos para objetos y que puede ser utilizado por Java, .NET y Mono bajo licencia GPL.

La gran gracia que tiene db4o es que me permite hacer persistir mis objetos en el tiempo de forma transparente y sin tener que usar ningun framework de persistencia entre medio para almacenarlo en una base de datos relacional sino que directamente en una base de datos de objetos, lo cual le da una gran performance a mi aplicación al ser esta 100% orientada a objetos y por ende transparente.

Si ingresan al sitio oficial de db40 en español, podrán acceder a info más detallada de este maravilloso producto que promete dar una revolución en el mundo de las base de datos. Lo que más me llamó la atención es que se ha usado en proyectos de misión crítica y los resultados han sido fantásticos así que me animé y cambie por completo la estructura de mi proyecto y ahora será desarrollado con C# - db4o bajo mono, esperemos que todo resulte bien, estaré dando comentarios a medida que avance con mi programación.

y tú que esperas para animarte a probar db4o???

3 comentarios:

Anónimo dijo...

hi! soy estudiante y me gustaria si me puedes mandar un ejemplo de como se haria una base de datos orientado objetos entra varias tablas!! mi email es lelshadow@hotmail.com.. muchas gracias

Anónimo dijo...

Victor hoy apenas me vaje un codigo de la base de datos y es increible lo que hace realmente se acopla ami diseño de programación, realmente le veo futuro a esta base de datos, Yo soy programador de C# en .NET y siempre e utilizado SQL como repositorio de la información y cuando vez esto, como se acopla tu codigo. Es Increible.

Viktor dijo...

Primero que todo gracias por sus comentarios.

Como muy bien dices Pedro, es magnífico como db4o se integra de manera muy transparente en la proramación. De hecho yo en este momento me encuentro trabajando en C# con db4o y he quedado gratamente sorprendido con la facilidad de uso, lo transparente del proceso y lo mucho que me he ahorrado en código fuente para realizar el acceso a datos. Realmente se viene fuerte db4o en un futuro no muy lejano, las bases de datos orientadas a objetos no tienen nada que envidiarle a las relacionales, al contrario, creo que tienen mucho para ganar en el futuro ya que la tendencia es a la POO, mundo en el cual las bases de datos relacionales no tienen cabida salvo que se use algun método oscuro y extraño para hacer persistir los datos.


Salu2 a ambos y espero que se animen a utilizar db4o.