實時資料庫歷史資料容量的計算方法

2021-08-27 09:53:18 字數 3642 閱讀 9801

經常有客戶問,使用你們的實時資料庫,該如何計算存貯一年歷史資料所需要的磁碟空間?

讓我們以乙個具體例子進行說明吧:乙個專案中,總共有

1萬個模擬量測點,這些測點平均每秒變化一次,每次變化均要儲存,存貯一年歷史資料,需要多少磁碟空間?

為了很好地說明這個問題,我們先來分析一下,如果採用關聯式資料庫來儲存這些歷史資料,需要多少磁碟空間。假定關聯式資料庫採用乙個表來儲存歷史資料,表的格式定義如下:

欄位名

型別

長度

備註

tagid整型

4位元組測點編號,

1萬個測點只需

2位元組整型,但考慮到最大儲存測點可能超過

65536

,因此,定義為

4位元組整型

second整型

4位元組 秒

millsecond

短整型 2位元組

毫秒quality位元組

1位元組質量戳

value

雙精度數 8

位元組 值

關聯式資料庫中,計算歷史資料應考慮如下幾個方面的因素: l

管理檔案 l

**式描述頭 l

資料 l索引

其中,管理檔案及**式描述頭可以忽略不計,只需要考慮資料和索引即可。另外,在此也不考慮日誌檔案的大小。

假定關聯式資料庫中不對資料進行任何壓縮,採用定時儲存,則資料容量的計算公式如下所示:

資料容量

=單條歷史資料的尺寸

*秒數

*分鐘數

*小時數

*天數

*測點數

所以,資料容量

=(4+4+2+1+8)*60*60*24*365*10000=5580g

假定對該表中的

tagid

、second

和millsecond

建立唯一索引,同時假定關聯式資料庫的索引結構為

b+樹索引,一般的

b+樹的利用效率在

40%左右,因此,索引大小的計算公式如下所示:

索引容量

=單條索引的尺寸

*秒數

*分鐘數

*小時數

*天數

*測點數

/0.4

所以,索引容量

=(4+4+2)*60*60*24*365*10000/0.4=7342g

因此,用關聯式資料庫儲存

10000

個每秒鐘變化一次的雙精度數,同時建立乙個索引,需要磁碟空間為:

12922g。

下面,我們再來計算一下實時資料庫的歷史資料容量的計算方法。

首先要說明,不同的實時資料庫對歷史資料採用了不同的存貯方法,因此,計算方法也各不相同,在此,僅以我們自己的實時資料庫為例,進行計算。

首先需要介紹一下我們的實時資料庫的特點: l

歷史資料按時間段分為多個檔案儲存,每個檔案儲存一段時間內的歷史資料,儲存一年的歷史資料大概需要

60個檔案; l

每段時間內的資料和索引儲存在同乙個檔案內; l

測點的id

與其它資料在檔案內分開儲存。

針對我們的實時資料庫,計算歷史資料應考慮如下幾個方面的因素: l

管理檔案 l

檔案頭

l資料 l

索引 其中,管理檔案的大小大概為

100k

左右,可以忽略。

檔案頭大小

=單個檔案頭大小

*所有歷史資料檔案頭大小

=512k*60=0.03g

,也可以忽略

在完全不壓縮的情況下,資料容量的計算公式為:

不壓縮資料容量

=單條歷史資料的尺寸

*秒數

*分鐘數

*小時數

*天數

*測點數

其中,單條歷史資料的尺寸已經過緊密化處理,只佔

14位元組,所以,資料容量

=14*60*60*24*365*10000=4111g

我們的實時資料庫採用了特殊的索引機制,不需要對每條資料進行索引,平均

200條資料才需要記錄一次索引,在完全不壓縮的情況下,索引容量的計算方法為:

不壓縮索引容量

=單條索引的尺寸

*秒數

*分鐘數

*小時數

*天數

*測點數

/200

所以,索引容量

=10*60*60*24*365*10000/200=15g

最後,再考慮壓縮率。採用不同的壓縮演算法會有不同的壓縮比,另外,還與壓縮率有關,這個沒有統一的計算公式。但是,在工程現場,一般而言,採用哈佛曼演算法的壓縮比為

15:1

左右,採用變化壓縮演算法的壓縮比為

20:1

左右,採用旋轉門演算法的壓縮比為

30:1

左右。如果再加上一些特殊的技術(如二次壓縮技術,質量戳與資料值分開儲存等),壓縮比可以達到

40:1

左右。我們就按

40:1

進行計算

壓縮後總容量

=(不壓縮資料容量

+不壓縮索引容量

)/壓縮比

所以,以上例子中,實時資料庫歷史資料總容量=(

4111+15

)/40=103g

注意,以上計算只考慮了雙精度數測點,如果系統中還有開關量、字串、單精度數,其中,開關量的變化可能非常緩慢,這些沒有準確的計算公式,可以近似地處理為,將以上結果再除以4。

最後,給出乙個在我們的實時資料庫中,大致計算歷史資料容量的公式:

歷史資料容量

=年數

*萬點數

*25/

平均變化一次的秒數

實時歷史資料庫技術 提綱

2 時間壓縮 採用差值法,可以用unsigned short int 甚至unsigned char來存貯時標。毫秒可採用unsigned char來存貯。3 質量碼 因為質量值相對穩定的,可考慮統計方法,只存好的質量。3 模擬量的存貯 a 基於差值的方法,可用乙個unsigned short in...

EDNA實時資料庫兩種取歷史資料值的方式

1.dnagetnexthistutc函式 根據游標乙個乙個值取 int i ezdnaapinet.ezdnaapi.history.dnagethistdirectrawutc szserver,szpoint,start,end,ref key if i 0 if pdvalue dlowli...

EDNA實時資料庫兩種取歷史資料值的方式

1.dnagetnexthistutc函式 根據游標乙個乙個值取 int i ezdnaapinet.ezdnaapi.history.dnagethistdirectrawutc szserver,szpoint,start,end,ref key if i 0 if pdvalue dlowli...