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

mongo db diseño de seguimiento y feeds, ¿dónde debo insertar?

En general, es una mala idea incrustar relaciones de seguimiento/seguido por en documentos de usuario, por varias razones:

(1) existe un límite de tamaño máximo de documento de 16 MB, y es plausible que un usuario popular de un sitio bien suscrito termine con cientos de miles de seguidores, que se acercarán al tamaño máximo de documento,

(2) las relaciones de seguidores cambian con frecuencia, por lo que el caso en el que un usuario gana muchos seguidores se traduce en un crecimiento repetido del documento si está incrustando seguidores. El crecimiento frecuente de documentos dificultará significativamente el rendimiento de MongoDB, por lo que debe evitarse (el crecimiento ocasional de documentos, especialmente si los documentos tienden a alcanzar un tamaño final estable, es una penalización menor para el rendimiento).

Entonces, sí, es mejor dividir la relación de seguimiento/seguido por en una colección separada de registros, cada uno con dos campos, por ejemplo, { _id :, oid :}, con índices en _id (para "¿a quién sigo? " consulta) y oid (para la consulta "¿quién me sigue?"). Cualquier cambio de estado individual se modela mediante la adición o eliminación de un solo documento, aunque si también está mostrando cosas como el recuento de seguidores, probablemente debería mantener contadores separados que actualice después de cualquier inserción/eliminación de borde.

(Por supuesto, esto supone que los requisitos de su negocio le permiten cierta flexibilidad en los detalles de consistencia:en general, si su código de visualización le dice a un usuario que tiene 304 seguidores y luego procede a enumerarlos, solo el usuario más quisquilloso verificará que los seguidores enumerados cuenta hasta 304. Si los requisitos comerciales requieren una consistencia absoluta, necesitará una base de datos que aísle las transacciones por usted, o tendrá que hacer el conteo usted mismo como parte de la visualización de todas las identidades de los usuarios).