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










