在ElasticSearch中存储新闻Feed的最佳设计模式

时间:2017-04-03 21:32:54

标签: java spring elasticsearch design-patterns

我们拥有一个拥有5百万用户的移动应用,现在我们正在努力设计基于ES的新闻Feed。目标是有机会创建帖子,存储帖子和订阅其他用户。因此,我们需要根据订阅情况为每个人选择帖子。

经过一些研究和谷歌搜索后,我找到了一些可以在我们的用例中使用的流行方法。

  1. 创建每用户索引。我认为这对我们来说不是一个好主意,因为它需要为每个订阅者索引插入一个新帖子。另外,如果我们有1亿用户呢?

  2. 为所有帖子创建一个索引。然后,对于每个用户,我们可以通过他订阅的用户ID创建一个带有过滤器的别名。但是,在为用户创建新闻Feed时,我们将不得不使用多个分片。所以有三种方式。

  3. 按userId路由。它类似于2路,但区别在于我们为每个用户创建一个别名,并通过它的userId进行路由。缺点是,对于我们索引中的每个帖子,将有多少人应该服用它。

  4. 我读过另外一种模式。但我仍然没有明确的愿景 - 在我们的用例中最佳做法是什么。

    此外,我们有替代ES - Cassandra。但是这个决定仍在进行中。

    也许有人可以在这个问题上说出他的专业知识并提出建议。批评也很受欢迎。

    提前谢谢。

1 个答案:

答案 0 :(得分:-1)

您可以使用观察者模式,您的新闻将发送给您的所有订阅者