在elasticsearch中为reddit系统存储投票的最佳方式

时间:2015-03-22 23:25:56

标签: elasticsearch

我正在使用elasticsearch构建一个类似于reddit的网站,并尝试确定哪里是存储上/下投票的最佳位置。我可以想到几种选择。

  • 存储为文档的一部分。
    在这种情况下,任何投票都将触发文档的更新。根据elasticsearch文档,这实际上是整个文档的替代品。这似乎是一项非常昂贵的行动。

  • 存储在另一个数据库中 将投票存储在SQL / MongoDB等其他数据库中,并定期更新elasticsearch。在这种情况下,我们必须容忍新投票的一些延迟影响搜索结果,这不是那么理想,也会增加复杂性和维护成本。

  • 存储在elasticsearch中的另一个索引中 这可以通过索引分离关注点 - 一个主要是RO,一个RW。是否有一种有效的方法来合并两个索引,以便我可以在查询时通过投票订购?

有关这些选项的任何建议或其他更好的处理方法吗?

1 个答案:

答案 0 :(得分:0)

有第四个选项 - 将投票存储在一个单独的文档中,该文档具有不同的类型,但与原始文档位于相同的索引中。投票类型可以是文章类型的child。通过此设置,您可以使用has_child过滤器和查询同时对文章和投票执行查询。每次投票时,它还需要重新索引一个小票数文件而不是大型文章文件。从消极方面来说,has_childhas_parent查询需要将父/子映射加载到内存中,因此与您描述的所有其他选项相比,此方法具有非常重要的内存占用。