專利名稱:海量數(shù)據(jù)存儲和檢索方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,具體地講是一種海量數(shù)據(jù)存儲和檢索方法。
背景技術(shù):
隨著互聯(lián)網(wǎng)的普及和智能終端設(shè)備的廣泛使用,越來越多的終端設(shè)備現(xiàn)在可以接入互聯(lián)網(wǎng),并通過網(wǎng)絡(luò)進行遠程訪問、控制和監(jiān)控狀態(tài)。如何有效地存儲大量設(shè)備(千萬級別)連續(xù)不間斷上傳的狀態(tài)信息,對于實現(xiàn)對大量設(shè)備的在線監(jiān)控和歷史狀態(tài)查詢是一個關(guān)鍵的問題。例如,在物流行業(yè)中,車輛的位置信息流,需要連續(xù)不斷上傳到服務(wù)器上進行存儲,上傳的數(shù)據(jù)是24小時不間斷的,由于車輛數(shù)目眾多,由此會產(chǎn)生海量的數(shù)據(jù)需要被服務(wù)器存儲,對服務(wù)器存儲系統(tǒng)造成的IO負荷是巨大的。在這樣的場景下,能否實現(xiàn)海量 信息存儲及快速檢索,對于收集和查詢大量設(shè)備的狀態(tài)信息起到舉足輕重的作用。解決這一個問題的關(guān)鍵就是如何有效減少在大量數(shù)據(jù)連續(xù)不間斷的寫入服務(wù)器存儲系統(tǒng)的時候給系統(tǒng)帶來的巨大寫入(存儲)壓力,并且在提供足夠?qū)懭肽芰Φ那疤嵯拢S持好的讀(檢索)性能,在存儲和檢索之間獲得平衡。在這個場景中,目前存在的方案主要依靠關(guān)系數(shù)據(jù)庫作為檢索和存儲,而這類方案,往往無法支撐千萬級別的設(shè)備同時連續(xù)不間斷的上傳數(shù)據(jù)。緩存技術(shù)開始被應(yīng)用于海量級數(shù)據(jù)的存儲和檢索,部分地解決和緩解了上述問題。如何將緩存技術(shù)應(yīng)用于海量數(shù)據(jù)存儲和檢索是解決問題的關(guān)鍵,如國家知識產(chǎn)權(quán)局公開的專利申請?zhí)枮?01010142195. 5的發(fā)明專利申請“一種海量數(shù)據(jù)信息檢索系統(tǒng)及其方法”,包括終端層、數(shù)據(jù)服務(wù)層、數(shù)據(jù)緩存服務(wù)層和數(shù)據(jù)存儲服務(wù)層,由于該專利所涉及的緩存技術(shù)是對檢索關(guān)鍵詞和檢索結(jié)果的緩存,而海量數(shù)據(jù)的存儲涉及不斷的讀寫,檢索只是讀的過程,因而無法完全解決上述技術(shù)問題
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題,是提供一種采用緩存技術(shù)對大量設(shè)備周期上報數(shù)據(jù)進行存儲和檢索的海量數(shù)據(jù)存儲和檢索方法。本發(fā)明的技術(shù)解決方案,是提供一種以下步驟的海量數(shù)據(jù)存儲和檢索方法,包括以下步驟(I)、在服務(wù)器的文件系統(tǒng)中,按時間段建立目錄,每個目錄下包含眾多<id>. data命令的設(shè)備數(shù)據(jù)文件,每個設(shè)備數(shù)據(jù)文件存放對應(yīng)設(shè)備id在指定時間段的所有數(shù)據(jù)記錄;(2)、服務(wù)器收到設(shè)備上傳數(shù)據(jù)后,根據(jù)數(shù)據(jù)上報時段將同一時間段上報的所有數(shù)據(jù)匯總到以該時間段命名的目錄下,然后根據(jù)設(shè)備標識(id)把某時段內(nèi)一個或多個設(shè)備的上報數(shù)據(jù)匯總到以該時段命名的目錄下的與該設(shè)備標識關(guān)聯(lián)的文件內(nèi);
(3)、進行數(shù)據(jù)存儲時,先緩存一定規(guī)模的上報數(shù)據(jù),并按步驟I和2對緩存數(shù)據(jù)進行規(guī)整,當緩存數(shù)據(jù)達到設(shè)定規(guī)模時,一次性集中刷新到服務(wù)器的文件系統(tǒng)中;(4)、查詢數(shù)據(jù)時,根據(jù)所需查詢的設(shè)備標識(id)與時間段,讀取相應(yīng)文件并篩選出查詢結(jié)果。
采用以上方法,與現(xiàn)有技術(shù)相比具有以下優(yōu)點采用本發(fā)明,步驟3和4是并列步驟,實現(xiàn)了海量數(shù)據(jù)的存儲(寫)和檢索(讀)兩個功能,通過時間段與設(shè)備標識(id)相結(jié)合的方式來設(shè)置文件類型和存儲位置,并采用緩存技術(shù)對海量數(shù)據(jù)進行緩存和間歇更新;本發(fā)明降低了存儲大量設(shè)備連續(xù)不間斷上傳數(shù)據(jù)造成的服務(wù)器IO壓力,提高了能并發(fā)支持的上傳設(shè)備的數(shù)目,同時在讀/寫性能上取得了較好的平衡,在持續(xù)的大的存儲(寫)壓力下,仍能獲得較好的檢索(讀)性能。作為改進,步驟I中,在指定時間段,設(shè)備數(shù)據(jù)文件與設(shè)備id—一對應(yīng),或一個設(shè)備數(shù)據(jù)文件存儲多個id設(shè)備的數(shù)據(jù)記錄;為減少指定時間段目錄下文件數(shù)目,可以將連續(xù)的設(shè)備id記錄存到一個文件,降低了數(shù)據(jù)的復(fù)雜程度,提高了整個數(shù)據(jù)庫的穩(wěn)定性,從而提高數(shù)據(jù)處理效率。作為改進,步驟3中,數(shù)據(jù)存儲的步驟具體步驟如下a、設(shè)備上傳的數(shù)據(jù)通過網(wǎng)關(guān)傳送到設(shè)備數(shù)據(jù)隊列;b、從設(shè)備數(shù)據(jù)隊列批量獲取設(shè)備數(shù)據(jù),檢查記錄合法性,并將有效記 錄放入內(nèi)存I ;c、定期檢查內(nèi)存I的設(shè)備數(shù)據(jù)記錄數(shù),內(nèi)存I內(nèi)的設(shè)備數(shù)據(jù)記錄數(shù)超過限額,則將這些記錄一次性追加到當前臨時文件中;并同時把內(nèi)存I的所有記錄按時間段和id進行規(guī)整,規(guī)整后的數(shù)據(jù)移入內(nèi)存II和內(nèi)存III中;d、內(nèi)存III中緩存記錄數(shù)超過設(shè)定限額(一次批量寫入磁盤的記錄數(shù)),將內(nèi)存III中緩存記錄按步驟I和2中的規(guī)則寫入磁盤;e、將內(nèi)存III中緩存記錄刷新到服務(wù)器的文件系統(tǒng),完成海量數(shù)據(jù)的存儲。作為改進,內(nèi)存II中緩存經(jīng)過規(guī)整但尚未寫入文件系統(tǒng)的設(shè)備數(shù)據(jù),供內(nèi)存查詢,內(nèi)存II和服務(wù)器文件系統(tǒng)構(gòu)成了查詢數(shù)據(jù)庫,該設(shè)計將數(shù)據(jù)的查詢與寫入分開,減少了服務(wù)器的數(shù)據(jù)傳輸壓力。作為改進,步驟4中,接到外部的查詢請求時,由查詢的設(shè)備id和時間段定位到對應(yīng)的設(shè)備數(shù)據(jù)文件,進入內(nèi)存II和服務(wù)器文件系統(tǒng)檢索相應(yīng)的設(shè)備數(shù)據(jù)文件,讀取相應(yīng)的記錄并進行排序處理,最后返回響應(yīng)。
圖I為本發(fā)明海量數(shù)據(jù)存儲和檢索方法的具體實施框圖。
具體實施例方式下面結(jié)合附圖和具體實施例對本發(fā)明作進一步地說明。本發(fā)明的海量數(shù)據(jù)存儲和檢索方法,包括以下步驟(I)、在服務(wù)器的文件系統(tǒng)中,按時間段建立目錄,每個目錄下包含眾多<id>. data命令的設(shè)備數(shù)據(jù)文件,每個設(shè)備數(shù)據(jù)文件存放對應(yīng)設(shè)備id在指定時間段的所有數(shù)據(jù)記錄;(2)、服務(wù)器收到設(shè)備上傳數(shù)據(jù)后,根據(jù)數(shù)據(jù)上報時段將同一時間段上報的所有數(shù)據(jù)匯總到以該時間段命名的目錄下,然后根據(jù)設(shè)備標識(id)把某時段內(nèi)一個或多個設(shè)備的上報數(shù)據(jù)匯總到以該時段命名的目錄下的與該設(shè)備標識關(guān)聯(lián)的文件內(nèi);(3)、進行數(shù)據(jù)存儲時,先緩存一定規(guī)模的上報數(shù)據(jù),并按步驟I和2對緩存數(shù)據(jù)進行規(guī)整,當緩存數(shù)據(jù)達到設(shè)定規(guī)模時,一次性集中刷新到服務(wù)器的文件系統(tǒng)中;(4)、查詢數(shù)據(jù)時,根據(jù)所需查詢的設(shè)備標識(id)與時間段,讀取相應(yīng)文件并篩選出查詢結(jié)果。
步驟I中,在指定時間段,設(shè)備數(shù)據(jù)文件與設(shè)備id —一對應(yīng),或一個設(shè)備數(shù)據(jù)文件存儲多個id設(shè)備的數(shù)據(jù)記錄。步驟3中,數(shù)據(jù)存儲的步驟具體步驟如下a、設(shè)備上傳的數(shù)據(jù)通過網(wǎng)關(guān)傳送到設(shè)備數(shù)據(jù)隊列山、從設(shè)備數(shù)據(jù)隊列批量獲取設(shè)備數(shù)據(jù),檢查記錄合法性,并將有效記錄放入內(nèi)存I ;c、定期檢查內(nèi)存I的設(shè)備數(shù)據(jù)記錄數(shù),內(nèi)存I內(nèi)的設(shè)備數(shù)據(jù)記錄數(shù)超過限額,則將這些記錄一次性追加到當前 臨時文件中;并同時把內(nèi)存I的所有記錄按時間段和id進行規(guī)整,規(guī)整后的數(shù)據(jù)移入內(nèi)存II和內(nèi)存III中;d、內(nèi)存III中緩存記錄數(shù)超過設(shè)定限額(一次批量寫入磁盤的記錄數(shù)),將內(nèi)存III中緩存記錄按步驟I和2中的規(guī)則寫入磁盤;e、將內(nèi)存III中緩存記錄刷新到服務(wù)器的文件系統(tǒng),完成海量數(shù)據(jù)的存儲。內(nèi)存II中緩存經(jīng)過規(guī)整但尚未寫入文件系統(tǒng)的設(shè)備數(shù)據(jù),供內(nèi)存查詢,內(nèi)存II和服務(wù)器文件系統(tǒng)構(gòu)成了查詢數(shù)據(jù)庫。步驟4中,接到外部的查詢請求時,由查詢的設(shè)備id和時間段定位到對應(yīng)的設(shè)備數(shù)據(jù)文件,進入內(nèi)存II和服務(wù)器文件系統(tǒng)檢索相應(yīng)的設(shè)備數(shù)據(jù)文件,讀取相應(yīng)的記錄并進行排序處理,最后返回響應(yīng)。如圖I所示,本發(fā)明的具體實施例的操作步驟如下I、在服務(wù)器的文件系統(tǒng)中,按日期建立目錄,每個目錄下是眾多以<id>. data命令的設(shè)備數(shù)據(jù)文件,每個文件存放對應(yīng)設(shè)備id在指定日期的所有數(shù)據(jù)記錄。為減少日期目錄下文件數(shù)目,可以將連續(xù)的設(shè)備id記錄存到一個文件。例如,如果設(shè)定5個id共用一個設(shè)備數(shù)據(jù)文件,則<id/5>. data就存放對應(yīng)5個設(shè)備id的數(shù)據(jù)記錄。2、設(shè)備上報的數(shù)據(jù)通過網(wǎng)關(guān)等一系列中間模塊傳送到設(shè)備數(shù)據(jù)隊列。3、GetterThread從設(shè)備數(shù)據(jù)隊列批量獲取設(shè)備數(shù)據(jù),檢查記錄合法性,并將有效記錄放入內(nèi)存queue。4、QueueThread定期檢查內(nèi)存queue的記錄數(shù)。若內(nèi)存queue的記錄數(shù)超過門限,則將這些記錄一次性追加到當前臨時文件buf. tmp中;并同時把內(nèi)存queue的所有記錄按日期和id進行規(guī)整,規(guī)整后的數(shù)據(jù)移入內(nèi)存cache和內(nèi)存buf中。5、若當前內(nèi)存buf中緩存記錄數(shù)超過設(shè)定門限(一次批量寫入磁盤的記錄數(shù))并且FlushThread處于空閑狀態(tài),貝U通知FlushThread將內(nèi)存buf中緩存記錄按I中的規(guī)貝U,寫入磁盤。FlushThread負責將當前緩存的記錄刷新到服務(wù)器的文件系統(tǒng),完成后通知QueueThread06,Selector負責接收外部的查詢請求,按I中的規(guī)則,由查詢的設(shè)備id和時間段定位到對應(yīng)的設(shè)備數(shù)據(jù)文件,讀取相應(yīng)的記錄并進行排序等處理,最后返回響應(yīng)。各模塊的名稱和功能設(shè)置如下設(shè)備數(shù)據(jù)隊列設(shè)備上傳的數(shù)據(jù),經(jīng)過網(wǎng)關(guān)的中轉(zhuǎn),收集到設(shè)備數(shù)據(jù)隊列中。GetterThread :讀取設(shè)備數(shù)據(jù)隊列中的數(shù)據(jù),并放入內(nèi)存queue (內(nèi)存I)中。QueueThread :讀取內(nèi)存queue中的數(shù)據(jù),并把數(shù)據(jù)在內(nèi)存中進行規(guī)整。FlushThread:定期將規(guī)整后的數(shù)據(jù),批量寫入操作系統(tǒng)的文件系統(tǒng)。Selector :查詢在內(nèi)存中和文件系統(tǒng)中的設(shè)備數(shù)據(jù),對外提供查詢接口。Buf. tmp :臨時文件,系統(tǒng)失效后,恢復(fù)數(shù)據(jù)時使用。內(nèi)存buf :緩存經(jīng)過規(guī)整的設(shè)備數(shù)據(jù),供寫入磁盤(內(nèi)存III)。
內(nèi)存cache :緩存經(jīng)過規(guī)整但尚未寫入文件系統(tǒng)的設(shè)備數(shù)據(jù),供內(nèi)存查詢(內(nèi)存II)。 以上僅就本發(fā)明較佳的實施例作了說明,但不能理解為是對權(quán)利要求的限制。本發(fā)明不僅局限于以上實施例,其具體步驟允許有變化。總之,凡在本發(fā)明獨立權(quán)利要求的保護范圍內(nèi)所作的各種變化均在本發(fā)明的保護范圍內(nèi)。
權(quán)利要求
1.海量數(shù)據(jù)存儲和檢索方法,其特征在于包括以下步驟 (1)、在服務(wù)器的文件系統(tǒng)中,按時間段建立目錄,每個目錄下包含眾多<id>.data命令的設(shè)備數(shù)據(jù)文件,每個設(shè)備數(shù)據(jù)文件存放對應(yīng)設(shè)備id在指定時間段的所有數(shù)據(jù)記錄; (2)、服務(wù)器收到設(shè)備上傳數(shù)據(jù)后,根據(jù)數(shù)據(jù)上報時段將同一時間段上報的所有數(shù)據(jù)匯總到以該時間段命名的目錄下,然后根據(jù)設(shè)備標識(id)把某時段內(nèi)一個或多個設(shè)備的上報數(shù)據(jù)匯總到以該時段命名的目錄下的與該設(shè)備標識關(guān)聯(lián)的文件內(nèi); (3)、進行數(shù)據(jù)存儲時,先緩存一定規(guī)模的上報數(shù)據(jù),并按步驟I和2對緩存數(shù)據(jù)進行規(guī)整,當緩存數(shù)據(jù)達到設(shè)定規(guī)模時,一次性集中刷新到服務(wù)器的文件系統(tǒng)中; (4)、查詢數(shù)據(jù)時,根據(jù)所需查詢的設(shè)備標識(id)與時間段,讀取相應(yīng)文件并篩選出查 詢結(jié)果。
2.根據(jù)權(quán)利要求I所述的海量數(shù)據(jù)存儲和檢索方法,其特征在于步驟I中,在指定時間段的目錄下,設(shè)備數(shù)據(jù)文件與設(shè)備id —一對應(yīng),或一個設(shè)備數(shù)據(jù)文件存儲多個id設(shè)備的數(shù)據(jù)記錄。
3.根據(jù)權(quán)利要求I所述的海量數(shù)據(jù)存儲和檢索方法,其特征在于步驟3中,數(shù)據(jù)存儲的步驟具體步驟如下a、設(shè)備上傳的數(shù)據(jù)通過網(wǎng)關(guān)傳送到設(shè)備數(shù)據(jù)隊列;b、從設(shè)備數(shù)據(jù)隊列批量獲取設(shè)備數(shù)據(jù),檢查記錄合法性,并將有效記錄放入內(nèi)存I ;c、定期檢查內(nèi)存I的設(shè)備數(shù)據(jù)記錄數(shù),內(nèi)存I內(nèi)的設(shè)備數(shù)據(jù)記錄數(shù)超過限額,則將這些記錄一次性追加到當前臨時文件中;并同時把內(nèi)存I的所有記錄按時間段和id進行規(guī)整,規(guī)整后的數(shù)據(jù)移入內(nèi)存II和內(nèi)存III中;d、內(nèi)存III中緩存記錄數(shù)超過設(shè)定限額(一次批量寫入磁盤的記錄數(shù)),將內(nèi)存III中緩存記錄按步驟I和2中的規(guī)則寫入磁盤;e、將內(nèi)存III中緩存記錄刷新到服務(wù)器的文件系統(tǒng),完成海量數(shù)據(jù)的存儲。
4.根據(jù)權(quán)利要求3所述的海量數(shù)據(jù)存儲和檢索方法,其特征在于內(nèi)存II中緩存經(jīng)過規(guī)整但尚未寫入文件系統(tǒng)的設(shè)備數(shù)據(jù),供內(nèi)存查詢,內(nèi)存II和服務(wù)器文件系統(tǒng)構(gòu)成了查詢數(shù)據(jù)庫。
5.根據(jù)權(quán)利要求I所述的海量數(shù)據(jù)存儲和檢索方法,其特征在于步驟4中,接到外部的查詢請求時,由查詢的設(shè)備id和時間段定位到對應(yīng)的設(shè)備數(shù)據(jù)文件,進入內(nèi)存II和服務(wù)器文件系統(tǒng)檢索相應(yīng)的設(shè)備數(shù)據(jù)文件,讀取相應(yīng)的記錄并進行排序處理,最后返回響應(yīng)。
全文摘要
本發(fā)明公開了一種海量數(shù)據(jù)存儲和檢索方法,包括以下步驟(1)、在服務(wù)器的文件系統(tǒng)中,按時間段建立目錄,每個目錄下包含眾多.data命令的設(shè)備數(shù)據(jù)文件;(2)、服務(wù)器收到設(shè)備上傳數(shù)據(jù)后,根據(jù)數(shù)據(jù)上報時段將同一時間段上報的所有數(shù)據(jù)匯總到以該時間段命名的目錄下;(3)、進行數(shù)據(jù)存儲時,先緩存一定規(guī)模的上報數(shù)據(jù),當緩存數(shù)據(jù)達到設(shè)定規(guī)模時,一次性集中刷新到服務(wù)器的文件系統(tǒng)中;(4)、查詢數(shù)據(jù)時,根據(jù)所需查詢的設(shè)備標識(id)與時間段,讀取相應(yīng)文件并篩選出查詢結(jié)果。本發(fā)明降低了存儲大量設(shè)備連續(xù)不間斷上傳數(shù)據(jù)造成的服務(wù)器IO壓力,提高了能并發(fā)支持的上傳設(shè)備的數(shù)目,同時在讀/寫性能上取得了較好的平衡。
文檔編號G06F17/30GK102750377SQ20121021031
公開日2012年10月24日 申請日期2012年6月21日 優(yōu)先權(quán)日2012年6月21日
發(fā)明者唐耀斌, 朱文俊 申請人:深圳市谷米科技有限公司