Actualmente estoy tratando de implementar las interacciones del usuario tipo Tumblr como reblogs, seguidores, seguidores, comentarios, entradas de blog de personas que sigo actualmente, etc. También hay un requisito para mostrar actividad para cada publicación de blog.Manera eficiente de crear relaciones con la base de datos NoSQL
Estoy atascado con la creación de un esquema adecuado para la base de datos. Hay varias maneras de lograr este tipo de funcionalidad (definir estructuras de datos integradas como publicaciones de blog y comentarios, crear un documento de actividad para cada acción, etc.) pero actualmente no podía decidir cuál es la mejor en términos de rendimiento y escalabilidad.
Por ejemplo, veamos la implementación de las personas que sigo. Aquí hay un documento de usuario de muestra.
User = { id: Integer,
username: String,
following: Array of Users,
followers: Array of Users,
}
Esto parece trivial. Puedo administrar el siguiente campo por acción del usuario (seguir/dejar de seguir), pero ¿qué sucede si un usuario que actualmente sigo se elimina? ¿Es efectivo actualizar todos los registros de usuarios que siguen al usuario eliminado?
Otro problema es crear una vista de publicación de blog de las personas a las que sigo.
Post = { id: Integer,
author: User,
body: Text,
}
Entonces, ¿es efectiva la consulta últimas publicaciones como;
db.posts.find({ author: { $in : me.followers} })
Gracias por su amable respuesta. De hecho, estoy usando MongoDB que se adapta muy bien a Node.js. No quiero usar ninguna otra tecnología (porque tengo que aprenderla y tratar otros problemas también) siempre y cuando pueda implementarse usando MongoDB efectivamente. –
Ciertamente puedo ver la tentación de seguir intentando utilizar MongoDB para mantener las relaciones con los documentos porque temo que otra tecnología creará más complejidades. Sin embargo, esta será una solución no escalable en mi opinión, en general, excepto cuando la aplicación en cuestión es muy pequeña y siempre será mantenida por un único desarrollador. A medida que aumente el número de desarrolladores en el equipo, cada uno tendrá que comprender las implicaciones de actualizar y eliminar documentos en las relaciones entre documentos. A la larga, solo causará más errores y complejidad. – manish