新四季網

一種MongoDB集群快速查詢計算的方法及裝置的製作方法

2023-05-28 09:20:16

專利名稱:一種MongoDB集群快速查詢計算的方法及裝置的製作方法
技術領域:
本發明涉及一種分布式文件存儲的資料庫集群技術,尤其涉及一種MongoDB集群的快速查詢計算的方法及裝置。
背景技術:
隨著信息化的進一步加深,在各個領域,如電信、交通、金融、零售、航天、醫藥等,數據量級都呈現快速增長趨勢,如何高效並且無誤的存儲、分析、理解以及利用這些大規模數據,成為一個關鍵性的問題。為了應對大規模數據處理的難題,資料庫集群技術應運而生。資料庫集群技術是將多個資料庫連在一起組成分布式資料庫集群,將海量數據「分而治之」。MongoDB作為分布式資料庫的一員,表現的非常優秀。在MongoDB資料庫集群中,可以採用find語句查詢數據,查詢結果可以採用MapReduce分布計算的方式返回查詢計算的結果。MapReduce分布式計算框架是Google公司提出的軟體架構,借鑑了函數式編程的思想,高效地進行大規模數據集的分布式計算。MapReduce以函數的形式提供了 Map和Reduce來進行分布式計算。Map相對獨立且並行運行,對存儲系統中的文件按行處理,並產生鍵值(key/value)對。Reduce以Map的輸出作為輸入,相同key的記錄匯聚到同一 reduce,reduce對這組記錄進行操作,並產生新的數據集。所有Reduce任務的輸出組成最終結果。隨著資料庫集群技術的發展,人們對其業務功能的需求也越來越高。目前的技術可以實現多臺MongoDB伺服器之間的數據匯總,但是實現多臺MongoDB伺服器之間的聯表分組查詢的方法很少,提出的相關專利有「M0NG0DB分片聯表查詢方法及裝置」。以下對該專利進行說明,該方法包括:步驟1、確定查詢條件,該查詢條件用於查詢MongoDB所有分片的指定數據表中與指定分組對應的分組匯總信息;步驟2、確定所述指定數據表中屬於所述指定分組中任意分組的數據記錄標識,作為目標記錄標識;步驟3、獲取所述MongoDB各個分片中的指定數據表中數據記錄標識是各所述目標數據記錄標識之一的數據信息;步驟4、將所獲取的數據信息存儲在一臨時數據表中;步驟5、基於所述臨時數據表對所獲取的數據進行分組匯總,得到分組匯總信息。通過以上步驟,可以實現多臺MongoDB伺服器之間高效聯表分組查詢,但是,該方案在多臺MongoDB伺服器上建立臨時數據表,通過MapReduce對臨時數據表進行分組匯總。這樣做,存在著以下缺點:l、MapReduce支持分片資料庫查詢,處理速度偏慢,MapReduce並不適用需要實時響應的系統;2、MapReduce相對於具有完善索引的系統而言,不再具有優勢,因為它需要對每條數據進行匹配,並將與搜索條件相匹配的數據提取出來,而如果採用索引系統,並不需要遍歷所有數據。與MapReduce功能相近的語句是Group by語句。Groupby語句的查詢速度比MapReduce快很多,但是Group by語句只能用於一臺伺服器上的數據查詢和計算,無法應用於分布式資料庫的查詢中。

發明內容
本發明的目的在於提供一種MongoDB集群的快速查詢方法。當用戶對分片聯表數據進行查詢時,將使用MapReduce進行分片查詢方式改進為一臺伺服器上查詢的方式,通過這種方法大大提高了數據的查詢速度。為達此目的,本發明採用以下技術方案:—種MongoDB集群快速查詢計算的方法,所述方法包括:S1、確定查詢條件,所述查詢條件用於查詢MongoDB所有分片的指定數據表中與查詢條件對應的指定分組的分組匯總數據;S2、根據所述查詢條件,查詢所述指定數據表,獲取與所述查詢條件對應的指定分組中的數據;S3、將所述數據存儲在伺服器上的第一臨時數據緩存表中;S4、對所述第一臨時數據緩存表中的數據進行分組查詢並對查詢結果進行計算。進一步地、在所述步驟S4之後,還包括步驟S5,將步驟S4中所述的分組查詢計算的結果存儲在伺服器上的第二臨時數據緩存表中。進一步地、所述步驟S2中,採用find語句查詢所述指定數據表,獲取與所述查詢條件對應的指定分組中的數據,所述步驟S4中,採用Group by語句對所述第一臨時數據緩存表中的數據進行分組查詢並對查詢結果進行計算。進一步地、在所述步驟S3與步驟S4之間,還包括步驟S3-1,建立所述第一數據緩存表的日誌表。進一步地、在所述步驟S2中,根據所述查詢條件,查詢所述指定數據表包括:將所述查詢條件拆分為多個區間的查詢條件。進一步地、所述步驟S3中,將所述數據信息存儲在伺服器的第一臨時數據緩存表中包括:將需要存儲的數據分為多個小塊的數據分批存儲。進一步地、在所述步驟S5之後,還包括步驟S6,建立所述第二臨時數據緩存表的曰志表。進一步地、當所述第一臨時數據緩存表的日誌表或第二臨時數據緩存表的日誌表中的數據的查詢頻率低於預定頻率閾值時,刪除第一臨時數據緩存表或第二臨時數據緩存表中的所述數據。進一步地、當所述第一臨時數據緩存表的日誌表或第二臨時數據緩存表的日誌表中數據的日期屬性超過過期時間閾值時,刪除第一臨時數據緩存表或第二臨時數據緩存表中的對應的數據信息。相應地、本發明還公開了一種MongoDB集群的快速查詢計算裝置,所述裝置包含:確定模塊,用於確定查詢條件,所述查詢條件用於查詢MongoDB所有分片的指定數據表中與查詢條件對應的指定分組的分組匯總數據;查詢模塊,用於根據所述查詢條件,查詢所述指定數據表,獲取與所述指定分組對應的數據信息;記錄模塊,用於將所述數據信息存儲在伺服器上的第一臨時數據緩存表中;處理模塊,用於對所述第一臨時數據緩存表中的數據信息進行分組查詢並對查詢結果進行計算。本發明的有益效果為,提供了一種MongoDB集群的快速查詢方法,通過對臨時緩存表存儲形式的修改,將在多臺伺服器上存儲的數據在一臺伺服器上集中存儲,通過在一臺伺服器上進行數據查詢、計算,大大提高了查詢和計算的速度。


