【发布时间】: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 中,以便我可以根据 timerange、status 或 paramType 进行查询。
如here 所述,我可以将datapoints 或batch 定义为嵌套数据类型,它允许在数组内索引对象。
另一种方式,我可能认为是将结构划分为单独的文档。例如
{
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