Con la popularidad de las bases de datos NoSQL se hacen necesarias unas nuevas normas y recomendaciones sobre el modelado de datos, veamos las principales consideraciones sobre una de las principales y más utilizadas bases de datos NoSQL: MongoDB.

Como sabemos los datos en MongoDB tienen un esquema flexible, tanto que las Colecciones no deben seguir una estructura de documento, o dicho de otra forma documentos en la misma colección no tienen que tener la misma estructura e incluso campos comunes pueden ser de diferente tipo.

Como en cualquier modelado con MongoDB se deben tener en cuenta:

  • Propiedades de las colecciones
  • Relaciones entre los objetos de la aplicación
  • Cómo crecen y cambian los datos con el tiempo
  • Qué tipo de queries tendrá la aplicación

Lo que lleva a tomar ciertas decisiones a la hora de modelar los datos (ya que modelos de datos equivalentes pueden sin embargo afectar al rendimiento), como:

  • Normalización y denormalización: Los modelos de datos totalmente normalizadas describen las relaciones con referencias entre documentos, mientras que los modelos denormalizados pueden almacenar información redundante a través de los modelos relacionados.
  • Estrategia de indexado
  • Representación de datos en arrays en BSON.

Pasemos ya a las consideraciones:

MODELOS DE DATOS EMBEBIDOS:

Para de-normalizar datos se pueden almacenar dos piezas de datos en un único documento.

Las operaciones con un único documento (como en SGBDR) son menos costosas para el servidor que las que envuelven varios documentos

En general se pueden usar modelos de datos embebidos cuando:

Tiene las ventajas de: mejor rendimiento en operaciones de lectura y la habilidad de de recuperar e insertar datos en una única operación de bases de datos.

Como inconvenientes puede llevar a situaciones donde los documentos crecen después de su creación. El crecimiento de los documentos pueden impactar en el rendimiento de escritura y llevar a fragmentar los datos. Hay que tener en cuenta que los documentos deben ser menores que ek tamaño máximo de documento BSON (para documentos mayores usar GridFS).

MODELOS DE DATOS CON REFERENCIAS

Para normalizar datos hay que almacenar referencias entre dos documentos para indicar una relación entre los datos de cada documento.

En general usar modelos de datos normalizados:

  • Modelos de datos embebidos llevan a duplicar datos y no dan las suficientes ventajas de rendimiento en la lectura para superar estas implicaciones.
  • Representar relaciones complejas many-to-many
  • Para modelar data sets jerárquicos grandes: Model Tree Structures in MongoDB.
  • · Las referencias dan mayor flexibilidad que los embebidos, aunque implican varias queries desde la capa cliente, y por tanto más idas y vueltas al servidor.

· Ver Model Referenced One-to-Many Relationships Between Documents.

PATRONES DE MODELADO

En próximos posts veremos más consideraciones: TTL, índices, sharding,… así como queries con JOINs entre colecciones.