張永軍(1981-)
男,碩士研究生,(華北計(jì)算機(jī)系統(tǒng)工程研究所 北京 100101)主要研究方向?yàn)閷?shí)時(shí)數(shù)據(jù)庫(kù),MES。
摘要:實(shí)時(shí)數(shù)據(jù)庫(kù)是大數(shù)據(jù)量的應(yīng)用,因此它的存儲(chǔ)方案必須具有很高的讀寫(xiě)效率。同時(shí)實(shí)時(shí)庫(kù)的應(yīng)用要求滿足長(zhǎng)期性和魯棒性。但是長(zhǎng)期性和魯棒性是相互矛盾的。本文給出了一個(gè)緩和長(zhǎng)期性和魯棒性矛盾的實(shí)時(shí)歷史數(shù)據(jù)庫(kù)文件系統(tǒng)的解決方案。
關(guān)鍵詞:實(shí)時(shí)數(shù)據(jù)庫(kù);存儲(chǔ);文件系統(tǒng)
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 引言
現(xiàn)代工業(yè)的飛速發(fā)展,尤其是計(jì)算機(jī)在工業(yè)過(guò)程控制中的廣泛應(yīng)用,極大地提高了生產(chǎn)過(guò)程的自動(dòng)化程度,同時(shí)也對(duì)工業(yè)監(jiān)控軟件提出了更高的要求。系統(tǒng)一方面需要維護(hù)大量共享數(shù)據(jù)和控制知識(shí);另一方面其應(yīng)用活動(dòng)有很強(qiáng)的時(shí)間性,要求在一定的時(shí)刻和一定的時(shí)間區(qū)段內(nèi)對(duì)外部環(huán)境采集數(shù)據(jù),按彼此間的聯(lián)系存取已獲得的數(shù)據(jù)和處理采集的數(shù)據(jù),再及時(shí)做出響應(yīng)。同時(shí),他們所處理的數(shù)據(jù)往往是“短暫”的,即只在一定的時(shí)間范圍內(nèi)有效,過(guò)時(shí)則無(wú)意義,所以這種應(yīng)用同時(shí)需要數(shù)據(jù)庫(kù)技術(shù)和實(shí)時(shí)數(shù)據(jù)處理技術(shù)。但傳統(tǒng)的數(shù)據(jù)庫(kù)系統(tǒng)旨在處理永久性數(shù)據(jù),其設(shè)計(jì)與開(kāi)發(fā)主要強(qiáng)調(diào)維護(hù)數(shù)據(jù)的完整性、一致性,提高系統(tǒng)的吞吐量和降低系統(tǒng)代價(jià),根本不考慮與數(shù)據(jù)及其處理相關(guān)聯(lián)的定時(shí)限制,因而傳統(tǒng)的商務(wù)和管理事務(wù)型 DBMS 不能滿足這種實(shí)時(shí)應(yīng)用的需求。而傳統(tǒng)的實(shí)時(shí)系統(tǒng)雖然支持處理的定時(shí)限制,但它們典型地是針對(duì)具有簡(jiǎn)單結(jié)構(gòu)與聯(lián)系、穩(wěn)定并且可預(yù)報(bào)的數(shù)據(jù)的要求,不涉及維護(hù)共享數(shù)據(jù)的完整性、一致性。因此,只有將數(shù)據(jù)庫(kù)與實(shí)時(shí)系統(tǒng)兩者的概念、技術(shù)、方法與機(jī)制“完善”地集成在一起的實(shí)時(shí)數(shù)據(jù)庫(kù)系統(tǒng)才能同時(shí)支持定時(shí)性和一致性要求。
2 實(shí)時(shí)數(shù)據(jù)特點(diǎn)
由于實(shí)時(shí)數(shù)據(jù)庫(kù)與時(shí)間緊密相關(guān),它所存儲(chǔ)的數(shù)據(jù)通常是指那些基于時(shí)間的連續(xù)模擬量或數(shù)字量(例如溫度、壓力、流量、閥門開(kāi)關(guān)等),這些數(shù)據(jù)有如下四個(gè)鮮明特點(diǎn):
(1)數(shù)據(jù)量龐大。流程工業(yè)中一套工業(yè)設(shè)備從投入使用到設(shè)備報(bào)廢封存,一般都要經(jīng)歷至少幾十年的運(yùn)行時(shí)間,在運(yùn)行期間需要連續(xù)記錄生產(chǎn)過(guò)程中的關(guān)鍵數(shù)據(jù),作為改進(jìn)生產(chǎn)工藝、提高生產(chǎn)效率、監(jiān)視故障信息的重要參考。但是經(jīng)過(guò)數(shù)據(jù)長(zhǎng)年累月的累積,其龐大程度幾乎難以想象。我們以一個(gè)記錄1000個(gè)歷史記錄點(diǎn)的實(shí)時(shí)歷史數(shù)據(jù)庫(kù)為例,假如記錄類型都為浮點(diǎn)型,記錄周期為1秒,該系統(tǒng)運(yùn)行1年大致的數(shù)據(jù)量為:
8×10000×365×24×3600=2522880000000字節(jié)(約2350G)
此處歷史記錄保存的信息包括記錄點(diǎn)、記錄值和相應(yīng)的時(shí)間戳,共8字節(jié)。工廠記錄點(diǎn)的多少根據(jù)工廠的規(guī)模而不同,但是一般工廠的采集點(diǎn)都要上萬(wàn)個(gè)。如此規(guī)模的歷史數(shù)據(jù)庫(kù)運(yùn)行幾年后數(shù)據(jù)量會(huì)非常龐大,數(shù)據(jù)庫(kù)查詢時(shí)效率也必然很低。
(2)時(shí)效性:每個(gè)需要記錄的值都與時(shí)間相關(guān),一秒鐘之后的數(shù)據(jù)與一秒鐘之前的數(shù)據(jù)可能就不一樣了。因此,在記錄值的同時(shí)必須通過(guò)某種方法將其對(duì)應(yīng)的時(shí)間(時(shí)間戳)也記錄下來(lái)。
(3)存儲(chǔ)格式相對(duì)簡(jiǎn)單、固定和獨(dú)立。雖然從應(yīng)用的角度看,保存的數(shù)據(jù)有I/O整型、實(shí)數(shù)型、離散型、內(nèi)存整型、開(kāi)關(guān)類型等,但是從技術(shù)實(shí)現(xiàn)的角度看,都可以總結(jié)為1字節(jié),2字節(jié)或者4字節(jié)數(shù)據(jù)三種情況,同時(shí)歷史記錄點(diǎn)之間不存在依存關(guān)系,即不存在類似關(guān)系數(shù)據(jù)庫(kù)中數(shù)據(jù)之間錯(cuò)綜復(fù)雜的關(guān)系,所以記錄格式少而固定,沒(méi)有復(fù)雜的關(guān)系。
(4)保存的時(shí)間間隔相差很大。通常在流程工業(yè)現(xiàn)場(chǎng)存在這樣的情況,就是某些記錄點(diǎn)變化頻率非常高,甚至是幾十毫秒變化一次,而有些則是很長(zhǎng)一段時(shí)間才會(huì)發(fā)生變化,據(jù)此必然對(duì)實(shí)時(shí)歷史數(shù)據(jù)庫(kù)的存儲(chǔ)提出了異樣的保存要求,所以歷史數(shù)據(jù)存儲(chǔ)時(shí)必須統(tǒng)籌兼顧又細(xì)化要求。
由于數(shù)據(jù)量的龐大性,我們無(wú)法將實(shí)時(shí)數(shù)據(jù)全都存到關(guān)系數(shù)據(jù)庫(kù)中。即使可以,進(jìn)行實(shí)時(shí)數(shù)據(jù)庫(kù)產(chǎn)品開(kāi)發(fā)后的最終產(chǎn)品受關(guān)系數(shù)據(jù)庫(kù)接口的制約,靈活性、效率等無(wú)法保證,而且項(xiàng)目實(shí)施成本較高。在此情況下,我們?cè)O(shè)計(jì)了一個(gè)存儲(chǔ)數(shù)據(jù)文件的格式,該數(shù)據(jù)文件可以提高系統(tǒng)運(yùn)行效率和數(shù)據(jù)壓縮率,適應(yīng)復(fù)雜的生產(chǎn)運(yùn)行環(huán)境,具有較好的市場(chǎng)和應(yīng)用前景,同時(shí)能滿足歷史數(shù)據(jù)庫(kù)的長(zhǎng)期性和魯棒性。下面講闡述該數(shù)據(jù)文件的結(jié)構(gòu)。
3 文件結(jié)構(gòu)
存儲(chǔ)系統(tǒng)使用兩種類型的文件:“數(shù)據(jù)文件索引文件”(以下簡(jiǎn)稱索引文件)和“數(shù)據(jù)文件”。索引文件只能有一個(gè),它記錄所有數(shù)據(jù)文件的基本信息;數(shù)據(jù)文件可以有多個(gè),它們記錄實(shí)際的生產(chǎn)數(shù)據(jù)。
圖1 文件結(jié)構(gòu)圖
如上圖所示,索引文件由一些索引項(xiàng)構(gòu)成,每一項(xiàng)對(duì)應(yīng)一個(gè)數(shù)據(jù)文件。索引項(xiàng)中的內(nèi)容包括與其相對(duì)應(yīng)的數(shù)據(jù)文件的路徑、開(kāi)始時(shí)間和結(jié)束時(shí)間。所有索引項(xiàng)以開(kāi)始時(shí)間為序排列。在這里對(duì)數(shù)據(jù)文件進(jìn)行詳細(xì)介紹。
數(shù)據(jù)文件由文件頭、點(diǎn)目錄、數(shù)據(jù)目錄和數(shù)據(jù)區(qū)四部分構(gòu)成
3.1 文件頭
文件頭包含此文件的基本信息,結(jié)構(gòu)如圖1所示。
圖2 文件頭結(jié)構(gòu)圖
3.2 點(diǎn)目錄
點(diǎn)目錄存儲(chǔ)點(diǎn)在數(shù)據(jù)目錄中的第一項(xiàng)的位置和點(diǎn)類型。為了查找方便,其中的點(diǎn)嚴(yán)格按點(diǎn)id(點(diǎn)的唯一標(biāo)識(shí),一個(gè)整數(shù))排序。每個(gè)點(diǎn)目錄項(xiàng)長(zhǎng)8字節(jié)(64位),結(jié)構(gòu)如圖3所示。
圖3
整個(gè)點(diǎn)目錄就是一個(gè)上述結(jié)構(gòu)的數(shù)組,它能包含的項(xiàng)數(shù)由文件頭的“最大點(diǎn)數(shù)”決定。
3.3 數(shù)據(jù)目錄
數(shù)據(jù)目錄記錄了點(diǎn)使用的所有數(shù)據(jù)片,數(shù)據(jù)區(qū)的最小分配單元,詳見(jiàn)數(shù)據(jù)區(qū)),它是由數(shù)據(jù)目錄項(xiàng)構(gòu)成的數(shù)組,每個(gè)數(shù)據(jù)目錄項(xiàng)對(duì)應(yīng)一個(gè)數(shù)據(jù)片,其大小也占用8字節(jié),結(jié)構(gòu)如圖4所示
圖4
其中,開(kāi)始時(shí)間是它所對(duì)應(yīng)的數(shù)據(jù)片的開(kāi)始時(shí)間,這是一個(gè)相對(duì)于文件頭中的“開(kāi)始時(shí)間”的值,以秒、0.1秒或0.01秒為單位。下一項(xiàng)索引是同一個(gè)點(diǎn)使用的下一個(gè)數(shù)據(jù)目錄項(xiàng)的索引。這樣,每個(gè)點(diǎn)使用的所有數(shù)據(jù)目錄項(xiàng)構(gòu)成了一個(gè)鏈表。
數(shù)據(jù)區(qū)是真正保存歷史數(shù)據(jù)的位置,為提高讀寫(xiě)效率,將它劃分為大小相等的數(shù)據(jù)片,根據(jù)實(shí)際效率測(cè)試結(jié)果,片的大小可取1024、2048、4096等值(后文的討論以2048字節(jié)為例),但應(yīng)保證其大小是磁盤扇區(qū)大小的整數(shù)倍。數(shù)據(jù)區(qū)的分配以片為單位。下圖說(shuō)明了點(diǎn)目錄、數(shù)據(jù)目錄和數(shù)據(jù)片之間的關(guān)系。
圖5 數(shù)據(jù)區(qū)結(jié)構(gòu)圖
如圖5所示,數(shù)據(jù)目錄項(xiàng)和數(shù)據(jù)片具有一一對(duì)應(yīng)的關(guān)系,第n個(gè)數(shù)據(jù)目錄項(xiàng)對(duì)應(yīng)的就是第n個(gè)數(shù)據(jù)片。點(diǎn)3的第一個(gè)數(shù)據(jù)目錄項(xiàng)是6,第二個(gè)數(shù)據(jù)目錄項(xiàng)是101,所以它使用的數(shù)據(jù)片也是第6片和第101片;同理,點(diǎn)5使用的數(shù)據(jù)片是8、103和105。
當(dāng)某個(gè)點(diǎn)需要一個(gè)新的數(shù)據(jù)片時(shí),分配給它的總是當(dāng)前使用的最后一個(gè)數(shù)據(jù)片的下一個(gè),如圖6所示。
圖6中每個(gè)小格代表一個(gè)數(shù)據(jù)片,一開(kāi)始,點(diǎn)1—5分別使用數(shù)據(jù)片1—5;一段時(shí)間之后,點(diǎn)2的數(shù)據(jù)寫(xiě)滿了2號(hào)數(shù)據(jù)片,這時(shí)就必須給它分配新的數(shù)據(jù)片,而分配給它的將是6號(hào)數(shù)據(jù)片;又過(guò)一段時(shí)間,點(diǎn)5也需要新的數(shù)據(jù)片了,這時(shí)將分配給它7號(hào)數(shù)據(jù)片。
圖6
從圖6中也可以發(fā)現(xiàn),同一個(gè)時(shí)間段內(nèi),點(diǎn)2寫(xiě)的數(shù)據(jù)量最大,點(diǎn)5次之,點(diǎn)1、3、4則相對(duì)較少。我們把單位時(shí)間內(nèi)一個(gè)點(diǎn)寫(xiě)的數(shù)據(jù)量稱為點(diǎn)的速度,簡(jiǎn)稱點(diǎn)速。同一個(gè)點(diǎn)在不同時(shí)刻的點(diǎn)速也是不一樣的,但總體上看,當(dāng)點(diǎn)數(shù)達(dá)到一定的規(guī)模以后,所有點(diǎn)的點(diǎn)速將呈正態(tài)分布。
圖7
圖7是數(shù)據(jù)片中的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu):
開(kāi)始時(shí)間是一個(gè)絕對(duì)時(shí)間,本數(shù)據(jù)片中的所有數(shù)據(jù)的時(shí)間戳都晚于它。它的取值有兩個(gè)選擇,一是上一個(gè)數(shù)據(jù)片最后一個(gè)數(shù)據(jù)的時(shí)間,一是本數(shù)據(jù)片第一個(gè)數(shù)據(jù)的時(shí)間,為了查詢時(shí)的方便,選擇前者。數(shù)據(jù)片存儲(chǔ)“上一片的最后一個(gè)數(shù)據(jù)”也是為了特殊情況的查詢方便。特別的,如果沒(méi)有上一個(gè)數(shù)據(jù)片,則開(kāi)始時(shí)間為本片的第一個(gè)數(shù)據(jù)的時(shí)間,“上一片的最后一個(gè)數(shù)據(jù)”的質(zhì)量字段將被置為invalid(無(wú)效)。
4 二級(jí)索引文件管理
文件結(jié)構(gòu)設(shè)計(jì)好之后,文件的存儲(chǔ)管理又是一個(gè)問(wèn)題。因?yàn)樵谖募褂煤凸芾碇校瑢?duì)于一個(gè)包含大量文件的文件夾,在打開(kāi)的時(shí)候要消耗很長(zhǎng)時(shí)間,而只有少量文件的文件夾在打開(kāi)的時(shí)候需要的時(shí)間幾乎可以忽略。嘗試打開(kāi)一個(gè)包含有10000個(gè)文件(每個(gè)文件大小為10M)的文件夾,打開(kāi)所需的時(shí)間在10秒鐘以上,而一個(gè)只有10個(gè)文件的文件夾,打開(kāi)的時(shí)間少于0.5秒鐘。從直觀的角度上看,一個(gè)目錄的文件過(guò)多會(huì)嚴(yán)重影響系統(tǒng)的訪問(wèn)性能,因此有必要將大量的文件建立子目錄進(jìn)行存儲(chǔ)。
我們?cè)O(shè)定系統(tǒng)中的數(shù)據(jù)文件(每個(gè)文件大小固定為10M)為10000個(gè),從測(cè)試效果上對(duì)這個(gè)問(wèn)題給出確定性答案,并研究在實(shí)時(shí)歷史數(shù)據(jù)庫(kù)中可以采用的有實(shí)際意義的分配方案。由于文件總數(shù)是一定的,因而可以說(shuō)我們的研究是建立在對(duì)不同目錄級(jí)數(shù)的比較之上,為了方便,將一個(gè)目錄下存儲(chǔ)10000個(gè)文件稱為單級(jí)目錄方案,而分成若100個(gè)子目錄存儲(chǔ)則稱為二級(jí)目錄方案(每個(gè)子目錄存儲(chǔ)10個(gè)文件)。表1為兩種存儲(chǔ)情況下查找一個(gè)文件的時(shí)間。
表1 單級(jí)和二級(jí)目錄查詢時(shí)間比較
從對(duì)比中我們可以清晰的看出,兩級(jí)目錄在同樣條件下,相比與根目錄下的文件訪問(wèn)速度有很大的優(yōu)勢(shì)。而多級(jí)目錄的組織原則如下(設(shè)單級(jí)目錄為A):
(1)當(dāng)A文件大小不超過(guò)1簇(在FAT32文件系統(tǒng)中,存儲(chǔ)的單位是扇區(qū),每一個(gè)扇區(qū)的大小是固定的512字節(jié),若干個(gè)扇區(qū)組成一個(gè)簇,每個(gè)簇可以包含的扇區(qū)數(shù)必須是2的整數(shù)次方,這樣簇的大小可以是512B,1k,2k,4k,8k,16k,32k或者64k其中之一)的時(shí)候,是不需要設(shè)立子目錄的,所有的文件在一簇空間之內(nèi)都可以訪問(wèn)到;
(2)當(dāng)A的文件大小超過(guò)1簇的時(shí)候,若設(shè)立子目錄,則所有項(xiàng)都需要通過(guò)兩級(jí)目錄才能 夠訪問(wèn),其對(duì)硬盤的平均訪問(wèn)次數(shù)為2。 若不設(shè)立子目錄,則A的目錄文件就需要分配新的簇,若A的目錄文件共需要N個(gè)簇,對(duì)文件的訪問(wèn)遵從平均分布,則硬盤的平均訪問(wèn)次數(shù)T為:T=1×1/N+2×1/N+3×1/N+…+N×1/N,
令T=2,對(duì)這個(gè)關(guān)于N的函數(shù)求解得N=3。也就是說(shuō),在A的目錄文件總共需要3個(gè)簇的時(shí)候,其平均硬盤訪問(wèn)次數(shù)達(dá)到2, 而在此之前,單級(jí)目錄的效率會(huì)更高一些。對(duì)于大小為16KB的簇,當(dāng)存儲(chǔ)名字不超過(guò)13個(gè)字符的文件時(shí),目錄文件為3簇大小的時(shí)候,其目錄下一共有1024×16×3/(32×2) =768個(gè)文件。二級(jí)索引結(jié)構(gòu)如圖8所示。
圖8 二級(jí)索引結(jié)構(gòu)
5 結(jié)論
本文給出了一個(gè)實(shí)時(shí)數(shù)據(jù)庫(kù)存儲(chǔ)文件的實(shí)現(xiàn)方案,該方案可以提高實(shí)時(shí)數(shù)據(jù)庫(kù)中歷史數(shù)據(jù)庫(kù)的存取速度,該方案已經(jīng)在和利時(shí)的實(shí)時(shí)數(shù)據(jù)庫(kù)HIRIS中得到應(yīng)用,取得了不錯(cuò)的效果。
其他作者:
劉 波(華北計(jì)算機(jī)系統(tǒng)工程研究所 北京 100101)
參考文獻(xiàn):
[1] Ben Kao、Hector Garcia-Molina:AN OVERVIEW OF REAL-TIME DATABASE SYSTEMS.
[2] 劉云生.現(xiàn)代數(shù)據(jù)庫(kù)技術(shù).國(guó)防工業(yè)出版社,2001.
[3] [美」Raghu Ramakrishnan著,周立柱,張志強(qiáng)等譯.數(shù)據(jù)庫(kù)管理系統(tǒng)原理與設(shè)計(jì).清華大學(xué)出版社,2004.
[4] 馬國(guó)華.實(shí)時(shí)數(shù)據(jù)庫(kù)及其管理系統(tǒng),自動(dòng)化博覽,2002,(5).
[5] 周東球等.先進(jìn)控制軟件系統(tǒng)實(shí)時(shí)數(shù)據(jù)庫(kù)的設(shè)計(jì),自動(dòng)化博覽,2002,(7).