Al incrustar datos relacionados en un solo documento, se puede duplicar datos entre dos colecciones. La duplicación de datos permite a la aplicación hacer una query de información relacionada sobre varias entidades en una sola query, mientras separa lógicamente las entidades en el modelo.
Acerca de esta tarea
Una de las preocupaciones al duplicar datos es el aumento de los costos de almacenamiento. Sin embargo, los beneficios de optimizar los patrones de acceso superan en general los posibles aumentos de costos por almacenamiento.
Antes de duplicar datos, considere los siguientes factores:
El beneficio del rendimiento de las lecturas cuando los datos están duplicados. La duplicación de datos puede eliminar la necesidad de realizar uniones entre varias colecciones, lo que puede mejorar el rendimiento de la aplicación.
Con qué frecuencia se deben actualizar los datos duplicados. La lógica extra necesaria para gestionar las actualizaciones poco frecuentes es menos costosa que realizar uniones (búsquedas) en las operaciones de lectura. Sin embargo, la actualización frecuente de datos duplicados puede causar cargas de trabajo pesadas y problemas de rendimiento.
Ejemplo: Datos duplicados en un esquema de comercio electrónico
El siguiente ejemplo muestra cómo duplicar datos en un esquema de aplicación de comercio electrónico para mejorar el acceso y el rendimiento de los datos.
Pasos
Rellenar la base de datos
Crea las siguientes colecciones en la base de datos eCommerce:
Nombre de colección | Descripción | Documento de muestra | ||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Almacena información del cliente, como nombre, correo electrónico y número de teléfono. | | ||||||||||||||||||||||||||
| Almacena información del producto, como precio, talla y material. | | ||||||||||||||||||||||||||
| Almacena información de pedidos como la fecha y el precio total. Los documentos en la colección | |
Las siguientes propiedades de la colección products están duplicadas en la colección orders:
productIdproductpricesize
Ventajas de duplicar datos
Cuando la aplicación muestra información de pedido, también muestra los artículos de línea correspondientes de ese pedido. Si la información del pedido y del producto se almacenara en colecciones diferentes, la aplicación necesitaría realizar $lookup Para unir datos de dos colecciones. Las operaciones de búsqueda suelen ser costosas y tienen un rendimiento bajo.
La razón para duplicar la información de los productos, en lugar de solo incrustar los elementos de la línea en la colección orders, es que la aplicación solo necesita un subconjunto de información de los productos al mostrar las órdenes. Al incrustar únicamente los campos necesarios, la aplicación puede almacenar detalles adicionales del producto sin añadir información innecesaria a la colección orders.
ejemplo: duplicación de datos para revisiones de productos
El siguiente ejemplo utiliza el patrón de subconjunto para optimizar los patrones de acceso en una almacenar en linea.
Considere una aplicación donde, al ver un producto, el usuario muestra su información y las cinco reseñas más recientes. Las reseñas se almacenan en las colecciones products y reviews.
Cuando se escribe una nueva revisión, ocurre lo siguiente:
La revisión se inserta en la colección
reviews.El arreglo de revisiones recientes en la colección
productsse actualiza con$popy$push.
Pasos
Rellenar la base de datos
Crea las siguientes colecciones en la base de datos productsAndReviews:
Nombre de colección | Descripción | Documento de muestra | |||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Almacena información sobre el producto. Los documentos en la colección | | |||||||||||||||||||||
| Almacena todas las revisiones de productos (no solo las recientes). Los documentos en la colección | |
Ventajas de duplicar datos
La aplicación solo necesita realizar una llamada a la base de datos para devolver toda la información que necesita mostrar. Si los datos se almacenaran completamente en colecciones separadas, la aplicación tendría que combinar los datos de las colecciones products y reviews, lo que podría causar problemas de rendimiento.
Las revisiones rara vez se actualizan, por lo que no es costoso almacenar datos duplicados y mantener la consistencia de los datos entre colecciones no es un desafío.
Obtén más información
Para aprender cómo mantener la coherencia de los datos duplicados, consulte Consistencia de datos.