• 
    <ul id="auswy"><sup id="auswy"></sup></ul>
  • <ul id="auswy"></ul>
    ABB
    關注中國自動化產業發展的先行者!
    CAIAC 2025
    2025工業安全大會
    OICT公益講堂
    當前位置:首頁 >> 案例 >> 案例首頁

    案例頻道

    一個實時歷史數據存儲文件結構的設計
    • 企業:控制網     領域:儀器儀表     行業:建筑樓宇    
    • 點擊數:5178     發布時間:2008-05-15 22:16:27
    • 分享到:


        張永軍(1981-)
    男,碩士研究生,(華北計算機系統工程研究所  北京 100101)主要研究方向為實時數據庫,MES。

    摘要:實時數據庫是大數據量的應用,因此它的存儲方案必須具有很高的讀寫效率。同時實時庫的應用要求滿足長期性和魯棒性。但是長期性和魯棒性是相互矛盾的。本文給出了一個緩和長期性和魯棒性矛盾的實時歷史數據庫文件系統的解決方案。

    關鍵詞:實時數據庫;存儲;文件系統

    Abstract: Real time database is an application of mass data. Therefore, its storage scheme requires not only high efficiency of read and write, but also longtime and robustness. In fact, it is contradictory between longtime and robustness. A solution for real time historical database file system is presented in this paper, which satisfies the said requirements. 

    Key words:  Real time database; Storage; File system architecture

    1     引言

        現代工業的飛速發展,尤其是計算機在工業過程控制中的廣泛應用,極大地提高了生產過程的自動化程度,同時也對工業監控軟件提出了更高的要求。系統一方面需要維護大量共享數據和控制知識;另一方面其應用活動有很強的時間性,要求在一定的時刻和一定的時間區段內對外部環境采集數據,按彼此間的聯系存取已獲得的數據和處理采集的數據,再及時做出響應。同時,他們所處理的數據往往是“短暫”的,即只在一定的時間范圍內有效,過時則無意義,所以這種應用同時需要數據庫技術和實時數據處理技術。但傳統的數據庫系統旨在處理永久性數據,其設計與開發主要強調維護數據的完整性、一致性,提高系統的吞吐量和降低系統代價,根本不考慮與數據及其處理相關聯的定時限制,因而傳統的商務和管理事務型 DBMS 不能滿足這種實時應用的需求。而傳統的實時系統雖然支持處理的定時限制,但它們典型地是針對具有簡單結構與聯系、穩定并且可預報的數據的要求,不涉及維護共享數據的完整性、一致性。因此,只有將數據庫與實時系統兩者的概念、技術、方法與機制“完善”地集成在一起的實時數據庫系統才能同時支持定時性和一致性要求。

    2    實時數據特點

        由于實時數據庫與時間緊密相關,它所存儲的數據通常是指那些基于時間的連續模擬量或數字量(例如溫度、壓力、流量、閥門開關等),這些數據有如下四個鮮明特點:

        (1)數據量龐大。流程工業中一套工業設備從投入使用到設備報廢封存,一般都要經歷至少幾十年的運行時間,在運行期間需要連續記錄生產過程中的關鍵數據,作為改進生產工藝、提高生產效率、監視故障信息的重要參考。但是經過數據長年累月的累積,其龐大程度幾乎難以想象。我們以一個記錄1000個歷史記錄點的實時歷史數據庫為例,假如記錄類型都為浮點型,記錄周期為1秒,該系統運行1年大致的數據量為:

        8×10000×365×24×3600=2522880000000字節(約2350G)

        此處歷史記錄保存的信息包括記錄點、記錄值和相應的時間戳,共8字節。工廠記錄點的多少根據工廠的規模而不同,但是一般工廠的采集點都要上萬個。如此規模的歷史數據庫運行幾年后數據量會非常龐大,數據庫查詢時效率也必然很低。

        (2)時效性:每個需要記錄的值都與時間相關,一秒鐘之后的數據與一秒鐘之前的數據可能就不一樣了。因此,在記錄值的同時必須通過某種方法將其對應的時間(時間戳)也記錄下來。

        (3)存儲格式相對簡單、固定和獨立。雖然從應用的角度看,保存的數據有I/O整型、實數型、離散型、內存整型、開關類型等,但是從技術實現的角度看,都可以總結為1字節,2字節或者4字節數據三種情況,同時歷史記錄點之間不存在依存關系,即不存在類似關系數據庫中數據之間錯綜復雜的關系,所以記錄格式少而固定,沒有復雜的關系。

        (4)保存的時間間隔相差很大。通常在流程工業現場存在這樣的情況,就是某些記錄點變化頻率非常高,甚至是幾十毫秒變化一次,而有些則是很長一段時間才會發生變化,據此必然對實時歷史數據庫的存儲提出了異樣的保存要求,所以歷史數據存儲時必須統籌兼顧又細化要求。

        由于數據量的龐大性,我們無法將實時數據全都存到關系數據庫中。即使可以,進行實時數據庫產品開發后的最終產品受關系數據庫接口的制約,靈活性、效率等無法保證,而且項目實施成本較高。在此情況下,我們設計了一個存儲數據文件的格式,該數據文件可以提高系統運行效率和數據壓縮率,適應復雜的生產運行環境,具有較好的市場和應用前景,同時能滿足歷史數據庫的長期性和魯棒性。下面講闡述該數據文件的結構。

    3   文件結構

        存儲系統使用兩種類型的文件:“數據文件索引文件”(以下簡稱索引文件)和“數據文件”。索引文件只能有一個,它記錄所有數據文件的基本信息;數據文件可以有多個,它們記錄實際的生產數據。



    圖1  文件結構圖

        如上圖所示,索引文件由一些索引項構成,每一項對應一個數據文件。索引項中的內容包括與其相對應的數據文件的路徑、開始時間和結束時間。所有索引項以開始時間為序排列。在這里對數據文件進行詳細介紹。

        數據文件由文件頭、點目錄、數據目錄和數據區四部分構成

        3.1   文件頭

        文件頭包含此文件的基本信息,結構如圖1所示。



    圖2 文件頭結構圖

        3.2   點目錄

        點目錄存儲點在數據目錄中的第一項的位置和點類型。為了查找方便,其中的點嚴格按點id(點的唯一標識,一個整數)排序。每個點目錄項長8字節(64位),結構如圖3所示。



    圖3

        整個點目錄就是一個上述結構的數組,它能包含的項數由文件頭的“最大點數”決定。

       
    3.3   數據目錄

        數據目錄記錄了點使用的所有數據片,數據區的最小分配單元,詳見數據區),它是由數據目錄項構成的數組,每個數據目錄項對應一個數據片,其大小也占用8字節,結構如圖4所示



    圖4

        其中,開始時間是它所對應的數據片的開始時間,這是一個相對于文件頭中的“開始時間”的值,以秒、0.1秒或0.01秒為單位。下一項索引是同一個點使用的下一個數據目錄項的索引。這樣,每個點使用的所有數據目錄項構成了一個鏈表。

        數據區是真正保存歷史數據的位置,為提高讀寫效率,將它劃分為大小相等的數據片,根據實際效率測試結果,片的大小可取1024、2048、4096等值(后文的討論以2048字節為例),但應保證其大小是磁盤扇區大小的整數倍。數據區的分配以片為單位。下圖說明了點目錄、數據目錄和數據片之間的關系。



    圖5  數據區結構圖

        如圖5所示,數據目錄項和數據片具有一一對應的關系,第n個數據目錄項對應的就是第n個數據片。點3的第一個數據目錄項是6,第二個數據目錄項是101,所以它使用的數據片也是第6片和第101片;同理,點5使用的數據片是8、103和105。

        當某個點需要一個新的數據片時,分配給它的總是當前使用的最后一個數據片的下一個,如圖6所示。
    圖6中每個小格代表一個數據片,一開始,點1—5分別使用數據片1—5;一段時間之后,點2的數據寫滿了2號數據片,這時就必須給它分配新的數據片,而分配給它的將是6號數據片;又過一段時間,點5也需要新的數據片了,這時將分配給它7號數據片。



    圖6

        從圖6中也可以發現,同一個時間段內,點2寫的數據量最大,點5次之,點1、3、4則相對較少。我們把單位時間內一個點寫的數據量稱為點的速度,簡稱點速。同一個點在不同時刻的點速也是不一樣的,但總體上看,當點數達到一定的規模以后,所有點的點速將呈正態分布。



    圖7

        圖7是數據片中的數據存儲結構:

        開始時間是一個絕對時間,本數據片中的所有數據的時間戳都晚于它。它的取值有兩個選擇,一是上一個數據片最后一個數據的時間,一是本數據片第一個數據的時間,為了查詢時的方便,選擇前者。數據片存儲“上一片的最后一個數據”也是為了特殊情況的查詢方便。特別的,如果沒有上一個數據片,則開始時間為本片的第一個數據的時間,“上一片的最后一個數據”的質量字段將被置為invalid(無效)。

    4   二級索引文件管理

        文件結構設計好之后,文件的存儲管理又是一個問題。因為在文件使用和管理中,對于一個包含大量文件的文件夾,在打開的時候要消耗很長時間,而只有少量文件的文件夾在打開的時候需要的時間幾乎可以忽略。嘗試打開一個包含有10000個文件(每個文件大小為10M)的文件夾,打開所需的時間在10秒鐘以上,而一個只有10個文件的文件夾,打開的時間少于0.5秒鐘。從直觀的角度上看,一個目錄的文件過多會嚴重影響系統的訪問性能,因此有必要將大量的文件建立子目錄進行存儲。

        我們設定系統中的數據文件(每個文件大小固定為10M)為10000個,從測試效果上對這個問題給出確定性答案,并研究在實時歷史數據庫中可以采用的有實際意義的分配方案。由于文件總數是一定的,因而可以說我們的研究是建立在對不同目錄級數的比較之上,為了方便,將一個目錄下存儲10000個文件稱為單級目錄方案,而分成若100個子目錄存儲則稱為二級目錄方案(每個子目錄存儲10個文件)。表1為兩種存儲情況下查找一個文件的時間。

        表1 單級和二級目錄查詢時間比較

        從對比中我們可以清晰的看出,兩級目錄在同樣條件下,相比與根目錄下的文件訪問速度有很大的優勢。而多級目錄的組織原則如下(設單級目錄為A):

        (1)當A文件大小不超過1簇(在FAT32文件系統中,存儲的單位是扇區,每一個扇區的大小是固定的512字節,若干個扇區組成一個簇,每個簇可以包含的扇區數必須是2的整數次方,這樣簇的大小可以是512B,1k,2k,4k,8k,16k,32k或者64k其中之一)的時候,是不需要設立子目錄的,所有的文件在一簇空間之內都可以訪問到;

        (2)當A的文件大小超過1簇的時候,若設立子目錄,則所有項都需要通過兩級目錄才能 夠訪問,其對硬盤的平均訪問次數為2。 若不設立子目錄,則A的目錄文件就需要分配新的簇,若A的目錄文件共需要N個簇,對文件的訪問遵從平均分布,則硬盤的平均訪問次數T為:T=1×1/N+2×1/N+3×1/N+…+N×1/N,

        令T=2,對這個關于N的函數求解得N=3。也就是說,在A的目錄文件總共需要3個簇的時候,其平均硬盤訪問次數達到2, 而在此之前,單級目錄的效率會更高一些。對于大小為16KB的簇,當存儲名字不超過13個字符的文件時,目錄文件為3簇大小的時候,其目錄下一共有1024×16×3/(32×2) =768個文件。二級索引結構如圖8所示。



    圖8   二級索引結構

    5   結論

        本文給出了一個實時數據庫存儲文件的實現方案,該方案可以提高實時數據庫中歷史數據庫的存取速度,該方案已經在和利時的實時數據庫HIRIS中得到應用,取得了不錯的效果。

    其他作者:

        劉   波(華北計算機系統工程研究所  北京 100101)

    參考文獻:

        [1] Ben Kao、Hector Garcia-Molina:AN OVERVIEW OF REAL-TIME DATABASE SYSTEMS.

        [2] 劉云生.現代數據庫技術.國防工業出版社,2001.

        [3] [美」Raghu Ramakrishnan著,周立柱,張志強等譯.數據庫管理系統原理與設計.清華大學出版社,2004.

        [4] 馬國華.實時數據庫及其管理系統,自動化博覽,2002,(5).

        [5] 周東球等.先進控制軟件系統實時數據庫的設計,自動化博覽,2002,(7).

    熱點新聞

    推薦產品

    x
    • 在線反饋
    1.我有以下需求:



    2.詳細的需求:
    姓名:
    單位:
    電話:
    郵件: