Hacia los sistemas heterogéneos de base de datos

¿En la variedad está el gusto?

No creo que tenga que ser yo el que os diga, compañeros, hacía dónde estamos yendo a estas alturas de la película.

Actualmente, me encuentro haciendo un curso online de la mongoDB university y estoy haciendo algunas migas con este sistema noSQL confeccionando un pequeño proyecto en mis ratos libres.

Aunque mongoDB me resulta asombroso, fácil y rápido; soy reticente a usarlo para todo, como estoy viendo que animan a hacer en muchos sitios de internet.

Sí, esta es la misma historia de siempre: la misma que muchos otros han comentado en otros blogs sobre desarrollo web sobre qué ámbito es el indicado para usar base de datos noSQL.

Pero quisiera dar mi punto de vista si me lo permitís.

Transacciones, ¿dónde estáis?

Voy a coger mongoDB como ejemplo para desarrollar este post ya que es de los sistemas gestores de bases de datos noSQL más famosos.

Teniendo en mente que muchísima gente que decide adentrarse en mongoDB viene del mundo de las base de datos tradicionales creo que el principal problema con el que se pueden encontrar es la carencia de transacciones. Tampoco disponemos de joins, pero bueno, eso al fin y al cabo lo podemos controlar desde código.

Usar mongoDB require de un cambio de filosofía que muchos no son capaces de asumir. ¡Ojo! Como ya he dicho al principio, yo no soy ningún evangelista del mongoDB, solo estoy plasmando hechos.

Volviendo al tema de este post, la gente de 10gen nos aconseja guardar directamente, en un documento hijo, cualquier entidad relacionada con la entidad que estemos tratando en un momento dado. De este modo, si tenemos una entidad post que tiene varias tag, dichas etiquetas se guardarán en el documento post con el que estamos trabajando.

Quedaría algo así:

{
    “_id”: “507f1f77bcf86cd799439011“,
    “title”: “Dummy”,
    “body”: “Bar”,
    “tags” : [
        {
            “name”: “tag1“,
            “description”: “A sample tag”
        },
        {
            “name”: “tag2“,
            “description”: “Another sample tag”
        }
    ]
}

Evidentemente, entre esto y la carencia de transacciones, creo que salta a la vista que mongoDB no es una base de datos a usar en cualquier entorno.

También es cierto que, por ejemplo, en Node.js disponemos del módulo Mongoose que usando la populación conseguimos, casi transparentemente, mantener la integridad referencial a la vieja usanza.

De nuevo, ni soy un evangelista de mongoDB ni de las base de datos tradicionales. Soy evangelista de lo funcional, esto es, hay que usar lo que sea más óptimo usar para cada determinada función.

Una aplicación de tipo financiero, por poner un ejemplo rápido, no debería desarrollarse sobre mongoDB. Sería de locos. Creo que me estoy mojando demasiado, pero es mi punto de vista. Hay otras cosas para las que mongoDB viene muy bien como un sistema de mensajería instantánea, por poner otro ejemplo rápido.

Olvida la homogeneidad cuanto antes

CouchDB, Redis, Cassandra, mongoDB, BigTable, Dynamo… PostgreSQL, mariaDB, mySQL, Oracle, SQLServer, DB2…

Muchos sistemas gestores de bases de datos, poco tiempo para dedicarles y aprender en profundidad cada uno de ellos…

¿Solución? Hay que empezar a usar ORM/capas de abstracción de base de datos, si es que aún no los usáis. Damos de alta la base de datos en algún archivo de configuración y solo hacemos query o find de lo que necesitemos y listo. La casi totalidad de frameworks modernos hacen uso de ORM pero muchos de nosotros solo damos de alta una sola conexión a base de datos en el proyecto…

Ejemplos de uso heterogéneo de bases de datos tenemos muchos: Facebook, Google, Twitter, LinkedIn, 1&1, Cisco, eBay y un largo etcétera.

Espero no haber sido excesivamente impetuoso en mis argumentos y que este post os haya ayudado de alguna forma a aclarar dudas o a enfocar desde otro punto de vista la implementación de noSQL en vuestros proyectos.

Compartir

3 Comentarios

Deja una respuesta

Your email address will not be published. Required fields are marked *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax