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做到了,接下來(lái)我們就來(lái)具體看看FThistorian是如何做到這點(diǎn)的。
首先簡(jiǎn)單介紹一下FThistorian的歷史數(shù)據(jù)文件的基本格式,F(xiàn)Thistorian的歷史數(shù)據(jù)都存儲(chǔ)在形如piarch.001這樣的數(shù)據(jù)文件中,與之相對(duì)應(yīng)的還有一個(gè)形如piarch.001.ann這樣的文件,后者是用來(lái)存儲(chǔ)針對(duì)變量記錄的注釋用的,一般很少使用,我也未做分析。對(duì)于形如piarch.001這樣的數(shù)據(jù)文件內(nèi)部,PI采用的是分塊(分頁(yè))的管理方式,每塊(頁(yè))的大小為1024字節(jié),這實(shí)質(zhì)上隱含限制了一條變量記錄的長(zhǎng)度是不可能超過(guò)1000字節(jié)的。頁(yè)從文件開頭開始編號(hào),第一個(gè)頁(yè)號(hào)為0,用于存儲(chǔ)跟文件相關(guān)的信息。之后的頁(yè)就用于存儲(chǔ)變量歷史數(shù)據(jù),每個(gè)變量初始被分配一個(gè)頁(yè)用于存儲(chǔ)數(shù)據(jù),隨著記錄的追加,更多的頁(yè)被分配給變量,當(dāng)頁(yè)數(shù)多余3時(shí)(根據(jù)我的觀察)時(shí),F(xiàn)Thistorian采用如下的數(shù)據(jù)結(jié)構(gòu)來(lái)組織變量數(shù)據(jù)。FThistorian采用的是一種兩層的簡(jiǎn)單存儲(chǔ)結(jié)構(gòu),而不是大家通常想象的多層樹型結(jié)構(gòu)(例如B+樹)。每一層相鄰的兩個(gè)頁(yè)之間是互相鏈接在一起的,同時(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)的頁(yè)號(hào)。這樣的存儲(chǔ)結(jié)構(gòu)有什么優(yōu)點(diǎn)、有什么缺點(diǎn),相信大家都是一目了然,我就不多說(shuō)了。
接下來(lái)說(shuō)說(shuō)每個(gè)頁(yè)(塊)內(nèi)的數(shù)據(jù)組織,前面已經(jīng)說(shuō)過(guò)每個(gè)頁(yè)的大小為1024字節(jié),除去30字節(jié)左右的固定頁(yè)頭(不同數(shù)據(jù)類型的頁(yè)頭會(huì)有細(xì)微差別,但都包含以下信息:變量ID、當(dāng)前頁(yè)號(hào)、上一頁(yè)號(hào)、下一頁(yè)號(hào)、父頁(yè)號(hào)、是否為索引節(jié)點(diǎn)標(biāo)志、記錄條數(shù)、起始時(shí)間戳等),每個(gè)頁(yè)用于存儲(chǔ)歷史數(shù)據(jù)的有效空間為990個(gè)字節(jié)左右。
對(duì)于歷史記錄的存儲(chǔ),F(xiàn)Thistorian最核心的理念就是“不顧一切的盡可能縮減存儲(chǔ)記錄所需要的磁盤空間并滿足運(yùn)行穩(wěn)定性”。
首先簡(jiǎn)單介紹一下FThistorian的歷史數(shù)據(jù)文件的基本格式,F(xiàn)Thistorian的歷史數(shù)據(jù)都存儲(chǔ)在形如piarch.001這樣的數(shù)據(jù)文件中,與之相對(duì)應(yīng)的還有一個(gè)形如piarch.001.ann這樣的文件,后者是用來(lái)存儲(chǔ)針對(duì)變量記錄的注釋用的,一般很少使用,我也未做分析。對(duì)于形如piarch.001這樣的數(shù)據(jù)文件內(nèi)部,PI采用的是分塊(分頁(yè))的管理方式,每塊(頁(yè))的大小為1024字節(jié),這實(shí)質(zhì)上隱含限制了一條變量記錄的長(zhǎng)度是不可能超過(guò)1000字節(jié)的。頁(yè)從文件開頭開始編號(hào),第一個(gè)頁(yè)號(hào)為0,用于存儲(chǔ)跟文件相關(guān)的信息。之后的頁(yè)就用于存儲(chǔ)變量歷史數(shù)據(jù),每個(gè)變量初始被分配一個(gè)頁(yè)用于存儲(chǔ)數(shù)據(jù),隨著記錄的追加,更多的頁(yè)被分配給變量,當(dāng)頁(yè)數(shù)多余3時(shí)(根據(jù)我的觀察)時(shí),F(xiàn)Thistorian采用如下的數(shù)據(jù)結(jié)構(gòu)來(lái)組織變量數(shù)據(jù)。FThistorian采用的是一種兩層的簡(jiǎn)單存儲(chǔ)結(jié)構(gòu),而不是大家通常想象的多層樹型結(jié)構(gòu)(例如B+樹)。每一層相鄰的兩個(gè)頁(yè)之間是互相鏈接在一起的,同時(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)的頁(yè)號(hào)。這樣的存儲(chǔ)結(jié)構(gòu)有什么優(yōu)點(diǎn)、有什么缺點(diǎn),相信大家都是一目了然,我就不多說(shuō)了。
接下來(lái)說(shuō)說(shuō)每個(gè)頁(yè)(塊)內(nèi)的數(shù)據(jù)組織,前面已經(jīng)說(shuō)過(guò)每個(gè)頁(yè)的大小為1024字節(jié),除去30字節(jié)左右的固定頁(yè)頭(不同數(shù)據(jù)類型的頁(yè)頭會(huì)有細(xì)微差別,但都包含以下信息:變量ID、當(dāng)前頁(yè)號(hào)、上一頁(yè)號(hào)、下一頁(yè)號(hào)、父頁(yè)號(hào)、是否為索引節(jié)點(diǎn)標(biāo)志、記錄條數(shù)、起始時(shí)間戳等),每個(gè)頁(yè)用于存儲(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ī)制揭秘
* 由于無(wú)法獲得聯(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ī)制揭秘”的更多資訊
個(gè)人求購(gòu)










