專利名稱:一種實時數(shù)據(jù)庫的結(jié)構(gòu)類型數(shù)據(jù)的存儲方法
技術領域:
本發(fā)明屬于數(shù)據(jù)存儲技術領域,涉及實時監(jiān)控環(huán)境產(chǎn)生的數(shù)據(jù)的存儲,特別是對 由結(jié)構(gòu)組成的大批量實時數(shù)據(jù)的存儲處理,為一種實時數(shù)據(jù)庫的結(jié)構(gòu)類型數(shù)據(jù)的存儲方 法。
背景技術:
對于一些實時監(jiān)控環(huán)境產(chǎn)生的數(shù)據(jù),除具有數(shù)量巨大,采集頻度高,持續(xù)時間長等 特點外,還需要對結(jié)構(gòu)類型的數(shù)據(jù)進行存儲。對這些大批量采樣點的結(jié)構(gòu)類型數(shù)據(jù)的處理, 特別是如何對采樣點的結(jié)構(gòu)類型實時數(shù)據(jù)進行即時存儲,并且如何對這些存儲的結(jié)構(gòu)類型 歷史數(shù)據(jù)進行快速高效的訪問和分析,就成為實現(xiàn)實時數(shù)據(jù)庫的結(jié)構(gòu)類型數(shù)據(jù)存儲技術的 重點和難點。實時數(shù)據(jù)庫是通過設置標簽的方式來對一個測點的數(shù)據(jù)進行存儲,一般測點與標 簽是一一對應的關系。每個標簽在實時數(shù)據(jù)庫中由一個唯一的標識ID來表示。每個測點 的存儲字段通常由標簽ID、時間戳、質(zhì)量碼和值組成。實時數(shù)據(jù)庫為了提供存取數(shù)據(jù)的高效 率和壓縮數(shù)據(jù)的高效率,對測點的值一般僅提供對簡單類型數(shù)據(jù)的存儲,比如單精度浮點 數(shù)類型,雙精度浮點數(shù)類型,二進制數(shù)據(jù)塊類型等。其中浮點類型的數(shù)據(jù)在計算機中的具體存儲方式現(xiàn)在通常采用IEEE754標準。該 標準規(guī)定基數(shù)為2,階碼E用移碼表示,尾數(shù)M用原碼表示,根據(jù)原碼的規(guī)格化方法,最高數(shù) 字位總是1,該標準將這個1缺省存儲。對于單精度浮點型符號位lbit,階碼8bit,尾數(shù) 23bit,共32bit占4個字節(jié);對于雙精度浮點型符號位lbit,階碼libit,尾數(shù)52bit,共 64bit占8個字節(jié)。對于結(jié)構(gòu)類型數(shù)據(jù)來說,其數(shù)據(jù)體本身是由多種簡單類型數(shù)據(jù)按照一定規(guī)則構(gòu)造 而成,實時數(shù)據(jù)庫無法直接使用簡單數(shù)據(jù)類型對結(jié)構(gòu)類型數(shù)據(jù)進行存儲?,F(xiàn)在實時數(shù)據(jù)庫 對于結(jié)構(gòu)化類型數(shù)據(jù)的存儲,一般的處理方法是把結(jié)構(gòu)類型數(shù)據(jù)轉(zhuǎn)換為二進制數(shù)據(jù)塊,然 后再存儲到數(shù)據(jù)庫中,這種方法有兩個比較大的缺點一是由二進制數(shù)據(jù)塊構(gòu)成的記錄,單 條記錄的長度可能會比較大,從而導致實時數(shù)據(jù)庫存取效率降低;二是現(xiàn)有的實時數(shù)據(jù)庫 的數(shù)據(jù)壓縮方法對二進制數(shù)據(jù)塊的壓縮效率通常比較低,或者根本不提供對二進制數(shù)據(jù)塊 的壓縮方法,使得實時數(shù)據(jù)庫的壓縮效率降低??傮w來說,實時數(shù)據(jù)庫本身提供的存儲和壓 縮方式對于存儲結(jié)構(gòu)化數(shù)據(jù)來說,在存儲和查詢效率、磁盤存儲空間占用方面都存在較大 的問題。
發(fā)明內(nèi)容
本發(fā)明要解決的問題是對于實時監(jiān)控環(huán)境產(chǎn)生的結(jié)構(gòu)類型數(shù)據(jù),需要進行即時 存儲并且對存儲的歷史數(shù)據(jù)進行快速高效的訪問和分析,要在有限的物理存儲空間中存儲 大量的歷史數(shù)據(jù),同時還需要考慮數(shù)據(jù)能夠被快速的存儲和訪問,現(xiàn)有的實時數(shù)據(jù)存儲方 法不能滿足這些要求,易受數(shù)據(jù)長度和壓縮效率影響,使得整體存儲效率不夠理想。
本發(fā)明的技術方案為實時數(shù)據(jù)庫中結(jié)構(gòu)類型數(shù)據(jù)的存儲方法,采集的結(jié)構(gòu)類型 數(shù)據(jù)構(gòu)成結(jié)構(gòu)類型數(shù)據(jù)緩沖隊列,從結(jié)構(gòu)類型數(shù)據(jù)緩沖隊列獲取數(shù)據(jù),進行以下步驟1)按字段分解把獲取的結(jié)構(gòu)類型數(shù)據(jù)的所有字段分解為實時數(shù)據(jù)庫的標簽,使 每個字段都對應實時數(shù)據(jù)庫中的唯一一個標簽ID ;2)按字段存儲對結(jié)構(gòu)類型數(shù)據(jù)各字段對應的標簽ID,輸入與該字段對應的歷史 數(shù)據(jù)進行存儲,包括以下步驟21)值分解把各字段的浮點值基于浮點數(shù)構(gòu)成標準IEEE754按域分解為符號段 sign、階碼段exps和尾數(shù)段tail,具體為對單精度浮點類型的浮點值,共4字節(jié)32bit,將 高Ibit存儲到符號段sign的低Ibit中,高2-9bit存儲到階碼段exps中,低23bit存儲 到尾數(shù)段tail的低23bit中,不足位的部分都以0填充,其中符號段sign和階碼段exps 為1字節(jié),尾數(shù)段tail為4字節(jié);對雙精度浮點類型的浮點值,共8字節(jié)64bit,將高Ibit 存儲到符號段sign的低Ibit中,高2-12bit存儲到階碼段exps中,低52bit存儲到尾數(shù) 段tail的低52bit中,不足位的部分都以0填充,其中符號段sign為1字節(jié),階碼段exps 為2字節(jié),尾數(shù)段tail為8字節(jié);22)階碼替換對單精度浮點類型的浮點值,把尾數(shù)段tail的高9bit用整數(shù)127 替換;對雙精度浮點類型的浮點值,把尾數(shù)段tail中的高12bit用整數(shù)1023替換;進行階 碼替換后的尾數(shù)段tail作為該字段的值;23)尾數(shù)段tail按值大小排序?qū)㈦A碼替換后獲得的尾數(shù)段tail的值進行排序 處理,按照值的大小從小到大進行排序,排序后每個值對應一個位序;24)值域線性擬合對于排好順序的值,以其位序為橫坐標,值為縱坐標建立值 域,按照排序順序?qū)ζ湟佬蜻M行線性擬合處理,線性擬合處理最終獲得兩個點,這兩個點連 接的直線為擬合直線,通過擬合直線來擬合排序在這兩個點之間的所有點,從而達到數(shù)據(jù) 壓縮的目的;線性擬合處理中,各個點到已獲得的擬合直線的距離偏差均在設定的壓縮精 度范圍內(nèi),如所處理的點到擬合直線的距離偏差在設定的壓縮精度范圍外,則以這一點為 起點開始新的線性擬合處理;25)按域組合根據(jù)線性擬合得到的數(shù)據(jù),對字段進行域分隔,產(chǎn)生標識域、時間 域和數(shù)據(jù)值域三部分,標識域存儲字段的標簽ID,時間域為數(shù)據(jù)進行存儲時的時間戳,數(shù)據(jù) 值域包括符號段sign、階碼段exps和線性擬合處理后的尾數(shù)段tai 1數(shù)據(jù),把三個域的內(nèi)容 順序組合在一起構(gòu)成數(shù)據(jù)塊;26)哈弗曼壓縮存儲把按域組合得到的數(shù)據(jù)塊進行哈弗曼編碼壓縮,并存儲壓 縮后的數(shù)據(jù);3)字段處理完成判斷檢查結(jié)構(gòu)類型數(shù)據(jù)的每個字段對應的標簽ID是否都已處 理,如果完成則執(zhí)行步驟4),沒有完成則回到步驟2);4)數(shù)據(jù)處理完成判斷檢查獲取的歷史數(shù)據(jù)是否都已完成存儲過程,如果完成則 獲取新的歷史數(shù)據(jù),開始下一輪存儲處理,沒有完成則回到步驟1)。進一步的,從結(jié)構(gòu)類型數(shù)據(jù)緩沖隊列獲取歷史數(shù)據(jù)時,先進行緩沖數(shù)據(jù)量判斷,設 定一次處理數(shù)據(jù)量的限值,對從歷史數(shù)據(jù)緩沖隊列獲取的歷史數(shù)據(jù)量與所述限值進行比 較,超過限值,則對獲取的歷史數(shù)據(jù)按字段分解,否則繼續(xù)從歷史數(shù)據(jù)緩沖隊列獲取歷史數(shù) 據(jù)。
本發(fā)明值域線性擬合具體為241)設置起點和待壓點并保存起點對于排好順序的歷史數(shù)據(jù)的值,按照排序順 序依序進行處理,按位序取出待處理的第一個點作為擬合起點(Xl,yi),下一點作為待壓點 (xn,yn),如果本步驟是第一次執(zhí)行則存儲起點(Xpy1);242)求出待壓點的門限點和門限點斜率范圍設置壓縮精度d%,求出待壓點 (xn,yn)的兩個門限點(xn,yn±|ynd% I),所述門限點是指點值按照壓縮精度確定的可近似 范圍邊界,可近似范圍為[yn_|ynd% ,yn+|ynd% | ],然后分別求出從擬合起點O^y1)到 兩個門限點所確定直線的斜率范圍的最小值knmin和最大值knmax [―M 二 [仏等D”i>+I 洲)”■]
Xn 一 XiXn Xl通過[knmin,knmax]確定本次擬合過程的斜率判斷范圍[kmin,kmax][kmin, kmax] = [knmin, knmax]243)數(shù)據(jù)量判斷按位序檢查待壓點是否還存在下一點,如果沒有下一點,則轉(zhuǎn) 到步驟247)保存待壓點;如果存在下一點,則轉(zhuǎn)到步驟244);244)獲得判斷點并求出起點到判斷點的斜率按位序取出待壓點的下一點作為 判斷點(Xn+1,yn+1),求出從擬合起點到判斷點所確定直線的斜率kn+1
「 ^ k —Uk +\ ~ ~
" n+l 一 -*·1245)斜率范圍判斷檢查kn+1是否在[kmin,kmax]范圍內(nèi),在此范圍內(nèi)表示待壓點 可以被壓縮,轉(zhuǎn)到步驟246);不在此范圍內(nèi),表示待壓點不能被壓縮,需要開始新的壓縮過 程,轉(zhuǎn)到步驟247);246)丟棄當前待壓點并重新設置新待壓點丟棄待壓點(xn,yn),把判斷點(xn+1, yn+1)設置為新待壓點,求出新待壓點的兩個門限點(χη+1,yn+1±|yn+1d% I ),再分別求出從 起點到兩個門限點所確定直線的斜率范圍的最小值kn+1min和最大值kn+1maX min^ +1 max]=[(少“廣1 少“+一 !)一乃,0^+1D — ^更新斜率判斷范圍[kmin,kmax][kmin, kmax] = [max (kmin, kn+1min), min (kmax, kn+1max)]新待壓點設置好后,繼續(xù)步驟243);247)保存待壓點存儲當前的待壓點(xn,yn),本次壓縮過程結(jié)束,并把緩存中待 處理的第一個點設置為新一輪壓縮的擬合起點,轉(zhuǎn)到步驟241)進行下一擬合過程的處理。本發(fā)明提供了一種實時數(shù)據(jù)庫的結(jié)構(gòu)類型數(shù)據(jù)的存儲方法,它能夠?qū)Y(jié)構(gòu)類型的 數(shù)據(jù)進行存儲,并通過對字段值的階碼替換處理,使得存儲的值更加有利于實時數(shù)據(jù)的壓 縮,可以達到較大的提高壓縮效率和存儲效率的目的。本發(fā)明的有益效果在于本發(fā)明采用了通過實時數(shù)據(jù)庫的標簽來分解結(jié)構(gòu)類型的 數(shù)據(jù),從而可以對結(jié)構(gòu)類型的每個字段分離存儲,降低實時數(shù)據(jù)庫的單條數(shù)據(jù)的長度,減小 單條記錄對系統(tǒng)性能的影響;對浮點類型字段值,按照IEEE754標準分解為符號段sign、階 碼段exps和尾數(shù)段tail,然后使用固定整數(shù)127和1023分別替換單精度和雙精度尾數(shù)段 tail的階碼,使得替換階碼后的浮點數(shù)值的有效范圍縮小為1. 0到2. 0之間,然后再使用排序線性擬合方法可以獲得較高的有損壓縮比,最后對數(shù)據(jù)按域組合,使得數(shù)據(jù)的相似部 分接近,并進行哈弗曼無損編碼壓縮,這樣同時獲得較高的無損壓縮比。數(shù)據(jù)還原時針對單 精度或雙精度浮點類型只需要用原符號段sign和階碼段替換尾數(shù)段的高9bit或12bit即 可,還原精度與壓縮時要求的擬合精度是完全一致的。
圖1是本發(fā)明方法的流程圖。
圖2是本發(fā)明方法中的按字段存儲方法的流程圖。
圖3是本發(fā)明方法中的線性擬合壓縮方法的流程圖。
圖4是本發(fā)明方法中的線性擬合壓縮方法的步驟示意圖。
圖5是結(jié)構(gòu)字段A采樣點的示意圖。
圖6是結(jié)構(gòu)字段B采樣點的示意圖。
圖7是存儲比較示意圖。
圖8是結(jié)構(gòu)字段A還原的示意圖。
圖9是結(jié)構(gòu)字段B還原的示意圖。
具體實施例方式以下結(jié)合附圖對本發(fā)明做進一步說明。圖1和圖2是本發(fā)明一種實時數(shù)據(jù)庫的結(jié)構(gòu)類型數(shù)據(jù)的存儲方法的流程圖。包括 以下步驟1)按字段分解從結(jié)構(gòu)數(shù)據(jù)緩沖隊列獲取歷史數(shù)據(jù),把結(jié)構(gòu)數(shù)據(jù)的所有字段分解 為實時數(shù)據(jù)庫的標簽,每個字段都對應實時數(shù)據(jù)庫中的唯一一個標簽ID ;2)按字段存儲對該字段對應的標簽ID輸入緩存中的所有歷史數(shù)據(jù)進行歷史數(shù) 據(jù)存儲處理;3)字段處理完成判斷檢查結(jié)構(gòu)的每個字段對應的標簽ID是否都已處理,如果完 成則執(zhí)行步驟4),沒有完成則回到步驟2);4)數(shù)據(jù)處理完成判斷檢查獲取的歷史數(shù)據(jù)是否都已完成存儲過程,如果完成則 獲取新的歷史數(shù)據(jù),執(zhí)行步驟1)開始下一輪存儲處理,沒有完成則回到步驟2)。其中,步驟1)優(yōu)選進行預處理11)獲取當前歷史緩沖隊列中存儲的緩沖數(shù)據(jù)量;12)緩沖數(shù)據(jù)量判斷設定一次處理數(shù)據(jù)量的限值,對從歷史數(shù)據(jù)緩沖隊列獲取 的歷史數(shù)據(jù)量與所述限值進行比較,超過限值,則對獲取的歷史數(shù)據(jù)按字段分解,否則繼續(xù) 從歷史數(shù)據(jù)緩沖隊列獲取歷史數(shù)據(jù)。下面具體介紹本發(fā)明的按字段存儲方法步驟,如圖2所示21)值分解把各字段的浮點值基于浮點數(shù)構(gòu)成標準IEEE754按域分解為符號段 sign、階碼段exps和尾數(shù)段tail,具體為對單精度浮點類型的浮點值,共4字節(jié)32bit,將 高lbit存儲到符號段sign的低lbit中,高2-9bit存儲到階碼段exps中,低23bit存儲 到尾數(shù)段tail的低23bit中,不足位的部分都以0填充,其中符號段sign和階碼段exps 為1字節(jié),尾數(shù)段tail為4字節(jié);對雙精度浮點類型的浮點值,共8字節(jié)64bit,將高lbit存儲到符號段sign的低Ibit中,高2-12bit存儲到階碼段exps中,低52bit存儲到尾數(shù) 段tail的低52bit中,不足位的部分都以0填充,其中符號段sign為1字節(jié),階碼段exps 為2字節(jié),尾數(shù)段tail為8字節(jié);22)階碼替換對單精度浮點類型的浮點值,把尾數(shù)段tail的高9bit用整數(shù)127 替換;對雙精度浮點類型的浮點值,把尾數(shù)段tail中的高12bit用整數(shù)1023替換;進行階 碼替換后的尾數(shù)段tail作為該字段的值;23)尾數(shù)段tail按值大小排序?qū)㈦A碼替換后獲得的尾數(shù)段tail的值進行排序 處理,按照值的大小從小到大進行排序,排序后每個值對應一個位序;24)值域線性擬合對于排好順序的值,以其位序為橫坐標,值為縱坐標建立值 域,按照排序順序?qū)ζ湟佬蜻M行線性擬合處理,線性擬合處理最終獲得兩個點,這兩個點連 接的直線為擬合直線,通過擬合直線來擬合排序在這兩個點之間的所有點,從而達到數(shù)據(jù) 壓縮的目的;線性擬合處理中,各個點到已獲得的擬合直線的距離偏差均在設定的壓縮精 度范圍內(nèi),如所處理的點到擬合直線的距離偏差在設定的壓縮精度范圍外,則以這一點為 起點開始新的線性擬合處理;25)按域組合根據(jù)線性擬合得到的數(shù)據(jù),對字段進行域分隔,產(chǎn)生標識域、時間 域和數(shù)據(jù)值域三部分,標識域存儲字段的標簽ID,時間域為數(shù)據(jù)進行存儲時的時間戳,數(shù)據(jù) 值域包括符號段sign、階碼段exps和線性擬合處理后的尾數(shù)段tai 1數(shù)據(jù),把三個域的內(nèi)容 順序組合在一起構(gòu)成數(shù)據(jù)塊;26)哈弗曼壓縮存儲把按域組合得到的數(shù)據(jù)塊進行哈弗曼編碼壓縮,并存儲壓 縮后的數(shù)據(jù);下面具體介紹本發(fā)明的值域線性擬合步驟,如圖3所示值域線性擬合具體為241)設置起點和待壓點并保存起點對于排好順序的值,按照排序順序依序進行 處理,按位序取出待處理的第一個點作為擬合起點(Xl,yi),下一點作為待壓點(Xn,yn),如 果本步驟是第一次執(zhí)行則存儲起點(Xl,yi);242)求出待壓點的門限點和門限點斜率范圍設置壓縮精度d%,求出待壓點 (xn, yn)的兩個門限點(Xn,yn±|ynd% I ),所述門限點是指點值按照壓縮精度確定的可近 似范圍邊界,可近似范圍為[yn_|ynd% , yn+|ynd% | ],然后分別求出從擬合起點0q,Y1) 到兩個門限點所確定直線的斜率范圍的最小值knmin和最大值knmax max] =
Xn X1Xn Χχ通過[knmin,knmax]確定本次擬合過程的斜率判斷范圍[kmin,kmax][kmin, kmax] = [knmin, knmax]243)數(shù)據(jù)量判斷按位序檢查待壓點是否還存在下一點,如果沒有下一點,則轉(zhuǎn) 到步驟247)保存待壓點;如果存在下一點,則轉(zhuǎn)到步驟244);244)獲得判斷點并求出起點到判斷點的斜率按位序取出待壓點的下一點作為 判斷點(xn+1,yn+1),求出從擬合起點到判斷點所確定直線的斜率kn+1 Λ +ι --
8
245)斜率范圍判斷檢查kn+1是否在[kmin,kmax]范圍內(nèi),在此范圍內(nèi)表示待壓點 可以被壓縮,轉(zhuǎn)到步驟246);不在此范圍內(nèi),表示待壓點不能被壓縮,需要開始新的壓縮過 程,轉(zhuǎn)到步驟247);246)丟棄當前待壓點并重新設置新待壓點丟棄待壓點(xn,yn),把判斷點(xn+1, yn+1)設置為新待壓點,求出新待壓點的兩個門限點(χη+1,yn+1±|yn+1d% I ),再分別求出從 起點到兩個門限點所確定直線的斜率范圍的最小值kn+1min和最大值kn+1maX 更新斜率判斷范圍[kmin,kmax] 新待壓點設置好后,繼續(xù)步驟243);247)保存待壓點存儲當前的待壓點(xn,yn),本次壓縮過程結(jié)束,并把緩存中待 處理的第一個點設置為新一輪壓縮的擬合起點,轉(zhuǎn)到步驟241)進行下一擬合過程的處理。圖4為值域線性擬合算法的實例模擬示意圖。首先設置起點和待壓點并保存起 點。按位序取出待處理的第一個點S設置為起點,下一點A1設置為待壓點,把起點S保存 到結(jié)果隊列中。然后,求出待壓點的門限點和門限點斜率范圍。兩個門限點Ah和Ai按照設 置的壓縮精度通過下式確定 由起點到兩個門限點確定的直線的斜率通過下式得到=
Xn ~X\丸_=(少丨洲Η
Xn X1通過下式得到斜率判斷范圍[kmin,kmax][kmin, kmax] = [knmin, knmax]然后,進行數(shù)據(jù)量判斷。檢查是否還存在下一點,如果沒有下一點,表示處理過程 結(jié)束,保存當前的待壓點到結(jié)果隊列中;如果存在下一點,則執(zhí)行獲得判斷點并求出起點到 判斷點的斜率。取出緩沖中當前待處理的點C作為判斷點,用于檢查待壓點A1是否可以被
壓縮,通過下式求出起點S到判斷點C的斜率 Γ kκη+ι ~ 二
""n+l _ xI然后,斜率范圍判斷。檢查kn+1是否在[kmin,kmax]范圍內(nèi),不在此范圍內(nèi),表示待壓 點A1不能被壓縮,需要開始新的壓縮過程,本次壓縮過程結(jié)束,則執(zhí)行保存待壓點A1 ;如果 在此范圍內(nèi),表示待壓點A1可以被壓縮,執(zhí)行丟棄當前待壓點并把判斷點設置為待壓點。丟棄待壓點A,把判斷點C設置為新的待壓點A’,通過下式求出待壓點的兩個門限占.Ah= (xn+1,yn+1+|yn+1d% |)Al= (xn+1,yn+1-|yn+1d% |)
小值、 通過下式更新斜率判斷范圍[kmin,kmax][kmin, kmax] = [max (kmin, kn+1min), min (kmax, kn+1max)]繼續(xù)執(zhí)行數(shù)據(jù)量判斷,進行后續(xù)點的處理,直到線性擬合步驟全部結(jié)束。線性擬合步驟結(jié)束,進行按域組合。將線性擬合的各種數(shù)據(jù)分為標識域、時間域、 數(shù)據(jù)值域三個部分存儲,標識域存儲壓縮標識,也就是標簽ID,壓縮標識同時按位序來標識 值域中在該位序的數(shù)據(jù)是否被壓縮,時間域存儲每一個存儲的數(shù)據(jù)本身所對應的時間;數(shù) 據(jù)值域存儲線性擬合中與擬合處理相關的數(shù)據(jù),由符號段sign、階碼段exps和線性擬合處 理后的尾數(shù)段tail數(shù)據(jù)三個部分組成。把三個域的內(nèi)容順序組合在一起構(gòu)成數(shù)據(jù)塊。哈弗曼壓縮存儲把按域組合得到的數(shù)據(jù)塊進行哈弗曼編碼壓縮,并存儲壓縮后 的數(shù)據(jù)。進行字段處理完成判斷,檢查結(jié)構(gòu)的每個字段對應的標簽ID是否都已處理,如果 完成則執(zhí)行步驟4),沒有完成則回到步驟2)。進行數(shù)據(jù)處理完成判斷,檢查歷史緩沖隊列中的數(shù)據(jù)是否已經(jīng)全部處理完成,如 果完成則獲取新的歷史數(shù)據(jù),執(zhí)行步驟11)開始下一輪壓縮,沒有完成則回到步驟1)。本發(fā)明方法存儲的數(shù)據(jù),對結(jié)構(gòu)數(shù)據(jù)進行還原,按照各個字段對應的標簽ID和值 域線性擬合的數(shù)據(jù),讀取出存儲的各字段值,根據(jù)值域線性擬合后得到的擬合點值、值域坐 標及位序,讀出被壓縮的各字段的擬合字段值,然后對擬合字段值進行還原處理。對4字節(jié) 32bitd單精度和8字節(jié)64bit雙精度類型的數(shù)據(jù),分別把尾數(shù)段tail的的高位以0填充到 32bit/64bit,然后使用存儲的符號段sign,階碼段exps對32bit/64bit的尾數(shù)段tail的 高位進行替換。單精度浮點型使用sign替換高lbit,exps替換高2_9bit ;雙精度浮點型 使用sign替換高lbit,eXps替換高2-12bit,處理后的尾數(shù)段tail值就是原值,把所有字 段值還原后組合成的結(jié)構(gòu)就是還原的存儲的原結(jié)構(gòu)數(shù)據(jù)。為了更好的說明本發(fā)明的方法在結(jié)構(gòu)數(shù)據(jù)存儲方面的優(yōu)勢,采用仿真方式對一個 結(jié)構(gòu)數(shù)據(jù)利用本發(fā)明的方法進行壓縮,并與二進制數(shù)據(jù)塊存儲進行比較。圖5和圖6分別是一個結(jié)構(gòu)數(shù)據(jù)的兩個字段A和B的原始采樣數(shù)據(jù)曲線。圖7是 分別使用二進制塊存儲結(jié)構(gòu)數(shù)據(jù)和使用本發(fā)明方法存儲結(jié)構(gòu)數(shù)據(jù)的存儲空間占用隨時間 變化的曲線情況,其中曲線X是使用二進制塊存儲的情況,曲線Y是使用本發(fā)明方法的情 況,可以很明顯的看出使用二進制塊存儲基本達不到數(shù)據(jù)壓縮的目的,而只用本發(fā)明方法 可以達到11%的壓縮率。圖8和圖9是使用本發(fā)明方法壓縮數(shù)據(jù)的結(jié)構(gòu)字段A和B的還原 曲線,可以看出還原曲線與原曲線的擬合程序是非常接近的,還原精度滿足設定的壓縮精 度要求。通過以上的仿真實驗,說明本發(fā)明的結(jié)構(gòu)數(shù)據(jù)存儲方法在確保數(shù)據(jù)了還原精度前 提下,可以獲得較高數(shù)據(jù)壓縮比,占用較小的存儲空間。本發(fā)明的存儲方法對于絕大多數(shù)
再通過下式分別求出從起點到兩個門限點所確定直線的斜率范圍的最大值和最
結(jié)構(gòu)數(shù)據(jù)的處理,基本可以獲得較好的效果,而且隨著數(shù)據(jù)量的增大,將趨向更好的存儲效果。
權利要求
實時數(shù)據(jù)庫中結(jié)構(gòu)類型數(shù)據(jù)的存儲方法,其特征是采集的結(jié)構(gòu)類型數(shù)據(jù)構(gòu)成結(jié)構(gòu)類型數(shù)據(jù)緩沖隊列,從結(jié)構(gòu)類型數(shù)據(jù)緩沖隊列獲取數(shù)據(jù),進行以下步驟1)按字段分解把獲取的結(jié)構(gòu)類型數(shù)據(jù)的所有字段分解為實時數(shù)據(jù)庫的標簽,使每個字段都對應實時數(shù)據(jù)庫中的唯一一個標簽ID;2)按字段存儲對結(jié)構(gòu)類型數(shù)據(jù)各字段對應的標簽ID,輸入與該字段對應的歷史數(shù)據(jù)進行存儲,包括以下步驟21)值分解把各字段的浮點值基于浮點數(shù)構(gòu)成標準IEEE754按域分解為符號段sign、階碼段exps和尾數(shù)段tail,具體為對單精度浮點類型的浮點值,共4字節(jié)32bit,將高1bit存儲到符號段sign的低1bit中,高2 9bit存儲到階碼段exps中,低23bit存儲到尾數(shù)段tail的低23bit中,不足位的部分都以0填充,其中符號段sign和階碼段exps為1字節(jié),尾數(shù)段tail為4字節(jié);對雙精度浮點類型的浮點值,共8字節(jié)64bit,將高1bit存儲到符號段sign的低1bit中,高2 12bit存儲到階碼段exps中,低52bit存儲到尾數(shù)段tail的低52bit中,不足位的部分都以0填充,其中符號段sign為1字節(jié),階碼段exps為2字節(jié),尾數(shù)段tail為8字節(jié);22)階碼替換對單精度浮點類型的浮點值,把尾數(shù)段tail的高9bit用整數(shù)127替換;對雙精度浮點類型的浮點值,把尾數(shù)段tail中的高12bit用整數(shù)1023替換;進行階碼替換后的尾數(shù)段tail作為該字段的值;23)尾數(shù)段tail按值大小排序?qū)㈦A碼替換后獲得的尾數(shù)段tail的值進行排序處理,按照值的大小從小到大進行排序,排序后每個值對應一個位序;24)值域線性擬合對于排好順序的值,以其位序為橫坐標,值為縱坐標建立值域,按照排序順序?qū)ζ湟佬蜻M行線性擬合處理,線性擬合處理最終獲得兩個點,這兩個點連接的直線為擬合直線,通過擬合直線來擬合排序在這兩個點之間的所有點,從而達到數(shù)據(jù)壓縮的目的;線性擬合處理中,各個點到已獲得的擬合直線的距離偏差均在設定的壓縮精度范圍內(nèi),如所處理的點到擬合直線的距離偏差在設定的壓縮精度范圍外,則以這一點為起點開始新的線性擬合處理;25)按域組合根據(jù)線性擬合得到的數(shù)據(jù),對字段進行域分隔,產(chǎn)生標識域、時間域和數(shù)據(jù)值域三部分,標識域存儲字段的標簽ID,時間域為數(shù)據(jù)進行存儲時的時間戳,數(shù)據(jù)值域包括符號段sign、階碼段exps和線性擬合處理后的尾數(shù)段tail數(shù)據(jù),把三個域的內(nèi)容順序組合在一起構(gòu)成數(shù)據(jù)塊;26)哈弗曼壓縮存儲把按域組合得到的數(shù)據(jù)塊進行哈弗曼編碼壓縮,并存儲壓縮后的數(shù)據(jù);3)字段處理完成判斷檢查結(jié)構(gòu)類型數(shù)據(jù)的每個字段對應的標簽ID是否都已處理,如果完成則執(zhí)行步驟4),沒有完成則回到步驟2);4)數(shù)據(jù)處理完成判斷檢查獲取的歷史數(shù)據(jù)是否都已完成存儲過程,如果完成則獲取新的歷史數(shù)據(jù),開始下一輪存儲處理,沒有完成則回到步驟1)。
2.根據(jù)權利要求1所述的一種實時數(shù)據(jù)庫的結(jié)構(gòu)類型數(shù)據(jù)的存儲方法,其特征是從結(jié) 構(gòu)類型數(shù)據(jù)緩沖隊列獲取歷史數(shù)據(jù)時,先進行緩沖數(shù)據(jù)量判斷,設定一次處理數(shù)據(jù)量的限 值,對從歷史數(shù)據(jù)緩沖隊列獲取的歷史數(shù)據(jù)量與所述限值進行比較,超過限值,則對獲取的 歷史數(shù)據(jù)按字段分解,否則繼續(xù)從歷史數(shù)據(jù)緩沖隊列獲取歷史數(shù)據(jù)。
3.根據(jù)權利要求1或2所述的一種實時數(shù)據(jù)庫的結(jié)構(gòu)類型數(shù)據(jù)的存儲方法,其特征是 值域線性擬合具體為241)設置起點和待壓點并保存起點對于排好順序的歷史數(shù)據(jù)的值,按照排序順序依 序進行處理,按位序取出待處理的第一個點作為擬合起點(Xl,yi),下一點作為待壓點(xn, yn),如果本步驟是第一次執(zhí)行則存儲起點(Xl,yi);242)求出待壓點的門限點和門限點斜率范圍設置壓縮精度d%,求出待壓點(xn,yn) 的兩個門限點(xn,yn±|ynd% I),所述門限點是指點值按照壓縮精度確定的可近似范圍邊 界,可近似范圍為[yn_|ynd% ,yn+|ynd% | ],然后分別求出從擬合起點O^y1)到兩個門 限點所確定直線的斜率范圍的最小值knmin和最大值knmax 隊min人應]=[(少丨洲—+丨洲通過[knmin,knmax]確定本次擬合過程的斜率判斷范圍[kmin,kmax][kmin,kmax] = [knmin, knmax]243)數(shù)據(jù)量判斷按位序檢查待壓點是否還存在下一點,如果沒有下一點,則轉(zhuǎn)到步 驟247)保存待壓點;如果存在下一點,則轉(zhuǎn)到步驟244);244)獲得判斷點并求出起點到判斷點的斜率按位序取出待壓點的下一點作為判斷 點(xn+1,yn+1),求出從擬合起點到判斷點所確定直線的斜率kn+1 Jr _yn+i-yiΚ +1 — ~ 又 n+1 _245)斜率范圍判斷檢查kn+1是否在[kmin,kmax]范圍內(nèi),在此范圍內(nèi)表示待壓點可以被 壓縮,轉(zhuǎn)到步驟246);不在此范圍內(nèi),表示待壓點不能被壓縮,需要開始新的壓縮過程,轉(zhuǎn) 到步驟247);246)丟棄當前待壓點并重新設置新待壓點丟棄待壓點(xn,yn),把判斷點(xn+1,yn+1) 設置為新待壓點,求出新待壓點的兩個門限點(xn+1,yn+1 士 |yn+1d% I ],再分別求出從起點 到兩個門限點所確定直線的斜率范圍的最小值kn+1min和最大值kn+1maX [欠+1 mm, k +l max] - [-——,J更新斜率判斷范圍[kmin,kmax][kmin, kmax] = [max (kmin, kn+1min),niin (kmax,kn+1niax)]新待壓點設置好后,繼續(xù)步驟243);247)保存待壓點存儲當前的待壓點(xn,yn),本次壓縮過程結(jié)束,并把緩存中待處理 的第一個點設置為新一輪壓縮的擬合起點,轉(zhuǎn)到步驟241)進行下一擬合過程的處理。
全文摘要
一種實時數(shù)據(jù)庫數(shù)據(jù)的結(jié)構(gòu)化存儲方法,包括以下步驟1)按字段分解;2)按字段存儲;3)字段處理完成判斷;4)數(shù)據(jù)處理完成判斷。本發(fā)明采用了把結(jié)構(gòu)類型的數(shù)據(jù)分解成為實時數(shù)據(jù)庫的標簽,并且一一對應,從而可以對結(jié)構(gòu)類型的每個字段分離存儲,從而降低單條數(shù)據(jù)的長度,減小單條記錄對系統(tǒng)性能的影響;通過對浮點類型字段值進行階碼分解和替換后,可以通過實時數(shù)據(jù)庫對數(shù)據(jù)的壓縮產(chǎn)生較大的壓縮效率,特別是使用排序線性擬合方法更可以獲得非常高的壓縮比,從而達到對結(jié)構(gòu)化數(shù)據(jù)高效存儲和壓縮的目的,具有較高的實際應用價值。
文檔編號G06F17/30GK101923569SQ20101022309
公開日2010年12月22日 申請日期2010年7月9日 優(yōu)先權日2010年7月9日
發(fā)明者樂蔚蕓, 季勝鵬, 張云鵬, 武愛斌, 魏小慶 申請人:南京朗坤軟件有限公司