1. 程式人生 > >物聯網系統開發如何選擇時序數據庫

物聯網系統開發如何選擇時序數據庫

壓縮 磁盤 可能性 服務器 至少 存儲設備 互聯 寫入 內容

在很多物聯網系統中,都需要對聯網的設備進行監控,並對監控采樣到的數據進行持久化。對采樣數據進行持久化,其實很多年前在工業領域已經有專門的數據庫來完成這個任務了。在工業領域,這個叫實時數據庫。

工業領域的實時數據庫具有數據采集、實時數據緩存、數據回寫(向設備發送指令)、采樣數據歸檔存盤等主要功能。目前工業領域實時數據庫基本上被國外廠家所壟斷,價格昂貴。以PI數據庫為例,基礎版本(只有5000個測點)就需要大約10萬美元,每個數據采集接口需要6000美元。這個價格對新興的物聯網公司來說代價太大了。

幸好,最近幾年IT公司針對IT設備運維提出了一種新型的數據庫:TSDB,時序數據庫。該數據庫專門用來存儲時序數據,物聯網系統從設備上采集的數據就是一種時序數據,物聯網系統完全可以用TSDB來存儲設備采樣數據。

目前國內大型互聯網公司中的阿裏巴巴、百度等已經進軍物聯網行業的公司都提供了雲服務形式TSDB數據服務。如果你的物聯網應用是運行在互聯網上,並且服務器也是用了Alibaba或者百度的雲服務,那麽你完全可以采用他們的TSDB服務來保存系統中的時序數據。

但假如你的物聯網應用是運行在封閉式的局域網或者專網中的,又該如何選擇呢?

用搜索引擎搜索下 “tsdb”或者 “時序數據庫”,你可以看到各種開源的時序數據庫,我沒有對各種開源時序數據庫進行過詳細對比,只是大致上看了下別人的評論。從評論來看InfluxDB應該是目前綜合性能最好的,但是它的集群版是閉源的商業產品。OpenTSDB用的人也挺多,但是性能上比較差,寫入速度波動幅度比較大。假如你的物聯網系統需要保存歷史數據的測點數量不超過5萬,那麽用InfluxDB應該是沒問題的。

假如你想對各種TSDB做一個測試,並根據測試結果來選擇,我的建議如下:

1、測試其寫入速度,並關註寫入速度的波動性。所有的TSDB在實現的時候肯定都用來內存來緩存寫入速度的,它們需要在特定時機把緩存的數據寫入到磁盤進行歸檔。所以,在考察寫入速度的時候,一定要關註它在對內存數據進行歸檔化處理時候的寫入速度。

2、在寫入的同時測試其查詢速度。因為物聯網系統中設備時刻都在產生數據,你的每個查詢都是和大量的寫入操作同時執行的。

3、測試其數據完整性,前面我們提到tsdb在執行寫操作時都是先寫內存的,然後在特定時候歸檔到磁盤。 這樣一來就存在"tsdb數據庫正常關閉或者異常關閉時候 丟失數據"的可能性。作為tsdb的使用者,當然希望它關閉重啟的時候盡可能少丟失已經寫入的數據。

4、測試其在時序錯位情況下的數據完整性,時序錯位有兩種情況:采樣數據的時間和tsdb服務器當前時間有較大偏差;兩個不同測點之間,幾乎同時寫入的數據,但被標記為不同的采樣時間(有較大的時差);在這兩種情況下,重啟服務器後,測試其數據丟失情況。

5、測試其磁盤占用率,假如你的系統中連接了1000的設備,每個設備有10個測點,每個測點沒秒鐘持久化一次,那麽你每天需要持久化的時序數據有864兆,每份數據最少包含一下內容:一個測點Id、一個時間戳、一個值。測點算它4個字節、時間戳8個字節、值4個字節。在不壓縮的情況下至少需要13G磁盤空間。所以壓縮性能是tsdb的一項關鍵指標。

6、了解其查詢接口是否豐富,既然把這麽多歷史數據都保存下來,那當然是希望這些數據能發揮出其價值。一個強大的查詢接口是這些數據發揮價值的前提條件。除了普通的按照時間和標簽查詢某些測點在某個時間段的所有值之外,我覺得tsdb還應該包括:降頻查詢(在時間軸上分組聚合),聚合查詢(把一些測點按照某個算法計算相同采樣時間點的值,可以在查詢時聚合或者寫入時聚合)。
---------------------
作者:spdata
來源:CSDN
原文:https://blog.csdn.net/spdata/article/details/79777672
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

物聯網系統開發如何選擇時序數據庫