¿Porqué amarás MongoDB? (¡La mejor base de datos actualmente!)


Hoy voy a hablarles acerca de MongoDB, la mejor base de datos disponible actualmente (en mi humilde opinión) Se trata de un proyecto OpenSource de base de datos No Relacional pero que engloba varias de las características y comportamientos de las bases de datos relacionales a las que muchos están acostumbrados... Primero que nada, veamos las features que nos resaltan en su página web oficial:


Todo eso está muy bien para los que entendemos tecnicismos en inglés y demás, pero si tuviera que explicarlo en palabras simples, te diría:

Mira, te conviene usar Mongo porque es una base de datos donde en lugar de guardar tus records en base a tablas y otros esquemas organizativos que pueden suponer bastante trabajo extra, los guardas en documentos, describiéndolos prácticamente exactamente como son, como los modelas, evitándote así el crear archivos extra y demás. Es genial también porque tiene excelente rendimiento y escalabilidad, hacer relaciones y queries de datos complejas es bastante sencillo y práctico y además la DB es dinámica: Esto quiere decir que conforme cambies tu documento de base de datos podrás añadir nuevas columnas, nuevos datos, relaciones y demás a tu base de datos on-the-fly Reflejando los cambios en tu aplicación al instante. 

En un ejemplo práctico:

Yo uso mucho Ruby On Rails. Hago aplicaciones web con una estructura de MVC que requieren de bases de datos para funcionar. Usar (por ejemplo) la base de datos predeterminada de Rails que es SQLite para hacer una aplicación pequeña pues está bien, debido a que es práctica, funcional, (hasta eso escalable) y demás. El problema viene cuando tienes que hacer una aplicación web que irá cambiando mucho con el tiempo, en cuanto a la lógica de su modelo y datos contenidos. Cada que yo añado o quito o cambio un dato de un modelo rails a fuerza tengo que crear una migración que haga (describa) lo que yo necesito que haga en cuanto a cambios en mi DB.

Las migraciones son un enfoque bastante genial en rails puesto que puedo hacer cambios en mi app a nivel DB sin interferir (o bien meterle mano) directamente a la database, Lo que me permite que si por ejemplo yo trabajo en equipos con varios developers podamos aplicar y remover cambios en la base de datos de una manera más libre y también si se integran nuevos congéneres al equipo les será más facil hacer un seguimiento correcto de lo que se ha trabajado hasta el momento...

Sin embargo como dije, el problema con esto de las migraciones es que una aplicación que muta constantemente y que ha vivido un periodo largo de tiempo termina con un número de migraciones RIDÍCULAMENTE ENORME haciendo que las cosas se compliquen. Con MongoDB, como los cambios son on the fly no necesito migraciones y cada que quiero añadir o quitar un dato (o varios) además de hacerles cambios drásticos en/a una DB automáticamente al guardar mi archivo de modelo con los cambios efectuados la base de datos comienza a funcionar y los datos persisten automáticamente también, veámoslo más de cerca:


En la imagen de arriba podemos ver un archivo modelo de rails. Haz caso omiso de todo lo demás, sólo céntrate en lo que está seleccionado... ESO es la descripción de mi base de datos. Como verás, estoy definiendo los campos de la DB y su tipo, con solo eso puedo empezar a hacer storage de datos en mi app por medio de mi rails console o bien, por medio de mi formulario de registro de usuarios que se ve en la webapp al correrla en este caso... Si por ejemplo yo quisiera añadir un campo más a mi DB simplemente tendría que escribir otra línea más de field allá arriba y hacer el dato en cuestión accesible en la línea de attr_accessible, (aunque esto no es estrictamente necesario con "Mongoid", el driver de MongoDB para Rails) guardo el archivo y si mi servidor está corriendo, los cambios se verían reflejados automáticamente...

Ahora solo añado el campo de formulario para el nuevo dato en mi página donde se registran los usuarios y automáticamente ellos podrían registrar ese dato más y quedaría en mi DB on-the-fly sin preocuparme por migrar, arreglar las tablas o cualquier otra complicación parecida.

¿Suena muy natural no? Esa es la gran ventaja de MongoDB... La manipulación de tus datos se hace por medio de métodos/tácticas que tu considerarías Obvios al momento de modelarlos.

Para saber más de MongoDB te invito a checar la página oficial del proyecto y ahí mismo hay un tutorial live (En Try it Out) por medio del Javascript Shell de MongoDB directo en tu navegador: ¡Otra de las ventajas! El shell y manipulación de los datos se maneja en código de manera muy similar a como escribirías javascript, cosa que para los nuevos en todo esto del desarrollo es bueno puesto que es algo fácil de entender y usar y para los que ya tienen experiencia en todo esto del desarrollo web y quieren usar mongo permite que no tengas que pasar por la curva de aprendizaje de aprender el lenguaje (ejém SQL) propio de tu base de datos.