【发布时间】:2014-05-23 21:41:14
【问题描述】:
我打算将 Elasticsearch 用于一种社交网络平台,用户可以在其中发布“更新”、与其他用户成为朋友并关注他们朋友的动态。基本且可能是最常见的查询将是“获取我关注的朋友与我分享的帖子”。这个查询可以通过额外的约束(如标签或地理搜索)来增强。
我了解到,社交网络通常采用写入时扇出的方法向关注者传播“更新”,因此查询更加本地化。所以我可以看到 2 个潜在的索引策略:
- 将所有帖子存储在单个索引中并搜索 (1) 与请求者共享的帖子和 (2) 其作者在请求者关注的用户列表中的帖子(“幼稚”方法)。
- 为每个用户创建一个索引,注入关注用户创建的帖子并直接在该索引中搜索(“扇出”方法)。
从搜索的角度来看,第二个选项显然更有效,尽管它带来了同步挑战(例如,当我停止关注朋友时需要删除帖子)。但我最关心的是指数的乘法;在(成功的)社交网络中,我们可以预期至少有成千上万的用户......
所以我的问题是:
- ES 如何处理大量索引?会导致性能问题吗?
- 对于针对我的特定用例的更好的索引策略有什么想法吗?
谢谢
【问题讨论】:
标签: elasticsearch