【问题标题】:Elasticsearch performance impact on choosing mapping structure for indexElasticsearch 性能对选择索引映射结构的影响
【发布时间】:2023-03-06 11:52:01
【问题描述】:

我正在以如下格式接收数据,

   {
     name:"index_name",
     status: "good",
     datapoints: [{
       paramType: "ABC",
       batch: [{
         time:"timestamp1<epoch in sec>",
         value: "123"
       },{
         time:"timestamp2<epoch in sec>",
         value: "123"
       }]
     },
     {
       paramType: "XYZ",
       batch: [{
         time:"timestamp1<epoch in sec>",
         value: "123"
       },{
         time:"timestamp2<epoch in sec>",
         value: "124"
       }]
     }]

   }

我想将数据存储到 elasticsearch 中,以便我可以根据 timerangestatusparamType 进行查询。

here 所述,我可以将datapointsbatch 定义为嵌套数据类型,它允许在数组内索引对象。

另一种方式,我可能认为是将结构划分为单独的文档。例如

{
name : "index_name",
status: "good",
paramType:"ABC",
time:"timestamp<epoch in sec>",
value: "123"
}

哪种方法最有效?

如果我选择第二种方式,我知道batch 数组和 10-15 个paramsType 数组中可能有 ~1000 个元素,这意味着将生成 ~15k 个文档和 15k*5 个字段(= 75K)键值对会在索引中重复吗?

Here 这解释了使用嵌套但未提供与性能相关的统计信息的优点和缺点。就我而言,内部对象不会有任何更新。所以不确定哪一个会更好。另外,我有两个嵌套对象,所以我想知道如果我使用嵌套来获取时间范围之间的数据,我该如何查询?

【问题讨论】:

    标签: performance elasticsearch memory


    【解决方案1】:

    扁平结构比嵌套结构表现更好。嵌套查询比术语查询慢;此外,在索引时 - 在内部,单个嵌套文档表示为一堆文档;只是它们在同一个块中被索引。

    只要满足您的要求 - 第二种选择效果更好。

    【讨论】:

      猜你喜欢
      • 2019-04-12
      • 2013-06-27
      • 1970-01-01
      • 2017-03-11
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      • 2011-02-26
      相关资源
      最近更新 更多