AB FThistorian 數(shù)據(jù)存儲(chǔ)機(jī)制揭秘
FThistorian是如何存儲(chǔ)歷史數(shù)據(jù)的。例如,在FThistorian存儲(chǔ)一條32位浮點(diǎn)型的變量的記錄平均只需5個(gè)字節(jié),客戶就很難想明白FThistorian是怎么做到的。因?yàn)橐粭l記錄至少需要包含三個(gè)字段VQT(V:Value,指變量值;Q:Quality,指數(shù)據(jù)質(zhì)量;T:Timestamp,指變量值對(duì)應(yīng)的時(shí)間戳),對(duì)于32位浮點(diǎn)型變量而言,變量值V就需要4個(gè)字節(jié)存儲(chǔ),這就意味著Q和T平均只占用一個(gè)字節(jié),這幾乎不可能,但是FThistorian做到了,接下來我們就來具體看看FThistorian是如何做到這點(diǎn)的。
首先簡單介紹一下FThistorian的歷史數(shù)據(jù)文件的基本格式,F(xiàn)Thistorian的歷史數(shù)據(jù)都存儲(chǔ)在形如piarch.001這樣的數(shù)據(jù)文件中,與之相對(duì)應(yīng)的還有一個(gè)形如piarch.001.ann這樣的文件,后者是用來存儲(chǔ)針對(duì)變量記錄的注釋用的,一般很少使用,我也未做分析。對(duì)于形如piarch.001這樣的數(shù)據(jù)文件內(nèi)部,PI采用的是分塊(分頁)的管理方式,每塊(頁)的大小為1024字節(jié),這實(shí)質(zhì)上隱含限制了一條變量記錄的長度是不可能超過1000字節(jié)的。頁從文件開頭開始編號(hào),第一個(gè)頁號(hào)為0,用于存儲(chǔ)跟文件相關(guān)的信息。之后的頁就用于存儲(chǔ)變量歷史數(shù)據(jù),每個(gè)變量初始被分配一個(gè)頁用于存儲(chǔ)數(shù)據(jù),隨著記錄的追加,更多的頁被分配給變量,當(dāng)頁數(shù)多余3時(shí)(根據(jù)我的觀察)時(shí),F(xiàn)Thistorian采用如下的數(shù)據(jù)結(jié)構(gòu)來組織變量數(shù)據(jù)。FThistorian采用的是一種兩層的簡單存儲(chǔ)結(jié)構(gòu),而不是大家通常想象的多層樹型結(jié)構(gòu)(例如B+樹)。每一層相鄰的兩個(gè)頁之間是互相鏈接在一起的,同時(shí)葉子節(jié)點(diǎn)(記錄節(jié)點(diǎn))也維護(hù)到父節(jié)點(diǎn)(索引節(jié)點(diǎn))的反向引用指針。在索引節(jié)點(diǎn)上存儲(chǔ)的記錄是每個(gè)記錄節(jié)點(diǎn)的起始時(shí)間和對(duì)應(yīng)的頁號(hào)。這樣的存儲(chǔ)結(jié)構(gòu)有什么優(yōu)點(diǎn)、有什么缺點(diǎn),相信大家都是一目了然,我就不多說了。
接下來說說每個(gè)頁(塊)內(nèi)的數(shù)據(jù)組織,前面已經(jīng)說過每個(gè)頁的大小為1024字節(jié),除去30字節(jié)左右的固定頁頭(不同數(shù)據(jù)類型的頁頭會(huì)有細(xì)微差別,但都包含以下信息:變量ID、當(dāng)前頁號(hào)、上一頁號(hào)、下一頁號(hào)、父頁號(hào)、是否為索引節(jié)點(diǎn)標(biāo)志、記錄條數(shù)、起始時(shí)間戳等),每個(gè)頁用于存儲(chǔ)歷史數(shù)據(jù)的有效空間為990個(gè)字節(jié)左右。
對(duì)于歷史記錄的存儲(chǔ),F(xiàn)Thistorian最核心的理念就是“不顧一切的盡可能縮減存儲(chǔ)記錄所需要的磁盤空間并滿足運(yùn)行穩(wěn)定性”。
首先簡單介紹一下FThistorian的歷史數(shù)據(jù)文件的基本格式,F(xiàn)Thistorian的歷史數(shù)據(jù)都存儲(chǔ)在形如piarch.001這樣的數(shù)據(jù)文件中,與之相對(duì)應(yīng)的還有一個(gè)形如piarch.001.ann這樣的文件,后者是用來存儲(chǔ)針對(duì)變量記錄的注釋用的,一般很少使用,我也未做分析。對(duì)于形如piarch.001這樣的數(shù)據(jù)文件內(nèi)部,PI采用的是分塊(分頁)的管理方式,每塊(頁)的大小為1024字節(jié),這實(shí)質(zhì)上隱含限制了一條變量記錄的長度是不可能超過1000字節(jié)的。頁從文件開頭開始編號(hào),第一個(gè)頁號(hào)為0,用于存儲(chǔ)跟文件相關(guān)的信息。之后的頁就用于存儲(chǔ)變量歷史數(shù)據(jù),每個(gè)變量初始被分配一個(gè)頁用于存儲(chǔ)數(shù)據(jù),隨著記錄的追加,更多的頁被分配給變量,當(dāng)頁數(shù)多余3時(shí)(根據(jù)我的觀察)時(shí),F(xiàn)Thistorian采用如下的數(shù)據(jù)結(jié)構(gòu)來組織變量數(shù)據(jù)。FThistorian采用的是一種兩層的簡單存儲(chǔ)結(jié)構(gòu),而不是大家通常想象的多層樹型結(jié)構(gòu)(例如B+樹)。每一層相鄰的兩個(gè)頁之間是互相鏈接在一起的,同時(shí)葉子節(jié)點(diǎn)(記錄節(jié)點(diǎn))也維護(hù)到父節(jié)點(diǎn)(索引節(jié)點(diǎn))的反向引用指針。在索引節(jié)點(diǎn)上存儲(chǔ)的記錄是每個(gè)記錄節(jié)點(diǎn)的起始時(shí)間和對(duì)應(yīng)的頁號(hào)。這樣的存儲(chǔ)結(jié)構(gòu)有什么優(yōu)點(diǎn)、有什么缺點(diǎn),相信大家都是一目了然,我就不多說了。
接下來說說每個(gè)頁(塊)內(nèi)的數(shù)據(jù)組織,前面已經(jīng)說過每個(gè)頁的大小為1024字節(jié),除去30字節(jié)左右的固定頁頭(不同數(shù)據(jù)類型的頁頭會(huì)有細(xì)微差別,但都包含以下信息:變量ID、當(dāng)前頁號(hào)、上一頁號(hào)、下一頁號(hào)、父頁號(hào)、是否為索引節(jié)點(diǎn)標(biāo)志、記錄條數(shù)、起始時(shí)間戳等),每個(gè)頁用于存儲(chǔ)歷史數(shù)據(jù)的有效空間為990個(gè)字節(jié)左右。
對(duì)于歷史記錄的存儲(chǔ),F(xiàn)Thistorian最核心的理念就是“不顧一切的盡可能縮減存儲(chǔ)記錄所需要的磁盤空間并滿足運(yùn)行穩(wěn)定性”。
本文標(biāo)簽:AB FThistorian 數(shù)據(jù)存儲(chǔ)機(jī)制揭秘
* 由于無法獲得聯(lián)系方式等原因,本網(wǎng)使用的文字及圖片的作品報(bào)酬未能及時(shí)支付,在此深表歉意,請(qǐng)《AB FThistorian 數(shù)據(jù)存儲(chǔ)機(jī)制揭秘》相關(guān)權(quán)利人與機(jī)電之家網(wǎng)取得聯(lián)系。
關(guān)于“AB FThistorian 數(shù)據(jù)存儲(chǔ)機(jī)制揭秘”的更多資訊










