![](/img/trans.png)
[英]Is it better to store nested data or use flat structure with unique names in JSON?
[英]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,
...
}
]
}
]
}
使用這種結構的優點:
您的映射和設置將僅關注項目的結構,而不是為每個項目,項目,配件定義多個設置和映射。
另外,您將避免“標准化”您的文檔。 規范化意味着項目,設備和附件將具有相同的字段,並且期望使用相同類型的值。
如果需要,您可以在項目中添加或刪除設備或附件,而不會影響多個文檔。
您可以在Kibana中創建儀表板,以基於某些字段分析數據。 儀表板接受聚合,您可以使數據每5秒刷新一次。
我可以發現一些缺點:
如果您不熟悉ES,查詢一開始可能會有些混亂。
如果刪除項目,則包括設備和附件在內的全部信息也將被刪除。 小心點。
匯總可能會影響您的表現。 但這與基礎架構(硬件,集群設計等)更多相關。
最后,如果要單獨存儲項目,設備和配件的信息,則可以為每個信息使用索引,但是它們之間的關系可能不那么容易維護,查詢將變得非常復雜。
希望這會有所幫助! :d
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.