sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Deberíamos usar dbref o un documento incrustado en una aplicación de lectura intensiva?

DBref no se parece en nada a una clave externa en los sistemas relacionales tradicionales. Es solo una convención que le dice fácilmente a un conductor (que es capaz de hacerlo) que cargue automáticamente esos documentos referidos. Consulte DBRef para obtener más información sobre esto.

Dependiendo del controlador utilizado, es posible que pueda cargar esas referencias automáticamente solo cuando las necesite (perezoso), por lo que la sobrecarga de rendimiento debería ser muy pequeña. Pero la sobrecarga de almacenamiento es un poco más alta que un simple _id referenciado de otro documento. Básicamente, diría que solo debe usar esos DBrefs si el documento vinculado puede ser de tipo variable. Si es estático, entonces está atascado con _id-references y tal vez su propia funcionalidad de carga diferida, por lo que no se repite.

No se repita (o la duplicación de datos en términos de base de datos) también se aplica en su contexto, como recomienda MongoDB (así que yo también lo haría), es solo vincule sus documentos . De lo contrario, tendría un mayor uso de almacenamiento y actualizaciones algo largas, para actualizar solo una entidad lógica (duplicada físicamente con mucha frecuencia).

Con el cargador diferido personalizado mencionado anteriormente, puede agregar algo de almacenamiento en caché para que no todas las búsquedas realmente resulten en una búsqueda mongodb. Lo más probable es que deba cuidar la consistencia de sus datos entre el caché y la base de datos.