2015-04-05 48 views
0

我目前正在監控5個不同的建築物,每棟建築物大約有300個房間。每個房間都有4個傳感器,其中3個監測室內不同位置的溫度,一個監測房間消耗的功率量(killowatts)。RRD工具結構和理解

我目前每15分鐘輪詢一次傳感器,每天產生576,000個條目,我監測的建築物數量很快就會增加。我現在在MySQL中存儲所有的信息,我有一個每個傳感器類型的MySQL表,所以這些表被命名爲'電源','temp1','temp2','temp3'。這些表格中的列是'id','building_id','epoch','value'。

然後,我使用這些數據生成圖表,使用Chart.js庫和統計數據(如某個時間段內每個建築物使用的功率量等),我使用PHP來完成所有這些工作。

我不相信我的MySQL數據庫將是能夠處理這種無嚴重的規模和集羣

我需要能夠查看歷史數據5年,儘管一些粒度可後丟失一段時間。

我被告知RRD可能能夠解決我的問題,並已對其做了一些研究,但仍有一些問題。

它仍然允許我使用專門的Chart.js庫創建自己的圖表嗎?如果我能從RRD獲得時間/價值的JSON數據,那應該沒問題。

我還需要創建多少個不同的RRD文件?我需要每個建築物嗎?每個房間?每個傳感器?它是否仍然易於管理。

我有15分鐘的間隔運行的PHP腳本,使用SNMP從傳感器中獲取數據,然後將數據插入到MySQL中,如果我可以使用相同的腳本插入到RRD中,我看到你可以使用PHP插入RRD,以便應該沒問題。

編輯:我正在閱讀http://michael.bouvy.net/blog/en/2013/04/28/graph-data-rrdtool-sensors-arduino/已開始回答我的一些問題。

回答

0

無論你是否有一個RRD文件包含6000個指標,或者5個文件包含1200個指標等,都取決於你如何管理數據。

首先,您不應將樣本到達不同時間點的指標組合在一起。因此,如果您一次抽取一個房間,則每個房間應該有一個RRD文件(其中包含4個指標)。這將取決於管理傳感器的方式;如果每個房間或每棟建築物都有一臺設備。檢索數據並繪製它可以起作用,不管你有一個文件還是一千個文件(儘管在最新版本的RRDTool中'千'情景工作得更好)。

其次,你是否可能添加新的數據點(IE,建築物或房間)?您不能(輕鬆地)將新指標添加到現有的RRD文件。因此,如果您希望在未來增加新的建築物,或者添加或移除一個房間,那麼每個建築物或每個房間的RRD可能會更好。

如果沒有更多的信息,我想你最好每個房間有一個RRD(包含4個指標)並單獨更新它們。根據建築物和房間ID命名文件,並且可以按照Epoch保存功率和3個溫度值。

對於繪圖,RRDTool當然可以通過直接訪問數據來創建自己的圖形。但是,如果你想提取數據並將它們放入圖表中,這是可能的; Xport函數將允許您提取必要的數據點(可能來自多個RRD文件並進行聚合),然後您可以將其傳遞到您選擇的圖形庫。如果你想要原始數據,也有取回功能。

如果您的數據樣本以15分鐘的間隔到達,請確保您正確設置RRD間隔,心跳和RRA。具體而言,RRA將指定執行什麼聚合以及數據以更高粒度保存多長時間。 RRAs一般應與您期望繪製數據的分辨率相對應(這就是爲什麼人們通常使用5分鐘/ 30分鐘/ 2小時/ 1分鐘,因爲這些分辨率與400像素寬度的每日,每週,每月和每年的圖表非常吻合)

0

您可能需要查看時間序列數據庫並測試一些內置可視化系統,這是一個允許您執行聚合和PHP包裝的API。時間序列數據庫針對時間戳數據的高效存儲進行了優化,並具有用於時間序列轉換的內置功能。

https://en.wikipedia.org/wiki/Time_series_database