高效查询设计

时间:2018-03-11 19:42:16

标签: database-design architecture nosql

我有一个带有User集合和Post集合的NoSQL数据库。每个User都有一个Post,可以关注其他Users(与他们的朋友)。

User只能查看他以前没有看过的朋友的Post。一旦查看,它就不再显示给他了。

我正试图找出一种设计此要求的方法,以便有效地检索Posts未查看的User

我有两个想法,看起来效率都不高:

  1. 在名为User的{​​{1}}下创建一个子集合,每次朋友发帖时,他们的朋友的帖子ID都会添加到该子集合下。当该用户查看帖子时,它的条目将被删除。但这意味着无论何时用户发帖,他们都必须将自己添加到所有朋友NonViewedPosts子集中。如果他们有很多朋友,这可能效率低下

  2. 在名为NotViewedPosts的{​​{1}}下的子集合开始为空,当帖子被查看时,它会填满。然后我必须查询Post以查看我是否在每个朋友帖子中找到了自己。如果我有很多朋友,如果我的朋友有很多观点,那么这也是效率低下的

  3. 我还有其他解决方案吗?

1 个答案:

答案 0 :(得分:2)

在构建这样的系统时,您几乎应该总是尝试优化读取案例,而不是写案例。在这种情况下,您的读取仍然是写入,但您仍然希望针对用户“正在阅读”的情况进行优化,即查找要阅读的新帖子。正确?可能阅读场景将比发布案例更常见。

因此,将针对推模型进行优化(方案1)。在任何情况下,您都不需要针对其中一个进行优化。您必须推送或提取有关朋友帖子的信息。