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

eks*_*ksd 5 java spring design-patterns elasticsearch

我们有一个拥有 500 万用户的移动应用程序,现在我们正在尝试基于 ES 设计新闻提要。目标是有机会创建帖子、存储帖子并为其他用户订阅。所以我们需要根据每个人的订阅为每个人选择帖子。

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

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

  2. 为所有帖子创建一个索引。然后对于每个用户,我们可以创建一个别名,并根据他订阅的用户 ID 进行过滤。但是,在为用户创建新闻提要时,我们将不得不处理许多分片。所以有3种方式。

  3. 通过 userId 路由。它类似于 2 种方式,但不同之处在于我们为每个用户创建了一个别名,并通过它的 userId 进行路由。缺点是对于我们索引中的每个帖子,副本的数量与应该接受的人数一样多。

还有另一种模式,我读过。但我仍然没有清晰的愿景——我们用例中的最佳实践是什么。

此外,我们还有 ES 的替代品 - Cassandra。但该决定仍在进行中。

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

先感谢您。

小智 -1

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