我有一个带有User
集合和Post
集合的NoSQL数据库。每个User
都有一个Post
,可以关注其他Users
(与他们的朋友)。
User
只能查看他以前没有看过的朋友的Post
。一旦查看,它就不再显示给他了。
我正试图找出一种设计此要求的方法,以便有效地检索Posts
未查看的User
。
我有两个想法,看起来效率都不高:
在名为User
的{{1}}下创建一个子集合,每次朋友发帖时,他们的朋友的帖子ID都会添加到该子集合下。当该用户查看帖子时,它的条目将被删除。但这意味着无论何时用户发帖,他们都必须将自己添加到所有朋友NonViewedPosts
子集中。如果他们有很多朋友,这可能效率低下
在名为NotViewedPosts
的{{1}}下的子集合开始为空,当帖子被查看时,它会填满。然后我必须查询Post
以查看我是否在每个朋友帖子中找到了自己。如果我有很多朋友,如果我的朋友有很多观点,那么这也是效率低下的
我还有其他解决方案吗?
答案 0 :(得分:2)
在构建这样的系统时,您几乎应该总是尝试优化读取案例,而不是写案例。在这种情况下,您的读取仍然是写入,但您仍然希望针对用户“正在阅读”的情况进行优化,即查找要阅读的新帖子。正确?可能阅读场景将比发布案例更常见。
因此,将针对推模型进行优化(方案1)。在任何情况下,您都不需要针对其中一个进行优化。您必须推送或提取有关朋友帖子的信息。