專利名稱:流程數(shù)據(jù)的內存存取方法
技術領域:
本發(fā)明涉及工業(yè)實時數(shù)據(jù)庫,尤其是涉及實時數(shù)據(jù)庫的流程數(shù)據(jù)的內存存取方法。
背景技術:
實時數(shù)據(jù)庫(Real Time Data Base,RTDB)用于采集裝置的運行數(shù)據(jù),掌握裝置的運行狀況,并對生產(chǎn)過程的關鍵數(shù)據(jù)進行監(jiān)控和分析,對出現(xiàn)的問題進行及時處理,對歷史數(shù)據(jù)進行科學分析,使生產(chǎn)運行狀態(tài)平穩(wěn),物料供應平衡,減少單耗,提高經(jīng)濟效益,降低成本。目前少數(shù)美國公司壟斷著工業(yè)實時數(shù)據(jù)庫領域。他們的產(chǎn)品價格昂貴,通常只針 對大型巨型企業(yè),中等規(guī)模企業(yè)所需要的實時數(shù)據(jù)庫產(chǎn)品報價可能要上百萬人民幣,高額的配置成本成為了過程控制自動化與信息化的一道門檻,制約了國內中小型企業(yè)的發(fā)展。圖I示出工業(yè)實時數(shù)據(jù)庫的數(shù)據(jù)處理流程。參照圖I所示,來自數(shù)據(jù)源10的數(shù)據(jù)首先在壓縮過濾器20進行過濾,然后送入緩存結構30,當存檔時機到來時,數(shù)據(jù)將存入到歷史數(shù)據(jù)庫40中,持久地保持。其中緩存結構30是使用計算機的內存實現(xiàn),而歷史數(shù)據(jù)庫40通常以計算機的硬盤實現(xiàn)。傳統(tǒng)的實時數(shù)據(jù)庫廠商都把主要精力放在如何提高數(shù)據(jù)壓縮率和減少存儲空間上,對于數(shù)據(jù)在內存中的組織都沒有注重。這種處理方式將更多任務留在持久化時再做,為了有效的利用硬盤性能,在寫入數(shù)據(jù)時需要一定的優(yōu)化。同時由于內存緩沖區(qū)結構簡單,造成對內存中歷史數(shù)據(jù)的檢索存在一定困難,效率不高。例如美國OSI Software公司PI (Plant Information System)系統(tǒng)是把壓縮過的重要數(shù)據(jù)放入高速緩存(cache)中,該高速緩存在內存中以內存Buffer實現(xiàn),并沒有對數(shù)據(jù)進行歸類處理。這么做看似簡化了操作,提高了吞吐量,但是在寫入硬盤過程中,需要大量的CPU干預。持久化過程如果不進行優(yōu)化會造成頻繁的硬盤請求,而優(yōu)化過程實際上又降低了系統(tǒng)的吞吐能力。在美國艾斯本(Aspen Tech)公司的Info Plus系統(tǒng)中,歷史數(shù)據(jù)以記錄結構存儲在內存中,每個記錄結構屬于特定的類或族。這種做法相比PI系統(tǒng)的高速緩存(cache)存儲方式,盡管需要更多的CPU處理時間,而且會降低系統(tǒng)吞吐量,但其客戶化的數(shù)據(jù)結構將滿足進一步應用的請求,而且更容易嵌入數(shù)據(jù)處理進程(如時間標簽,超限報警等)。然而,這種設計的存儲模型仍然不是結構化的,這就造成數(shù)據(jù)持久化時依舊需要干預,進一步降低性能。
發(fā)明內容
本發(fā)明提供一種基于倒排表的流程數(shù)據(jù)的內存存取方法,以解決現(xiàn)有內存存儲結構存在的問題。本發(fā)明為解決上述技術問題而采用的技術方案是提出一種流程數(shù)據(jù)的內存存取方法,包括以下步驟
進行一初始化步驟,該初始化步驟在內存中建立映射表、倒排表頭結構以及數(shù)據(jù)存儲區(qū)域,該映射表記載每一數(shù)據(jù)源與一唯一 ID的映射關系,該倒排表頭結構記載每一數(shù)據(jù)源的ID、屬性信息、以及數(shù)據(jù)隊列指針,該數(shù)據(jù)存儲區(qū)域以數(shù)據(jù)隊列儲存每一數(shù)據(jù)源的一個或多個數(shù)據(jù)項;接收一數(shù)據(jù)項;尋找產(chǎn)生該數(shù)據(jù)項的數(shù)據(jù)源所對應的ID ;如果該數(shù)據(jù)源沒有對應的ID,則將該數(shù)據(jù)源映射到一新ID,并且為該數(shù)據(jù)源建立倒排表頭結構體;如果數(shù)據(jù)源有對應的ID,則使用對應的ID找到倒排表頭結構體;應用倒排表頭結構體中記錄的信息進行過濾和壓縮,以決定是否存儲數(shù)據(jù)項,如 果存儲數(shù)據(jù)項,則將數(shù)據(jù)項存入該數(shù)據(jù)存儲區(qū)域中,如果不存儲數(shù)據(jù)項,則丟棄數(shù)據(jù)項。在本發(fā)明的一實施例中,該倒排表頭結構包括多個頭結構體,每一頭結構體對應
一數(shù)據(jù)源。在本發(fā)明的一實施例中,每一該數(shù)據(jù)源的數(shù)據(jù)項占用的內存大小恒定。在本發(fā)明的一實施例中,該數(shù)據(jù)隊列指針記錄該數(shù)據(jù)存儲區(qū)域的起始指針和當前可用指針。在本發(fā)明的一實施例中,上述方法還包括在倒排表頭結構中維持快照存儲,其記載每個數(shù)據(jù)源的最新數(shù)據(jù)項。在本發(fā)明的一實施例中,上述方法還包括在倒排表頭結構中維持壓縮相關數(shù)據(jù),其記載上述壓縮流程中的臨時數(shù)據(jù)項。在本發(fā)明的一實施例中,上述方法還包括在持久化時,直接將該數(shù)據(jù)存儲區(qū)域中的數(shù)據(jù)項隊列寫入硬盤。本發(fā)明由于采用以上技術方案,使之與現(xiàn)有技術相比,可在系統(tǒng)啟動時對內存進行結構化,從而有利于系統(tǒng)運行中對內存數(shù)據(jù)的檢索,并使得持久化時只需將內存數(shù)據(jù)直接寫入硬盤而無需經(jīng)過歸類和優(yōu)化,因此,本發(fā)明可以達到更高的吞吐量。
為讓本發(fā)明的上述目的、特征和優(yōu)點能更明顯易懂,以下結合附圖對本發(fā)明的具體實施方式
作詳細說明,其中圖I示出工業(yè)實時數(shù)據(jù)庫的數(shù)據(jù)處理流程。圖2示出本發(fā)明一實施例的內存存取方法流程圖。圖3示出根據(jù)本發(fā)明一實施例的內存存儲結構的映射表。圖4示出根據(jù)本發(fā)明一實施例的內存存儲結構的倒排表頭結構。圖5示出根據(jù)本發(fā)明一實施例的內存存儲結構的數(shù)據(jù)存儲區(qū)。
具體實施例方式概要地說,本發(fā)明采用一種基于倒排表的數(shù)據(jù)內存存儲技術。歷史數(shù)據(jù)在內存中就已經(jīng)被整理成持久化時應有的結構,既方便對單個數(shù)據(jù)源狀態(tài)的追蹤,又支持海量數(shù)據(jù)的存儲。內存倒排表的構建雖然一定程度上影響系統(tǒng)吞吐能力,但內存中結構化的數(shù)據(jù)使硬盤持久化過程變得簡單容易,不需要CPU過多干預,而DMA控制器的介入使連續(xù)內存的硬盤寫入操作效率更高。數(shù)據(jù)的內存存儲結構主要由數(shù)據(jù)源與ID的映射表、倒排表頭結構向量與數(shù)據(jù)存儲區(qū)三部分組成。其中后兩部分組成一個倒排表,第一部分用來對倒排表內容進行高速訪問。圖3示出根據(jù)本發(fā)明一實施例的內存存儲結構的映射表。參照圖3所示,該映射表300是進行數(shù)據(jù)源與ID的映射。在表中,數(shù)據(jù)源以Tag Name表示,每一 Tag Name對應一 ID,并被保存在Hash桶中。Hash桶可包含一項或多項數(shù)據(jù)源。該映射表在新數(shù)據(jù)源加入和修改刪除時更新,進入的Tag Name被映射器302賦予一個對應的ID。數(shù)據(jù)項以(id,*值,時間戮)為基本要素,可以通過id找到Tag Name0另外,映射表會在發(fā)生更改時及時進行硬盤持久化。
映射表是系統(tǒng)運行的前提。系統(tǒng)啟動,錯誤恢復時必須要首先建立數(shù)據(jù)源與ID的映射表,同時任何對該表進行的更改操作必須是互斥的且在操作完成后立即進行持久化。為了以ID快速訪問數(shù)據(jù)源,方便歷史數(shù)據(jù)的硬盤存儲,設計以ID為數(shù)組下標,指針為數(shù)組項的快查指針數(shù)組301。系統(tǒng)添加新數(shù)據(jù)源時,使用映射器為數(shù)據(jù)源分配一個系統(tǒng)ID。在實時數(shù)據(jù)庫內,該ID就是這個數(shù)據(jù)源的唯一標示,數(shù)據(jù)源本身的名字被保存在映射表中,在實時數(shù)據(jù)庫系統(tǒng)中這個名字將暫時不被使用。為了后續(xù)操作效率考慮,系統(tǒng)ID為順序正整數(shù)。圖4示出根據(jù)本發(fā)明一實施例的內存存儲結構的倒排表頭結構。參照圖4所示,該倒排表頭結構400包括多個頭結構體401,每一頭結構體401是為一個數(shù)據(jù)源設立。倒排表頭結構是存儲數(shù)據(jù)源重要信息的點數(shù)據(jù)庫,也是數(shù)據(jù)項處理(壓縮過濾等)所需輔助信息的存儲載體,向量下標為系統(tǒng)ID。如圖4右側所示,每個頭結構體401可選擇性地包括ID,點數(shù)據(jù)庫屬性集,快照存儲,壓縮相關數(shù)據(jù),數(shù)據(jù)隊列指針,統(tǒng)計采集信息等。ID可用于頭結構體的索引。點數(shù)據(jù)庫屬性集記載這部分數(shù)據(jù)的屬性??煺沾鎯τ涊d每個數(shù)據(jù)源的最新數(shù)據(jù)項。壓縮相關數(shù)據(jù)記載進入內存存儲結構之前所進行的壓縮流程中的一些臨時數(shù)據(jù)項,例如上一觀測值,上一存儲值,最大斜率Kmax、最小斜率Kmin、最大斜率數(shù)據(jù)UKmax和一最小斜率數(shù)據(jù)UKmin,當使用斜率比較法來壓縮數(shù)據(jù)時,這些信息可令壓縮過濾器快速訪問,從而提高壓縮的速率。數(shù)據(jù)隊列指針是指向數(shù)據(jù)存儲區(qū)域的數(shù)據(jù)隊列(將在下文參照圖5描述)的指針。統(tǒng)計采集信息記載對位于頭結構體之后的數(shù)據(jù)隊列的采集信息,這將在后面進一步描述。每個頭結構體401中,特定數(shù)據(jù)記錄在特定的位置,訪問時只需結構始指針加上數(shù)據(jù)偏移就可以取出特定項。同時該結構保存著歷史數(shù)據(jù)內存存儲區(qū)的入口地址,為特定數(shù)據(jù)源添加重要歷史數(shù)據(jù)(需存入歷史數(shù)據(jù)庫的數(shù)據(jù))操作也需要訪問該數(shù)據(jù)頭。圖5示出根據(jù)本發(fā)明一實施例的內存存儲結構的數(shù)據(jù)存儲區(qū)。參照圖5所示,數(shù)據(jù)存儲區(qū)500是由數(shù)據(jù)隊列構成。數(shù)據(jù)隊列是系統(tǒng)為某數(shù)據(jù)源分配的一塊物理地址連續(xù)的內存,數(shù)據(jù)項以基本結構{ID,值,時間戳}寫入內存中。對于特定數(shù)據(jù)源,確保該源的每個數(shù)據(jù)項占用內存大小恒定以方便檢索。同時在圖4所示頭結構體中記錄數(shù)據(jù)區(qū)的起始指針和當前可用指針(數(shù)據(jù)隊列指針統(tǒng)計采集信息),以方便向數(shù)據(jù)區(qū)中添加新的數(shù)據(jù)項。數(shù)據(jù)隊列滿會觸發(fā)系統(tǒng)為數(shù)據(jù)源分配新的內存空間。內存中數(shù)據(jù)的歸檔由特定事件觸發(fā),如內存使用率到達閾值,到達內存數(shù)據(jù)歸檔時間點等。歸檔時,無需額外的處理,只需要將整個數(shù)據(jù)存儲區(qū)域放入硬盤中進行持久化。圖2示出本發(fā)明一實施例的內存存取方法流程圖。參照圖2所示,在系統(tǒng)啟動時進行初始化步驟Si。該步驟在系統(tǒng)啟動時完成絕大部分數(shù)據(jù)點的配置,由此建立如圖3所示的映射表,以及如圖4和圖5所示的倒排表頭結構和數(shù)據(jù)存儲區(qū)域,該數(shù)據(jù)存儲區(qū)域可動態(tài)為后續(xù)數(shù)據(jù)點保留內存空間。這就在實時數(shù)據(jù)到來之前建立好向量結構并為每個項分配好內存。實時數(shù)據(jù)庫處理輸入數(shù)據(jù)時,只需將經(jīng)過處理后需要持久化的數(shù)據(jù)項存儲在為相應數(shù)據(jù)點配置的內存空間中。一般地,所進行的處理包括過濾,壓縮,平滑等,這些操作需要用到的數(shù)據(jù)記錄與信息也將存儲在內存結構中。步驟S2開始,接收數(shù)據(jù)項,并如步驟S3在映射器(參見圖3)中尋找產(chǎn)生該數(shù)據(jù)項的數(shù)據(jù)源的映射ID,如果未找到,則該數(shù)據(jù)項來自新數(shù)據(jù)源,將新數(shù)據(jù)源的Tag Name映 射至一 ID,并保存到映射表中。接著在步驟S9為數(shù)據(jù)項的數(shù)據(jù)源建立頭結構體,然后于步驟S7,將數(shù)據(jù)項存儲至該新建頭結構索引的數(shù)據(jù)存儲區(qū)中。另外,如果在步驟S3找到映射ID,則進入步驟S5,進一步通過ID找到頭結構體。然后在步驟S6,通過頭結構體中存儲的相關信息,作過濾,壓縮操作,以決定是否存儲該數(shù)據(jù)項,如果是,則在步驟S7將相應數(shù)據(jù)項存入數(shù)據(jù)存儲區(qū)中,否則在步驟S8中丟棄這些數(shù)據(jù)項。當數(shù)據(jù)存儲區(qū)達到一定條件時(到達持久化時間點或內存消耗規(guī)模到達閾值時),進行批量化持久化。在存入歷史數(shù)據(jù)庫時,只需將這些由頭結構和數(shù)據(jù)隊列組織起來的內存塊寫入硬盤即可。這就將過去需要在寫硬盤前進行的數(shù)據(jù)歸類和寫硬盤優(yōu)化的大部分工作,放在系統(tǒng)初始化時做,而初始化時,系統(tǒng)并沒有實時性要求,從而達到提高系統(tǒng)吞吐量的目的。由于同時為不同數(shù)據(jù)源分配不同的內存存儲區(qū)域,因此數(shù)據(jù)的內存存儲操作可以進行多線程并發(fā)操作,而不需要同步鎖的介入。此外,內存數(shù)據(jù)存儲結構采用了倒排表結構,每個數(shù)據(jù)源在初始化時都擁有唯一ID且該ID唯一決定了一個倒排表頭結構。這樣的底層數(shù)據(jù)存儲結構,為系統(tǒng)的分布式化提供了有效的保障。分布式運行時,只有數(shù)據(jù)源ID發(fā)生變化時,各服務器才需要進行同步,其他時刻系統(tǒng)均不需要同步,各服務器均可獨立運行。而數(shù)據(jù)源變化在穩(wěn)定運行的實時數(shù)據(jù)庫系統(tǒng)中屬于小概率事件。這樣的構架特性為系統(tǒng)拓展提供了良好的結構基礎。同時,基于倒排表的存儲,可以進行有效的分布式化?,F(xiàn)存實時數(shù)據(jù)庫系統(tǒng)受硬件計算力約束,吞吐能力有極限(PI系統(tǒng)為業(yè)內翹楚,他的處理能力在高端服務器上為IOOw數(shù)據(jù)每秒)。如果有需要,本系統(tǒng)可以搭建廉價集群(可基于Hadoop等開源分布式處理平臺),理論上無限擴大處理能力。雖然本發(fā)明已以較佳實施例揭示如上,然其并非用以限定本發(fā)明,任何本領域技術人員,在不脫離本發(fā)明的精神和范圍內,當可作些許的修改和完善,因此本發(fā)明的保護范圍當以權利要求書所界定的為準。
權利要求
1.一種流程數(shù)據(jù)的內存存取方法,包括以下步驟 進行一初始化步驟,該初始化步驟在內存中建立映射表、倒排表頭結構以及數(shù)據(jù)存儲區(qū)域,該映射表記載每一數(shù)據(jù)源與一唯一 ID的映射關系,該倒排表頭結構記載每一數(shù)據(jù)源的ID、屬性信息、以及數(shù)據(jù)隊列指針,該數(shù)據(jù)存儲區(qū)域以數(shù)據(jù)隊列儲存每一數(shù)據(jù)源的一個或多個數(shù)據(jù)項; 接收一數(shù)據(jù)項; 尋找產(chǎn)生該數(shù)據(jù)項的數(shù)據(jù)源所對應的ID ; 如果該數(shù)據(jù)源沒有對應的ID,則將該數(shù)據(jù)源映射到一新ID,并且為該數(shù)據(jù)源建立倒排表頭結構體; 如果數(shù)據(jù)源有對應的ID,則使用對應的ID找到倒排表頭結構體; 應用倒排表頭結構體中記錄的信息進行過濾和壓縮,以決定是否存儲數(shù)據(jù)項,如果存儲數(shù)據(jù)項,則將數(shù)據(jù)項存入該數(shù)據(jù)存儲區(qū)域中,如果不存儲數(shù)據(jù)項,則丟棄數(shù)據(jù)項。
2.如權利要求I所述的方法,其特征在于,該倒排表頭結構包括多個頭結構體,每一頭結構體對應一數(shù)據(jù)源。
3.如權利要求I所述的方法,其特征在于,每一該數(shù)據(jù)源的數(shù)據(jù)項占用的內存大小恒定。
4.如權利要求I所述的方法,其特征在于,該數(shù)據(jù)隊列指針記錄該數(shù)據(jù)存儲區(qū)域的起始指針和當前可用指針。
5.如權利要求I所述的方法,其特征在于,還包括在倒排表頭結構中維持快照存儲,其記載每個數(shù)據(jù)源的最新數(shù)據(jù)項。
6.如權利要求I所述的方法,其特征在于,還包括在倒排表頭結構中維持壓縮相關數(shù)據(jù),其記載壓縮流程中的臨時數(shù)據(jù)項。
7.如權利要求I所述的方法,其特征在于,還包括在持久化時,直接將該數(shù)據(jù)存儲區(qū)域中的數(shù)據(jù)項隊列寫入硬盤。
全文摘要
本發(fā)明涉及一種流程數(shù)據(jù)的內存存取方法,以提高實時數(shù)據(jù)庫的吞吐量。該方法的特點是利用結構化的倒排表組織數(shù)據(jù),其包括進行一初始化步驟,在內存中建立映射表、倒排表頭結構以及數(shù)據(jù)存儲區(qū)域,映射表記載每一數(shù)據(jù)源與一唯一ID的映射關系,該倒排表頭結構記載每一數(shù)據(jù)源的ID、屬性信息、以及數(shù)據(jù)隊列指針,該數(shù)據(jù)存儲區(qū)域以數(shù)據(jù)隊列儲存每一數(shù)據(jù)源的一個或多個數(shù)據(jù)項;接收數(shù)據(jù)項時,使用數(shù)據(jù)項的數(shù)據(jù)源對應的ID找到倒排表頭結構體;然后應用倒排表頭結構體中記錄的信息進行過濾和壓縮,以決定是否存儲數(shù)據(jù)項,如果存儲數(shù)據(jù)項,則將數(shù)據(jù)項存入該數(shù)據(jù)源對應的存儲區(qū)域中,如果不存儲數(shù)據(jù)項,則丟棄數(shù)據(jù)項。
文檔編號G06F12/08GK102779097SQ201110124780
公開日2012年11月14日 申請日期2011年5月13日 優(yōu)先權日2011年5月13日
發(fā)明者楊威 申請人:上海振華重工(集團)股份有限公司