¿Cuándo es apropiada una base de datos sin esquema?

Para ver un ejemplo del mundo real del uso de una base de datos sin esquema, lea este artículo de Bret Taylor, cofundador de Friendfeed.com: http://bret.appspot.com/entry/ho…

Existen muchos proyectos diseñados para abordar el problema de almacenamiento de datos con esquemas flexibles y la creación de nuevos índices sobre la marcha (por ejemplo, CouchDB). Sin embargo, ninguno de ellos parecía lo suficientemente utilizado por sitios grandes como para inspirar confianza. En las pruebas sobre las que leímos y nos dirigimos, ninguno de los proyectos fue estable o lo suficientemente probado para nuestras necesidades (ver este artículo un tanto desactualizado en CouchDB, por ejemplo). MySQL funciona. No corrompe los datos. La replicación funciona. Ya entendemos sus limitaciones. Nos gusta MySQL para el almacenamiento, solo que no los patrones de uso de RDBMS.

Después de algunas deliberaciones, decidimos implementar un sistema de almacenamiento “sin esquema” sobre MySQL en lugar de utilizar un sistema de almacenamiento completamente nuevo. Esta publicación intenta describir los detalles de alto nivel del sistema. Tenemos curiosidad sobre cómo otros sitios grandes han abordado estos problemas, y pensamos que parte del trabajo de diseño que hemos realizado podría ser útil para otros desarrolladores.

El modelo de base de datos sin esquema sería un buen reemplazo para el modelo de valor de atributo de entidad (EAV). Por lo general, EAV se elige porque los atributos para una entidad no se conocen de antemano (o no se requieren todos los atributos para una entidad), por lo que la entidad no se puede modelar de manera eficiente en un modelo relacional. El modelo sin esquema logra el mismo resultado de EAV, sin sus inconvenientes, como los requisitos de JOIN, etc. En un modelo sin esquema (al menos en NoSQL DBs como MongoDB), cada documento puede tener sus propios atributos y es bastante autónomo . El modelo sin esquema funciona bien cada vez que fuerza el ajuste de un modelo en relacional.

Cuando sus políticas corporativas requieren que usted:

  • pagar más por los servidores en el clúster de base de datos que por los servidores independientes
  • proporcionar scripts SQL / DDL de actualización y reversión para cada implementación (en lugar de usar una herramienta automatizada como migraciones Rails o Liquibase)
  • reduzca la velocidad de cada implementación haciendo que un DBA cierre la sesión en todos los SQL antes mencionados, incluso si el DBA comprende menos SQL que la mayoría de los desarrolladores
  • ralentizar cada implementación al considerarlas como un “riesgo para la infraestructura compartida” si tocan una base de datos de alguna manera

… entonces una base de datos sin esquema puede ser una forma útil de evitar la burocracia sin sentido y obtener implementaciones automatizadas para la producción.

Todavía tiene que hacer algo si la estructura de sus datos cambia, pero hacerlo en código como una tarea en segundo plano podría darle más flexibilidad que un solo script SQL / DDL de big bang de todos modos.