Elasticsearch性能对选择索引映射结构的影响

时间:2019-04-13 20:58:06

标签: performance elasticsearch memory

我正在以类似

的格式接收数据
   {
     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"
       }]
     }]

   }

我想以一种可以基于timerangestatusparamType进行查询的方式将数据存储到elasticsearch中。

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解释了使用嵌套但未提供与性能相关的统计信息的优缺点。就我而言,内部对象不会有任何更新。因此,不确定哪个会更好。另外,我有两个嵌套对象,所以我想知道如何查询是否使用嵌套在一个时间范围之间获取数据?

1 个答案:

答案 0 :(得分:1)

平面结构比嵌套结构的性能更好。与术语查询相比,嵌套查询要慢一些;同样在索引时-内部一个嵌套文档被表示为一堆文档;只是它们被索引在同一块中。

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