将嵌套的数据存储在 Elastic Search 中以便在 Kibana 中进行分析是否更好?
Is it better to store data nested of flat in Elastic Search for analysis in Kibana?
我们决定将一些数据存储在 Elastic Search 中,以便在 Kibana 中进行分析。我们暂时依赖Kibana中的动态映射。
这样嵌套存储数据是不是更好:
project: {
id: 1,
path: [1],
device: {
id: 2,
path: [1,2],
accessory: {
id: 3,
path: [1,2,3]
}
}
}
或像这样发送更多规范化数据:
project: {
id: 1,
path: [1]
}
device: {
id: 2,
path: [1,2]
}
accessory: {
id: 3,
path: [1,2,3]
}
或者是否有第三种更好的方法来存储上述数据?
根据您示例的结构,嵌套应该更有帮助。
假设您的项目有不止一台设备,并且每台设备都有不止一个配件。您的结构可能如下所示:
{
id: project1,
...,
devices: [
{
id: dev1,
name: device1,
...,
accessories:[
{
name: accessory1.1,
id: acc1.1,
...
},
{
name: accessory1.2,
id: acc1.2,
...
}
]
},
{
id: dev2,
name: device2,
...,
accessories:[
{
name: accessory2.1
id: acc2.1,
...
}
]
}
]
}
使用这种结构的优点:
您的映射和设置将只关注项目的结构,而不是为每个项目、设备、附件定义多个设置和映射。
此外,您将避免 "normalizing" 您的文档。规范化意味着项目、设备和附件将具有相同的字段并期望相同类型的值。
如果需要,您可以在项目中添加或删除设备或附件,而不会影响多个文档。
您可以在 Kibana 中创建仪表板,以根据特定字段分析您的数据。仪表板接受聚合,您可以让数据每 5 秒刷新一次。
我能找到的一些缺点:
如果您是 ES 新手,一开始查询可能会有些混乱。
如果您删除一个项目,包括设备和附件在内的全部信息也将被删除。小心点。
聚合可能会对您的表现产生一些影响。但这与基础架构(HW、集群设计等)更相关。
最后,如果你想单独存储项目、设备和配件的信息,你可以为每个使用一个索引,但它们之间的关系可能不太容易保持,查询会变得非常复杂。
希望对您有所帮助! :D
我们决定将一些数据存储在 Elastic Search 中,以便在 Kibana 中进行分析。我们暂时依赖Kibana中的动态映射。
这样嵌套存储数据是不是更好:
project: {
id: 1,
path: [1],
device: {
id: 2,
path: [1,2],
accessory: {
id: 3,
path: [1,2,3]
}
}
}
或像这样发送更多规范化数据:
project: {
id: 1,
path: [1]
}
device: {
id: 2,
path: [1,2]
}
accessory: {
id: 3,
path: [1,2,3]
}
或者是否有第三种更好的方法来存储上述数据?
根据您示例的结构,嵌套应该更有帮助。
假设您的项目有不止一台设备,并且每台设备都有不止一个配件。您的结构可能如下所示:
{
id: project1,
...,
devices: [
{
id: dev1,
name: device1,
...,
accessories:[
{
name: accessory1.1,
id: acc1.1,
...
},
{
name: accessory1.2,
id: acc1.2,
...
}
]
},
{
id: dev2,
name: device2,
...,
accessories:[
{
name: accessory2.1
id: acc2.1,
...
}
]
}
]
}
使用这种结构的优点:
您的映射和设置将只关注项目的结构,而不是为每个项目、设备、附件定义多个设置和映射。
此外,您将避免 "normalizing" 您的文档。规范化意味着项目、设备和附件将具有相同的字段并期望相同类型的值。
如果需要,您可以在项目中添加或删除设备或附件,而不会影响多个文档。
您可以在 Kibana 中创建仪表板,以根据特定字段分析您的数据。仪表板接受聚合,您可以让数据每 5 秒刷新一次。
我能找到的一些缺点:
如果您是 ES 新手,一开始查询可能会有些混乱。
如果您删除一个项目,包括设备和附件在内的全部信息也将被删除。小心点。
聚合可能会对您的表现产生一些影响。但这与基础架构(HW、集群设计等)更相关。
最后,如果你想单独存储项目、设备和配件的信息,你可以为每个使用一个索引,但它们之间的关系可能不太容易保持,查询会变得非常复杂。
希望对您有所帮助! :D