本發(fā)明屬于數(shù)據(jù)存儲技術領域,具體地涉及一種實時數(shù)據(jù)存儲結構、數(shù)據(jù)寫入方法及數(shù)據(jù)讀取方法。
背景技術:
當前國內外主流產品一般都提供歷史存儲功能,能較長時間地保存、備份現(xiàn)場的過程數(shù)據(jù)。但由于控制現(xiàn)場的采集點多,采集時間周期短,因而要保存的歷史數(shù)據(jù)量非常大,根據(jù)實時數(shù)據(jù)的特點有效組織數(shù)據(jù)存儲結構可以在寫入和讀取性能上取得平衡。
實時數(shù)據(jù)一般由標簽點id、數(shù)據(jù)、時間戳和質量碼等部分組成,這些數(shù)據(jù)都必須被持久化存儲。一般有兩種做法來存儲這些數(shù)據(jù):
一、將上述所有數(shù)據(jù)打包成一個結構存入底層數(shù)據(jù)文件,并返回一個唯一標識關聯(lián)這條數(shù)據(jù),然后將這個唯一標識保存起來,做成索引方便查詢;
二、將標簽點id和時間戳組成關鍵字,數(shù)據(jù)和質量碼組成值形成一個鍵值對寫入底層數(shù)據(jù)文件。
第一種方法在數(shù)據(jù)文件層面實現(xiàn)簡單,只要不斷向文件順序寫入數(shù)據(jù)即可存儲數(shù)據(jù),讀取文件時只要得到數(shù)據(jù)存儲時返回的唯一標識就可以讀取數(shù)據(jù),讀取寫入都只需要一次磁盤尋址,但是要能夠讀取數(shù)據(jù)必須將唯一標識進行索引。
技術實現(xiàn)要素:
本發(fā)明的目的在于針對現(xiàn)有技術的缺陷,提供一種實時數(shù)據(jù)存儲結構、數(shù)據(jù)寫入方法及數(shù)據(jù)讀取方法。
本發(fā)明的技術方案如下:一種實時數(shù)據(jù)存儲結構,包括:數(shù)據(jù)文件和與所述數(shù)據(jù)文件對應的索引文件,所述數(shù)據(jù)文件包括按照時間順序依次連續(xù)設置的n個記錄塊,每一所述記錄塊包括具有設定時間間隔內的實時數(shù)據(jù),且每一所述記錄塊對應產生一個唯一標識,n為正整數(shù);所述索引文件包括多個按時間順序組織的索引表,每一所述索引表按照時間順序對應記錄所述數(shù)據(jù)文件中最后一個所述記錄塊中實時數(shù)據(jù)的唯一標識。
優(yōu)選地,每一所述記錄塊的唯一標識包括所述實時數(shù)據(jù)在數(shù)據(jù)文件中的偏移量及自身的長度。
優(yōu)選地,每一所述記錄塊還包括與所述實時數(shù)據(jù)對應設置的數(shù)據(jù)包頭;所述數(shù)據(jù)包頭包括標簽點id、數(shù)據(jù)部分開始時間、數(shù)據(jù)部分結束時間、及上一個記錄塊的唯一標識;所述標簽點id標識所述記錄塊的實時數(shù)據(jù)以辨識所述實時數(shù)據(jù),所述數(shù)據(jù)部分開始時間和所述數(shù)據(jù)部分結束時間標識所述記錄塊的數(shù)據(jù)起止時間。
優(yōu)選地,所述索引文件是按照所述標簽點id和所述實時數(shù)據(jù)的時間區(qū)分,并將所述唯一標識存入相應的索引id的時間段內。
優(yōu)選地,每一所述索引表包括多個按照時間順序組織的索引項,每一所述索引項包括多個按時間順序組織的索引,每一所述索引存儲設定時間內最后一個所述記錄塊中實時數(shù)據(jù)的唯一標簽。
一種根據(jù)上述實時數(shù)據(jù)存儲結構的數(shù)據(jù)寫入方法,包括如下步驟:
將所述實時數(shù)據(jù)以記錄塊的形式按照時間順序添加到數(shù)據(jù)文件,并對每一所述記錄塊對應產生唯一標識;
將所述數(shù)據(jù)文件中最后一個所述記錄塊中實時數(shù)據(jù)的唯一標識存儲在所述索引表中,并按照時間順序組織所述索引表形成所述索引文件。
優(yōu)選地,在將所述實時數(shù)據(jù)以記錄塊的形式按照時間順序添加到數(shù)據(jù)文件,并對每一所述記錄塊對應產生唯一標識步驟之前還包括步驟:
將獲取的緩存數(shù)據(jù)按照時間戳進行排序;
對排序后的所述緩存數(shù)據(jù)按照設定的時間間隔進行壓縮打包,形成待存儲的實時數(shù)據(jù)。
優(yōu)選地,每一所述記錄塊還包括與所述實時數(shù)據(jù)對應設置的數(shù)據(jù)包頭;所述數(shù)據(jù)包頭包括標簽點id、數(shù)據(jù)部分開始時間、數(shù)據(jù)部分結束時間、及上一個記錄塊的唯一標識;所述標簽點id標識所述記錄塊的實時數(shù)據(jù)以辨識所述實時數(shù)據(jù),所述數(shù)據(jù)部分開始時間和所述數(shù)據(jù)部分結束時間標識所述記錄塊的數(shù)據(jù)起止時間。
一種根據(jù)上述實時數(shù)據(jù)存儲結構的數(shù)據(jù)讀取方法,包括如下步驟:
根據(jù)待讀取數(shù)據(jù)的開始時間和結束時間按照時間順序檢索索引文件,以獲取與所述待讀取數(shù)據(jù)相對應的唯一標識;
根據(jù)所述唯一標識讀取所述數(shù)據(jù)文件中記錄塊的實時數(shù)據(jù)。
優(yōu)選地,根據(jù)待讀取數(shù)據(jù)的開始時間和結束時間按照時間順序檢索索引文件步驟包括如下步驟:檢索所述待讀取數(shù)據(jù)的開始時間所在索引內的標識,判斷所述索引內是否存在所述結束時間;如果是,則獲得所述帶讀取數(shù)據(jù)的唯一標識;如果否,則所述開始時間加所述索引的時間長度,并返回檢索所述待讀取數(shù)據(jù)的開始時間所在索引內的標識步驟,按照時間順序檢索下一個所述索引。
本發(fā)明提供的技術方案具有如下有益效果:
所述實時數(shù)據(jù)存儲結構、數(shù)據(jù)存儲方法和數(shù)據(jù)讀取方法中,根據(jù)實時數(shù)據(jù)實時性的特點,采用了每次寫入數(shù)據(jù)只向文件尾部增加數(shù)據(jù)的方法,使得每次寫入數(shù)據(jù)只訪問一次磁盤從而加快寫入數(shù)據(jù)的速度,通過組織記錄標識為索引的方法,提高了隨機訪問數(shù)據(jù)的效率。
附圖說明
圖1是本發(fā)明實施例提供的實時數(shù)據(jù)存儲結構中數(shù)據(jù)文件的結構示意圖;
圖2是緩存數(shù)據(jù)排序后的數(shù)據(jù)包結構示意圖;
圖3是排序后數(shù)據(jù)包壓縮格式的示意圖;
圖4是本發(fā)明實施例提供的實時數(shù)據(jù)存儲結構中索引文件的結構示意圖;
圖5是本發(fā)明實施例提供的數(shù)據(jù)寫入方法的流程示意圖;
圖6是圖5所示數(shù)據(jù)寫入方法的流程框圖;
圖7是本發(fā)明實施例提供的數(shù)據(jù)讀取方法的流程示意圖。
具體實施方式
為了使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下結合附圖及實施例,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
除非上下文另有特定清楚的描述,本發(fā)明中的元件和組件,數(shù)量既可以單個的形式存在,也可以多個的形式存在,本發(fā)明并不對此進行限定。本發(fā)明中的步驟雖然用標號進行了排列,但并不用于限定步驟的先后次序,除非明確說明了步驟的次序或者某步驟的執(zhí)行需要其他步驟作為基礎,否則步驟的相對次序是可以調整的??梢岳斫?,本文中所使用的術語“和/或”涉及且涵蓋相關聯(lián)的所列項目中的一者或一者以上的任何和所有可能的組合。
請同時參閱圖1、圖2、圖3和圖4,本發(fā)明實施例提供的實時數(shù)據(jù)存儲結構包括數(shù)據(jù)文件和與所述數(shù)據(jù)文件對應的索引文件。
所述數(shù)據(jù)文件包括按照時間順序依次連續(xù)設置的n個記錄塊,n為正整數(shù)。每一所述記錄塊包括具有設定時間間隔內的實時數(shù)據(jù)和與所述實時數(shù)據(jù)對應設置的數(shù)據(jù)包頭。而且,每一所述記錄塊對應產生一個唯一標識。優(yōu)選地,每一所述記錄塊的唯一標識包括所述實時數(shù)據(jù)在數(shù)據(jù)文件中的偏移量及自身的長度。
需要說明的是,所述實時數(shù)據(jù)的一大特點就是實時性、及數(shù)據(jù)的新鮮度,數(shù)據(jù)的價值隨著新鮮度的降低而遞減,1秒鐘內的數(shù)據(jù)可以用來流程工業(yè)中的控制,5秒鐘以內的可以用來監(jiān)視,半小時內的數(shù)據(jù)可以用來分析和優(yōu)化,一天內的數(shù)據(jù)可以用來日報表,如果是半年以上的數(shù)據(jù)則只能用來對比和追述了。所以對數(shù)據(jù)進行緩存非常必要,一般至少緩存5分鐘的數(shù)據(jù)。待緩存要寫滿后將數(shù)據(jù)從緩存取出,按照時間戳排序打包。
在本實施例中,所述實時數(shù)據(jù)是緩存數(shù)據(jù)按照時間戳排序后,對排序后的所述緩存數(shù)據(jù)按照設定的時間間隔進行壓縮打包,形成待存儲的所述實時數(shù)據(jù)。
其中,在對所述緩存數(shù)據(jù)按照時間戳排序進行排序時,當從緩存取得所述緩存數(shù)據(jù)后按照時間戳由小到大進行排序,而且,數(shù)據(jù)值、時間戳和質量碼組成一個結構全部放在一塊連續(xù)的內存中方便進行壓縮操作。
所述數(shù)據(jù)包頭包括標簽點id、數(shù)據(jù)部分開始時間、數(shù)據(jù)部分結束時間、及上一個記錄塊的唯一標識。其中,所述標簽點id標識所述記錄塊的實時數(shù)據(jù)以辨識所述實時數(shù)據(jù),所述數(shù)據(jù)部分開始時間和所述數(shù)據(jù)部分結束時間標識所述記錄塊的數(shù)據(jù)起止時間。
需要說明的是,由于標簽點的數(shù)據(jù)時間只會一直增加,不會出現(xiàn)重復,所以不需要將每個記錄塊的唯一標識全部記錄在所述索引文件中,所述索引文件只記錄某段時間內所述數(shù)據(jù)文件中最后一個所述記錄塊的唯一標識,然后按圖索驥即可得到某段時間內的所有數(shù)據(jù),因此將上一個記錄塊的唯一標識記錄在本記錄塊中。
而且,在將壓縮打包后的所述實時數(shù)據(jù)存入所述數(shù)據(jù)文件時,為了快速將所述實時數(shù)據(jù)寫入數(shù)據(jù)文件,采用直接將打包壓縮后的所述實時數(shù)據(jù)加上所述數(shù)據(jù)包頭寫入所述數(shù)據(jù)文件尾部形成一個所述記錄塊,然后返回所述記錄塊的實時數(shù)據(jù)在所述數(shù)據(jù)文件中的唯一標識。
所述索引文件按照設定時間組織,例如按照月份組織,每月產生一個所述索引文件。
在本實施例中,每一所述索引文件包括多個按時間順序組織的索引表,每一所述索引表按照時間順序對應記錄所述數(shù)據(jù)文件中最后一個所述記錄塊中實時數(shù)據(jù)的唯一標識。
具體地,每一所述索引表包括多個按照時間順序組織的索引項,每一所述索引項包括多個按時間順序組織的索引,每一所述索引存儲設定時間內最后一個所述記錄塊中實時數(shù)據(jù)的唯一標簽。
例如,在所述索引文件中,每天產生一個所述索引表,且每一所述索引表包括10000個索引項,每一所述索引項代表一個標簽點的索引。而且,每一所述索引項包括24個索引,每一所述索引存儲某個小時內最后一個所述記錄塊中實時數(shù)據(jù)的唯一標簽。也就是說,在每一所述索引內,只要有最后一個實時數(shù)據(jù)的唯一標識,就可以逐步讀取在這個小時內的所有實時數(shù)據(jù)。
如圖5和圖6所示,一種根據(jù)所述實時數(shù)據(jù)存儲結構的數(shù)據(jù)寫入方法,包括如下步驟:
s11、將獲取的緩存數(shù)據(jù)按照時間戳進行排序;
s12、對排序后的所述緩存數(shù)據(jù)按照設定的時間間隔進行壓縮打包,形成待存儲的實時數(shù)據(jù);
s13、將所述實時數(shù)據(jù)以記錄塊的形式按照時間順序添加到數(shù)據(jù)文件,并對每一所述記錄塊對應產生唯一標識;
s14、將所述數(shù)據(jù)文件中最后一個所述記錄塊中實時數(shù)據(jù)的唯一標識存儲在所述索引表中,并按照時間順序組織所述索引表形成所述索引文件。
在所述數(shù)據(jù)寫入方法的步驟s13中,根據(jù)所述實時數(shù)據(jù)的標簽點id、起始時間和結束時間找到相對應的所述數(shù)據(jù)文件,將所述實時數(shù)據(jù)加上所述數(shù)據(jù)包頭后作為一個記錄塊寫入所述數(shù)據(jù)文件的尾部,并返回所述記錄塊中實時數(shù)據(jù)的唯一標識。
而且,在所述步驟s14中,根據(jù)所述實時數(shù)據(jù)的標簽點id、起始時間和結束時間將所述唯一標識寫入到相應的所述索引文件中。
如圖7所示,一種根據(jù)所述實時數(shù)據(jù)存儲結構的數(shù)據(jù)讀取方法,包括如下步驟:
根據(jù)待讀取數(shù)據(jù)的開始時間和結束時間按照時間順序檢索索引文件,以獲取與所述待讀取數(shù)據(jù)相對應的唯一標識;
根據(jù)所述唯一標識讀取所述數(shù)據(jù)文件中記錄塊的實時數(shù)據(jù)。
具體地,在根據(jù)待讀取數(shù)據(jù)的開始時間和結束時間按照時間順序檢索索引文件的步驟中,具體包括如下步驟:
檢索所述待讀取數(shù)據(jù)的開始時間所在索引內的標識,判斷所述索引內是否存在所述結束時間;
如果是,則獲得所述帶讀取數(shù)據(jù)的唯一標識;
如果否,則所述開始時間加所述索引的時間長度,并返回檢索所述待讀取數(shù)據(jù)的開始時間所在索引內的標識步驟,按照時間順序檢索下一個所述索引。
在本實施例中,所述索引的時間長度為一個小時,則如果判斷所述索引內不存在所述結束時間,則將所述開始時間加一個小時,然后在下一個所述索引內繼續(xù)檢索。
需要說明的是,在所述數(shù)據(jù)讀取方法中,如果在所述索引內不存在所述結束時間,則將所述開始時間加一個小時繼續(xù)讀取,直到讀取數(shù)據(jù)時間包含結束時間或者已經(jīng)沒有數(shù)據(jù)可以讀取或者讀取的數(shù)據(jù)量超過配置單次可以讀取的最大數(shù)據(jù)量則結束。
相較于現(xiàn)有技術,本發(fā)明提供的技術方案具有如下有益效果:
所述實時數(shù)據(jù)存儲結構、數(shù)據(jù)存儲方法和數(shù)據(jù)讀取方法中,根據(jù)實時數(shù)據(jù)實時性的特點,采用了每次寫入數(shù)據(jù)只向文件尾部增加數(shù)據(jù)的方法,使得每次寫入數(shù)據(jù)只訪問一次磁盤從而加快寫入數(shù)據(jù)的速度,通過組織記錄標識為索引的方法,提高了隨機訪問數(shù)據(jù)的效率。
對于本領域技術人員而言,顯然本發(fā)明不限于上述示范性實施例的細節(jié),而且在不背離本發(fā)明的精神或基本特征的情況下,能夠以其他的具體形式實現(xiàn)本發(fā)明。因此,無論從哪一點來看,均應將實施例看作是示范性的,而且是非限制性的,本發(fā)明的范圍由所附權利要求而不是上述說明限定,因此旨在將落在權利要求的等同要件的含義和范圍內的所有變化囊括在本發(fā)明內。不應將權利要求中的任何附圖標記視為限制所涉及的權利要求。
此外,應當理解,雖然本說明書按照實施方式加以描述,但并非每個實施方式僅包含一個獨立的技術方案,說明書的這種敘述方式僅僅是為清楚起見,本領域技術人員應當將說明書作為一個整體,各實施例中的技術方案也可以經(jīng)適當組合,形成本領域技術人員可以理解的其他實施方式。