Primero, una advertencia: soy bastante nuevo en los conceptos detrás de las bases de datos de documentos, por lo que esta puede ser una pregunta completamente obvia.¿Es RavenDB una buena opción para este concepto?
Necesito diseñar un sistema que mantenga un profundo catálogo jerárquico de piezas que componen productos altamente complejos. Detallará los componentes físicos que componen cada parte, y cada parte puede ser componentes de otras partes, hasta el producto final. De esta manera:
Widget
|- Sprocket
| |- A4 nut
| |- B15 screw
| |- Sprocket Backshell
|- Flange
| |- A4 washer
| |- Flange Housing
|- Widget Assembly
Widget en este ejemplo podría luego incorporarse como parte debajo de algún otro producto.
Cada producto puede contener decenas de miles a cientos de miles de piezas y, cada tipo de componente tiene propiedades diferentes, no relacionadas que deben mantenerse. Estas propiedades pueden incluir las conexiones entre partes relacionadas.
Tenemos una versión mal diseñada de este sistema en este momento, en SQL Server, como una única tabla plana con aproximadamente 120 columnas y varios millones de registros. Alrededor del 85% de los campos en esta tabla son nulos. Mi trabajo es reemplazar esto con algo más fácil de mantener y eficiente y menos propenso a errores.
Construir esto de manera eficiente en una base de datos relacional significaría la normalización, en este caso, tener una tabla para cada tipo de pieza. Creo que este sería un problema, ya que hay cientos de tipos de piezas y se agregan regularmente nuevos tipos de piezas con sus propias propiedades específicas.
Me gustaría utilizar RavenDB para esto, ya que una base de datos de documentos se adaptaría a la naturaleza dinámica de las piezas, pero no sé si sería una buena opción, o cómo implementaría el sistema en términos de documentos. Los productos en sí son los objetos raíz, pero debido a su tamaño no puedo permitirme almacenar un producto como un documento único.
¿Es RavenDB una buena opción para este concepto? ¿Hay indicadores sobre la mejor manera de representarlo en los documentos?
Esto más o menos responde mi pregunta: no creo que RavenDB encaje bien aquí. Eventualmente, la consistencia será un problema aquí - me había olvidado de esa característica - y map/reduce no me ayudará mucho con este problema, no creo. Es una pena: me gusta la naturaleza del esquema dinámico de una base de datos de documentos para almacenar los datos de piezas, pero no creo que pueda lograr que el cliente firme en el mantenimiento de dos bases de datos independientes ... –
Eso es interesante. En la práctica, hay muy pocos casos en los que no se puede vivir con consistencia eventual, ya que la mayoría de las veces no reconocerá ninguna diferencia (la indexación de los cuervos es muy rápida, aunque se ejecuta de manera asíncrona) e incluso si se puede exigir coherencia fácilmente para esas consultas. Creé varias aplicaciones comerciales con RavenDB y no encontré esto como un problema (hay otras). No veo ningún motivo por el cual su cliente deba mantener en dbs independientes. Puede enviarme un correo electrónico si desea hacer un seguimiento de eso. –