下面根據附圖和實施例對本發明作進一步詳細說明。圖1為本發明實施例所述MongoDB集群快速查詢計算方法流程圖;圖2為本發明實施例所述的數據表、日誌表及索引之間的關係示意圖;圖3為本發明實施例所述MongoDB集群快速查詢計算裝置結構示意圖。
具體實施例方式下面結合附圖和實施例對本發明作進一步的詳細說明。可以理解的是,此處所描述的具體實施例僅僅用於解釋本發明,而非對本發明的限定。另外還需要說明的是,為了便於描述,附圖中僅示出了與本發明相關的部分而非全部內容。在圖1中示出了本發明的第一實施例。圖1為根據本發明第一實施例的MongoDB集群快速查詢方法的實現流程,該實現流程100詳述如下:在步驟101中,確定查詢條件。查詢條件用於查詢MongoDB所有分片的指定數據表中與指定分組對應的分組匯總信息。可以指定一個分組,也可以指定多個分組。通常,可通過接收用戶端發來的用戶請求來確定查詢條件。可以通過網絡接收來自瀏覽器等用戶端發來的用戶請求。此外,用戶請求還可以用於查詢MongoDB伺服器中所有分片中的指定數據表中與指定分組對應且滿足預設條件的數據。例如:在一段時間內,和/或屬於某一地域等的數據。需要說明的是,通過用戶端接收用戶發來的用戶請求作為查詢條件只是一個例子。在步驟102中,查詢數據信息。根據步驟101中的查詢條件,查詢指定數據表,獲取與所述指定分組對應的數據信息。在本實施例中,使用find語句查詢數據信息。通過在find語句中限定查詢條件,獲取與所述指定分組對應的數據信息。例如:查詢年齡大於20且小於30的用戶時,可使用:db.users, find({"age":{"$gt":20, "$lte":30}})。在步驟103中,存儲查詢數據。將步驟102中查詢到的數據信息存儲在伺服器上的第一臨時數據緩存表中。該第一臨時數據緩存表可以是預先建立好的資料庫,也可以在存儲數據信息時同步建立。用戶在存儲所述查詢的數據信息時,可以使用insert語句。
例如:在mtl表中查詢「name」為「joe」的數據信息,存儲於tab2表中。var templ=db.mtl.find(name:"joe");while (temp1.hasNext ) db.tab2.1nsert (tempi, next )。在步驟104中,對第一臨時數據緩存表中的數據進行分組查詢計算。執行步驟103之後,MongoDB資料庫中的分片數據,已經存儲於一臺伺服器上的臨時數據緩存表中,在進行所述分組查詢計算時,可以使用Group by語句,達到快速查詢計算的效果。在本實施例的一個優選實施方式中,在步驟102中,將原查詢條件拆分為多個區間的查詢條件之和進行查詢。例如:用戶希望查看2012-1-1至2012-12-31日之間MongoDB下所有分片下廣告投放量的分組匯總結果。可以將該查詢條件拆分為5天為一區間,對每一區間內的數據依次進行查詢。在步驟102中,可能查詢出的數據量非常大,在步驟103中,將這些數據存儲在第一臨時數據表時,可能由於程序的腳本超時、程序腳本可承擔的數據大小、網絡延時、超時等問題會導致程序、網絡出現不穩定或者錯誤。在本實施例的另一個優選實施方式中,在步驟103中,在存儲數據時,可將大批量的數據分成多個小塊後,分別存儲。例如:將100萬條存儲於第一臨時資料庫時,可分成100個小塊(每次I萬條)進行入庫。需要說明的是,對第一臨時資料庫的操作,不僅限於存儲數據的操作,也可進行修改或刪除數據的操作,修改或刪除數據時的分塊與存儲數據時的分塊,原理相同。數據表、日誌表及索引之間的關係示意圖,請參見圖2。如圖2所示,一張數據表200,可以包括一個或組合索引201及數據記錄202。索引201是對數據表200中一列或多列的數據記錄進行排序的一種結構,使用索引201可快速訪問資料庫表中的特定數據記錄202,提高查找效率。另外,還可以為一張數據表200,建立與之對應的日誌表210。日誌表210用來記錄資料庫的工作狀態,例如當用戶添加,查找、修改或刪除資料庫對象的時候,記錄下來詳細的操作步驟及操作時間。建立日誌表210的主要目的是減少資料庫產生臨時緩存表的數據插入或更新的開銷,以及通過這些日誌表210存儲查詢條件可以分析冷熱數據,或者說為區分常用查詢數據、非常用查詢數據。在本實施例的另一個優選實施方式中,在步驟103和步驟104之間,增加步驟103-1 (未不出),建立第一臨時數據緩存表的日誌表。由於第一臨時數據存儲表中存儲的數據量可能相當大,通過第一臨時數據表的日誌表可以對第一臨時數據表中存儲的數據進行管理。通過查詢所述日誌表,可以找到第一臨時數據存儲表中查詢不頻繁的數據,例如查詢頻率小於I次/天的數據。通過查詢所述日誌表,可以找到第一臨時數據存儲表中過時的信息。例如,已經變化的名字或者地址等。
將查找到的上述數據從第一臨時數據存儲表中刪除可以釋放部分第一臨時數據存儲表佔用的內存空間並減少第一臨時數據緩存表中數據存儲或更新的開銷。在本實施例的另一個優選實施方式中,在步驟103-1和步驟104之間,增加步驟103-2 (未示出)。建立第一臨時數據緩存表的一個或組合索引。可根據經驗分析、經常用到查詢條件及日誌表中經常出現的數據等因素綜合考慮,創建一個或組合索引。在本實施例的另一個優選實施方式中,在步驟104之後,增加步驟105 (未示出),對第一臨時數據緩存表中的數據進行分組查詢計算後,將結果存儲於第二臨時數據緩存表中。在步驟104中,使用Group by語言進行分組查詢和計算時,返回的數據相對較小,不能超過I萬條,返回超過該條數將報錯。為了避免Group by查詢時報錯,將Group by分組查詢計算的結果存儲在伺服器上的第二臨時數據緩存表中。優選的,Group by查詢時,將原查詢條件自動拆分為多個區間的數據進行查詢。例如:通過Group by查詢後,每次向第二臨時數據緩存表中存儲、修改或刪除的數據為I萬條。優選的,在建立第二臨時數據存儲表之後,建立第二臨時數據表的日誌表。通過查詢所述日誌表,可以找到第二臨時數據存儲表中查詢不頻繁或過時的數據。將查找到的上述數據從第一臨時數據存儲表中刪除可以釋放部分第一臨時數據存儲表佔用的內存空間並減少第一臨時數據緩存表中數據存儲或更新的開銷。優選的,在對第二臨時數據存儲表進行的操作或維護過程中,可建立第二臨時數據存儲表的一個或組合索引。本實施例的技術方案,通過對臨時緩存表存儲形式的修改,將在多臺伺服器上存儲的數據在一臺伺服器上集中存儲,可以將原來的MapReduce查詢替換為Group by查詢,大大提高了數據的查詢和計算的速度。另外,在本實施例的優選的實施方式中,通過增加日誌表、索引及分塊操作資料庫的方式,在保證查詢結果準確性的前提下,將Group by查詢的性能發揮到最佳。圖3示出了本發明的第二實施例。圖3為根據本發明第二實施例的一種MongoDB集群快速查詢計算裝置結構示意圖。如圖3所示,為本發明實施例所述MongoDB集群快速查詢裝置結構示意圖。MongoDB集群快速查詢計算裝置300包括:確定模塊301、查詢模塊302、記錄模塊303和處理模塊304。其中:確定模塊301用於確定查詢條件,所述查詢條件用於查詢MongoDB所有分片的指定數據表中與指定分組對應的分組匯總信息;查詢模塊302根據確定模塊301確定的查詢條件,查詢位於MongoDB資料庫集群310中指定數據表,獲取所述數據表中與所述分組對應的數據信息;記錄模塊303,用於將所述數據信息存儲在伺服器上的第一臨時數據緩存表中,該伺服器可以是MongoDB集群中的某個伺服器,也可以是另外設定的一臺伺服器;處理模塊304,用於對所述第一臨時數據緩存表中的數據信息進行分組查詢計算。在本實施例中,所述查詢模塊採用find語句查詢所述指定數據表,獲取與所述指定分組對應的數據信息。
在本實施例中,所述處理模塊採用Group by語句對所述第一臨時數據緩存表中的數據信息進行分組查詢計算。在本實施例的優選實施方式中,在所述快速查詢計算裝置300中包括轉存模塊(未示出)用於將所述分組查詢計算的結果存儲在伺服器上第二臨時數據緩存表中。在本實施例的優選實施方式中,所述查詢計算裝置300還包括日誌表建立模塊(未不出),用於建立所述第一數據緩存表或第二數據緩存表的日誌表。在本實施例的優選實施方式中,所述查詢計算裝置還包括索引建立模塊(未示出),用於建立所述第一數據緩存表或第二數據緩存表的一個或組合索引。本實施例的查詢裝置,通過對臨時緩存表存儲形式的修改,將在多臺伺服器上存儲的數據在一臺伺服器上集中存儲,可以將原來的MapReduce查詢替換為Group by查詢,大大提高了數據的查詢和計算的速度。另外,在本實施例的優選的實施方式中,通過增加日誌表、索引及分塊操作資料庫的方式,在保證查詢結果準確性的前提下,將Group by查詢的性能發揮到最佳。注意,上述僅為本發明的較佳實施例及所運用技術原理。本領域技術人員會理解,本發明不限於這裡所述的特定實施例,對本領域技術人員來說能夠進行各種明顯的變化、重新調整和替代而不會脫離本發明的保護範圍。因此,雖然通過以上實施例對本發明進行了較為詳細的說明,但是本發明不僅僅限於以上實施例,在不脫離本發明構思的情況下,還可以包括更多其他等效實施例,而本發明的範圍由所附的權利要求範圍決定。
權利要求
1.一種MongoDB集群快速查詢計算的方法,其特徵在於,所述方法包括: 51、確定查詢條件,所述查詢條件用於查詢MongoDB所有分片的指定數據表中與查詢條件對應的指定分組的分組匯總數據; 52、根據所述查詢條件,查詢所述指定數據表,獲取與所述查詢條件對應的指定分組中的數據; 53、將所述數據存儲在伺服器上的第一臨時數據緩存表中; 54、對所述第一臨時數據緩存表中的數據進行分組查詢並對查詢結果進行計算。
2.根據權利要求1所述的快速查詢計算方法,其特徵在於,在所述步驟S4之後,還包括步驟S5,將步驟S4中所述的分組查詢計算的結果存儲在伺服器上的第二臨時數據緩存表中。
3.根據權利要求1或2所述的快速查詢計算方法,其特徵在於,所述步驟S2中,採用find語句查詢所述指定數據表,獲取與所述查詢條件對應的指定分組中的數據,所述步驟S4中,採用Group by語句對所述第一臨時數據緩存表中的數據進行分組查詢並對查詢結果進行計算。
4.根據權利要求1或2所述的快速查詢計算方法,其特徵在於,在所述步驟S3與步驟S4之間,還包括步驟S3-1,建立所述第一數據緩存表的日誌表。
5.根據權利要求1或2所述的快速查詢計算方法,其特徵在於,在所述步驟S2中,根據所述查詢條件,查詢所述指定數據表包括:將所述查詢條件拆分為多個區間的查詢條件。
6.根據權利要求1或2所述的快速查詢計算方法,其特徵在於,所述步驟S3中,將所述數據信息存儲在伺服器的第一臨時數據緩存表中包括:將需要存儲的數據分為多個小塊的數據分批存儲。
7.根據權利要求2所述的快速查詢計算方法,其特徵在於,在所述步驟S5之後,還包括步驟S6,建立所述第二臨時數據緩存表的日誌表。
8.根據權利要求7所述的快速查詢計算方法,其特徵在於,當所述第一臨時數據緩存表的日誌表或第二臨時數據緩存表的日誌表中的數據的查詢頻率低於預定頻率閾值時,刪除第一臨時數據緩存表或第二臨時數據緩存表中的所述數據。
9.根據權利要求8所述的快速查詢計算方法,其特徵在於,當所述第一臨時數據緩存表的日誌表或第二臨時數據緩存表的日誌表中數據的日期屬性超過過期時間閾值時,刪除第一臨時數據緩存表或第二臨時數據緩存表中的對應的數據信息。
10.一種MongoDB集群的快速查詢計算裝置,其特徵在於,所述裝置包含: 確定模塊,用於確定查詢條件,所述查詢條件用於查詢MongoDB所有分片的指定數據表中與查詢條件對應的指定分組的分組匯總數據; 查詢模塊,用於根據所述查詢條件,查詢所述指定數據表,獲取與所述指定分組對應的數據信息; 記錄模塊,用於將所述數據信息存儲在伺服器上的第一臨時數據緩存表中; 處理模塊,用於對所述第一臨時數據緩存表中的數據信息進行分組查詢並對查詢結果進行計算。
全文摘要
本發明公開了一種MongoDB集群的快速查詢計算的方法及裝置,應用於計算機、通信及相關領域。所述方法包括S1、確定查詢條件,所述查詢條件用於查詢MongoDB所有分片的指定數據表中與查詢條件對應的指定分組的分組匯總數據;S2、根據所述查詢條件,查詢所述指定數據表,獲取與所述查詢條件對應的指定分組中的數據;S3、將所述數據存儲在伺服器上的第一臨時數據緩存表中;S4、對所述第一臨時數據緩存表中的數據進行分組查詢並對查詢結果進行計算。該方法將原來的分片查詢方式改進為一臺伺服器上查詢的方式,在保證查詢結果準確性的前提下,大大提高了查詢速度。
文檔編號G06F17/30GK103207919SQ201310150698
公開日2013年7月17日 申請日期2013年4月26日 優先權日2013年4月26日
發明者茹意, 羅峰, 黃蘇支, 李娜 申請人:北京億贊普網絡技術有限公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