【问题标题】:Elastic Search - Joins best practises弹性搜索 - 加入最佳实践
【发布时间】:2021-01-28 09:58:01
【问题描述】:

作为文档的一部分,我遇到了以下内容

 In Elasticsearch the key to good performance is to de-normalize your data into documents

还有,

the restriction about, where both the child and parent documents must be on the same shard

考虑到多级层次结构(祖父母 --> 父母 ---> 孩子)的场景,其中一些父母比其他父母拥有更多的孩子,并且数据可能会出现偏差,并且很少有分片包含比其他分片大得多的数据。

  1. 获得更多性能的最佳做法是什么?

  2. 将所有层次结构放在一个文档中(而不是每个级别一个文档)是个好主意。如果需要将父数据复制到所有文档中,如果有更多子数据,则父数据可能是冗余的?

【问题讨论】:

    标签: elasticsearch elasticsearch-performance


    【解决方案1】:

    是的,您提到的两个陈述都是正确的,让我根据您的用例来回答您的两个问题。

    1. 将所有层次结构放在一个文档中(而不是每个级别一个文档)是个好主意。如果父数据需要复制到所有文档中,如果有更多子数据,则父数据可能是多余的?

    回答:一般来说,如果您在一个文档中搜索所有数据,那么搜索肯定会快得多,这就是对数据库中的数据进行非规范化的全部原因,这在第一条语句中也提到了,如您不必创建多个工作线程并组合来自多个文档/分片/节点的结果。存储也很便宜,虽然它会节省存储成本但节省计算成本(比存储更昂贵)。 简而言之,如果您担心查询性能,那么对数据进行反规范化会大大提高查询性能。

    1. 获得更多性能的最佳做法是什么?

    回答:如果您仍然继续使用规范化方法,那么如上所述,您应该将所有相关文档保存在同一个分片中,并且应该实现 custom routing 来实现这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-04
      • 1970-01-01
      • 2015-09-25
      • 1970-01-01
      • 1970-01-01
      • 2021-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多