先上一張圖: 解釋:上圖為一棵樹形的數據結構,思想為 采集50000台機器的性能數據,每5分鍾采集一次,存儲兩年(兩年後數據才可以被刪除,所以有730天),每台機器有一個ip地址(50000個機器就有50000個ip地址),多個端口(比如交換機就有:eth0,eth1,...),每個端口采集16個性能數據(收包數量,發包數量,錯誤包數量...等,也就是圖中的key),每個key對應288個value(因為每5分鍾采集一次,一天一個key就有288條value。)
我的初步設想是用NOsql來存儲這些數據,把日期(就是樹的第一層)設計為集合。ip地址(第二層)設計為文檔。采用mongodb,端口以及後麵的(第三層以及後麵的層)設計成子文檔。這樣 當采集一條數據回來時,就按照樹形查找,有則插入數據,無則在路途中添加沒有的樹枝條。
例如:來了一條數據:2013-5-8. 192.168.10.1. eth0. key1. value4就將value4插入value3下方。
又來了一條數據:2013-5-8. 192.168.10.1.eth1. key1. value1就在eth0下方新生一個eth1枝條,繼續添加數據。
但是mongodb的子文檔插入(首先要查詢待插入的子文檔)帶有一定的重複性。
對於上述的需求怎麼選擇一個合理的數據庫和設計存儲格式呢?
望大家討論出主意。。。
你的查詢需求是什麼? ? ?
同問樓上,你的查詢需求是什麼? 如果只是存儲,查詢需求很簡單的話,建議考慮日誌方式儲存。 按照你描述的目錄結構來儲存數據,如果需要統計寫一點腳本就可以了,速度不一定比儲存在資料庫中慢。