面向時空數(shù)據(jù)k近鄰查詢的分布式計算平臺及查詢方法
【專利摘要】本發(fā)明公開了一種面向時空數(shù)據(jù)k近鄰查詢的分布式計算平臺及查詢方法,該平臺包括全局索引數(shù)據(jù)管理模塊,其與數(shù)據(jù)接入分發(fā)模塊、時空數(shù)據(jù)索引模塊和查詢并行處理模塊進行交互數(shù)據(jù),用來支撐分布式動態(tài)兩級索引結構;數(shù)據(jù)接入分發(fā)模塊,其用于實時接入連續(xù)到達的時空數(shù)據(jù)和時空數(shù)據(jù)查詢,根據(jù)分布式動態(tài)兩級索引結構將時空數(shù)據(jù)和時空數(shù)據(jù)查詢分別分發(fā)至時空數(shù)據(jù)索引模塊和查詢并行處理模塊;時空數(shù)據(jù)索引模塊,其對相應查詢區(qū)域內的時空數(shù)據(jù)建立索引,實時更新時空數(shù)據(jù)的位置信息,并將更新的時空數(shù)據(jù)位置信息實時發(fā)送至查詢并行處理模塊;查詢并行處理模塊,其根據(jù)更新的時空數(shù)據(jù)位置信息,并行處理接收的時空數(shù)據(jù)查詢,輸出時空數(shù)據(jù)查詢結果。
【專利說明】
面向時空數(shù)據(jù)k近鄰查詢的分布式計算平臺及查詢方法
技術領域
[0001] 本發(fā)明涉及時空數(shù)據(jù)查詢技術,屬于計算機應用領域,尤其涉及一種面向時空數(shù) 據(jù)k近鄰查詢的分布式計算平臺及查詢方法。
【背景技術】
[0002] 時空數(shù)據(jù)(Spatial-Temporal Data)是指具有空間和時間維度的一類數(shù)據(jù),它通 常用來描述某一對象的空間信息隨時間的變化狀態(tài)。近年來,隨著各類移動設備(如手機、 GPS設備)、無線傳感器和電子監(jiān)控設備的大規(guī)模應用以及移動互聯(lián)網的迅猛發(fā)展,社會生 活中許多基于位置服務的應用正在快速地產生大量的時空數(shù)據(jù),而時空數(shù)據(jù)查詢也在智能 交通、電子商務、社交網絡等領域產生越來越重要的影響。近年來,時空數(shù)據(jù)查詢受到國內 外學者的廣泛關注,尤其是大數(shù)據(jù)背景下的海量時空數(shù)據(jù)查詢成為一個新興的研究熱點。 當前許多領域的時空數(shù)據(jù)規(guī)模呈"爆炸"式增長,傳統(tǒng)的單機計算模式受到計算和存儲能力 的限制,已經難以應對大規(guī)模時空數(shù)據(jù)以及時空數(shù)據(jù)上的并發(fā)查詢。
[0003] 目前,國內外學者在時空數(shù)據(jù)查詢領域已經做了很多工作,但是對于分布式環(huán)境 下的海量時空數(shù)據(jù)k近鄰查詢的研究還處于起步階段,該問題仍然面臨巨大的挑戰(zhàn)。具體表 現(xiàn)如下:
[0004] (1)缺乏能夠支持海量時空數(shù)據(jù)大規(guī)模并發(fā)k近鄰查詢的分布式計算平臺。
[0005] (2)缺乏支持海量時空數(shù)據(jù)頻繁更新和并行k近鄰查詢算法的分布式索引結構,導 致對海量時空數(shù)據(jù)分布式存儲和維護的支持性較差。
[0006] (3)現(xiàn)有的時空數(shù)據(jù)查詢方法大多數(shù)都是基于單機計算環(huán)境的集中式處理方法, 難以直接部署到分布式計算平臺之上,缺乏有效的分布式k近鄰查詢方法。
【發(fā)明內容】
[0007] 本發(fā)明的目的就是為了解決上述問題,提供一種面向時空數(shù)據(jù)k近鄰查詢的分布 式計算平臺及查詢方法。本發(fā)明具有既能夠對持續(xù)變化的海量時空數(shù)據(jù)進行實時存儲和維 護,又能夠對大規(guī)模并發(fā)k近鄰查詢進行實時響應的優(yōu)點。
[0008] 為了實現(xiàn)上述目的,本發(fā)明采用如下技術方案:
[0009] -種面向時空數(shù)據(jù)k近鄰查詢的分布式計算平臺,包括:
[0010] 數(shù)據(jù)接入分發(fā)模塊,其用于實時接入連續(xù)到達的時空數(shù)據(jù)和時空數(shù)據(jù)查詢,根據(jù) 分布式動態(tài)兩級索引結構DTLI將時空數(shù)據(jù)和時空數(shù)據(jù)查詢分別分發(fā)至數(shù)據(jù)緩存模塊;
[0011] 分布式動態(tài)兩級索引結構DTLI包括第一級條狀索引和基于條狀索引的第二級網 格索引,所述第一級條狀索引由對時空數(shù)據(jù)沿x軸方向進行劃分而構成;所述第二級網格索 引是對每一個條狀索引的時空數(shù)據(jù)沿y軸進行劃分而構成;
[0012] 數(shù)據(jù)緩存模塊,其用來緩存數(shù)據(jù)接入分發(fā)模塊發(fā)送的時空數(shù)據(jù)和時空數(shù)據(jù)查詢;
[0013] 時空數(shù)據(jù)索引模塊對各個條狀索引區(qū)域內的時空數(shù)據(jù)分別建立索引,并對索引數(shù) 據(jù)進行實時更新;所述時空數(shù)據(jù)索引模塊還實時監(jiān)聽所述數(shù)據(jù)緩存模塊到達的時空數(shù)據(jù)和 時空數(shù)據(jù)查詢,然后獲取自身應處理的時空數(shù)據(jù)和查詢;
[0014] 全局索引數(shù)據(jù)管理模塊,維護一份分布式動態(tài)兩級索引結構的條狀索引的邊界信 息作為全局索引數(shù)據(jù),并與數(shù)據(jù)接入分發(fā)模塊、時空數(shù)據(jù)索引模塊和查詢并行處理模塊進 行索引數(shù)據(jù)交互;
[0015] 查詢并行處理模塊,對時空數(shù)據(jù)k近鄰查詢進行分布式處理。
[0016] 所述數(shù)據(jù)接入分發(fā)模塊,由若干個分布在不同物理計算節(jié)點上的數(shù)據(jù)接入算子組 成,每個數(shù)據(jù)接入算子為一個邏輯計算單元。
[0017] 所述時空數(shù)據(jù)索引模塊,由若干個分布在不同物理計算節(jié)點上的數(shù)據(jù)索引算子組 成,每個數(shù)據(jù)接入算子為一個邏輯計算單元。
[0018] 所述查詢并行處理模塊,由若干個分布在不同物理計算節(jié)點上的數(shù)據(jù)查詢算子組 成,每個數(shù)據(jù)查詢算子為一個邏輯計算單元。
[0019] 所述各個算子之間通過發(fā)送和接收事件的形式來實現(xiàn)數(shù)據(jù)交互。
[0020]所述事件是一個〈key, value〉數(shù)據(jù)對,每個算子將根據(jù)事件的名稱和key值指定其 所接受的事件。
[0021] -種基于分布式計算平臺的時空數(shù)據(jù)分布式k近鄰查詢方法,包括以下步驟:
[0022] 步驟(1):構建上述海量時空數(shù)據(jù)k近鄰查詢的分布式計算平臺;
[0023] 步驟(2):在分布式計算平臺上部署分布式動態(tài)兩級索引結構DTLI;
[0024]步驟(3):基于分布式動態(tài)兩級索引結構DTLI,對連續(xù)到達的海量時空數(shù)據(jù)進行處 理;
[0025]步驟(4):基于DTLI索引結構,將時空數(shù)據(jù)分布式k近鄰查詢算法,即PSK算法部署 到分布式計算平臺上,實現(xiàn)PSK算法的并行化,進而實現(xiàn)對海量時空數(shù)據(jù)k近鄰查詢的并行 處理。
[0026]所述步驟(2)的具體過程,包括:
[0027]步驟(2.1):數(shù)據(jù)接入分發(fā)模塊中的每一個數(shù)據(jù)接入算子維護一份DTLI的條狀索 引的邊界信息,全局索引數(shù)據(jù)管理模塊也維護一份DTLI的條狀索引的邊界信息,但并不記 錄任何時空數(shù)據(jù)的位置信息;
[0028] 步驟(2.2):時空數(shù)據(jù)索引模塊中的每個數(shù)據(jù)索引算子負責維護一個條狀索引,并 對該條狀索引內的時空數(shù)據(jù)進行存儲和更新;每個數(shù)據(jù)索引算子在自身維護的條狀索引之 上構建第二級網格索引,從而實現(xiàn)將分布式動態(tài)兩級索引結構部署在分布式計算平臺上。
[0029] 在所述步驟(2.2)中,若出現(xiàn)時空數(shù)據(jù)索引模塊中的數(shù)據(jù)索引算子負責維護的一 個條狀索引發(fā)生分裂或者合并,該數(shù)據(jù)索引算子實時地將發(fā)生變化的條狀索引的邊界信息 寫入到全局索引數(shù)據(jù)管理模塊。
[0030] 數(shù)據(jù)接入分發(fā)模塊中的數(shù)據(jù)接入算子通過"監(jiān)聽"操作啟動一個監(jiān)聽進程對全局 索引數(shù)據(jù)管理模塊的數(shù)據(jù)進行持續(xù)監(jiān)聽。當監(jiān)聽進程一旦發(fā)現(xiàn)全局索引數(shù)據(jù)管理模塊的條 狀索引發(fā)生了變化,數(shù)據(jù)接入算子則實時地獲取全局索引數(shù)據(jù)管理模塊更新的條狀索引來 覆蓋本地的條狀索引對應的部分。
[0031] 所述步驟(3)的具體過程,包括:
[0032] 步驟(3.1):數(shù)據(jù)接入分發(fā)模塊中的每一個數(shù)據(jù)接入算子并行地接入到達的時空 數(shù)據(jù),并根據(jù)DTLI的條狀索引為時空數(shù)據(jù)分配相應的數(shù)據(jù)索引算子。
[0033]步驟(3.2):數(shù)據(jù)接入分發(fā)模塊中的數(shù)據(jù)接入算子將時空數(shù)據(jù)發(fā)送至數(shù)據(jù)緩存模 塊,數(shù)據(jù)索引模塊中的每個數(shù)據(jù)索引算子持續(xù)監(jiān)聽數(shù)據(jù)緩存模塊中到達的時空數(shù)據(jù),并從 數(shù)據(jù)緩存模塊中實時獲取自身應處理的時空數(shù)據(jù)。
[0034]在所述步驟(4)中,采用PSK算法并行處理時空數(shù)據(jù)k近鄰查詢。
[0035]其中,本發(fā)明的時空數(shù)據(jù)是指二維平面空間內的移動對象(如人、車),這些移動對 象的位置連續(xù)變化,并頻繁地向數(shù)據(jù)中心報告自己的位置坐標。
[0036]本發(fā)明的有益效果:
[0037] (1)本發(fā)明采用的面向海量時空數(shù)據(jù)k近鄰查詢的分布式計算平臺具備全局索引 數(shù)據(jù)管理模塊和數(shù)據(jù)緩存模塊,能夠很好地支撐本發(fā)明所提出的分布式動態(tài)兩級索引結 構,滿足時空數(shù)據(jù)k近鄰查詢對于全局索引數(shù)據(jù)的分布式訪問需求,避免不同算子在處理時 空數(shù)據(jù)k近鄰查詢時出現(xiàn)數(shù)據(jù)錯發(fā)問題,為海量時空數(shù)據(jù)大規(guī)模并發(fā)k近鄰查詢提供了通用 的分布式計算平臺;
[0038] (2)本發(fā)明所提出的分布式動態(tài)兩級索引結構能夠對持續(xù)變化的海量時空數(shù)據(jù)進 行實時存儲和維護;此外,該索引結構具備良好的可擴展性,在分布式環(huán)境下,僅通過增加 硬件資源就可以實現(xiàn)索引結構時空數(shù)據(jù)處理能力的線性增長;最后,該索引結構能夠很好 地支持PSK查詢算法,在很大程度上加速了PSK查詢算法的收斂;
[0039] (3)本發(fā)明利用PSK算法來實現(xiàn)對時空數(shù)據(jù)上的k近鄰查詢的實時處理,減少了分 布式環(huán)境下處理時空數(shù)據(jù)k近鄰查詢所產生的物理計算節(jié)點之間的通信代價,能夠對大規(guī) 模并發(fā)k近鄰查詢進行實時響應,查詢效率顯著提高。
【附圖說明】
[0040]圖1為海量時空數(shù)據(jù)分布式動態(tài)兩級索引結構(DTLI)示意圖;
[00411圖2為DTLI條狀索引分裂示意圖;
[0042]圖3為海量時空數(shù)據(jù)查詢的分布式計算平臺架構圖;
[0043]圖4為PSK算法演示圖;
[0044]圖5為基于分布式動態(tài)兩級索引結構處理時空數(shù)據(jù)⑴流程圖;
[0045]圖6為PSK算法并行化架構圖。
【具體實施方式】
[0046] 在本發(fā)明中,面向海量時空數(shù)據(jù)k近鄰查詢的分布式計算平臺、分布式動態(tài)兩級索 引結構和支持海量時空數(shù)據(jù)分布式k近鄰查詢的PSK算法三者緊密聯(lián)系。下面結合附圖,詳 細闡述面向海量時空數(shù)據(jù)k近鄰查詢的分布式計算平臺、分布式動態(tài)兩級索引結構和PSK算 法三者之間的關系。
[0047] 如圖3所示,為本發(fā)明的面向海量時空數(shù)據(jù)查詢的分布式計算平臺。其具體結構組 成如下:
[0048] 本發(fā)明的面向時空數(shù)據(jù)k近鄰查詢的分布式計算平臺,包括:
[0049] 數(shù)據(jù)接入分發(fā)模塊,其用于實時接入連續(xù)到達的時空數(shù)據(jù)和時空數(shù)據(jù)查詢,根據(jù) 分布式動態(tài)兩級索引結構,將時空數(shù)據(jù)和時空數(shù)據(jù)查詢分別分發(fā)至時空數(shù)據(jù)索引模塊和查 詢并行處理模塊;
[0050] 時空數(shù)據(jù)索引模塊,是對其所負責的相應查詢區(qū)域內的時空數(shù)據(jù)建立索弓丨,并實 時維護更新時空數(shù)據(jù)的索引結構;
[0051] 數(shù)據(jù)緩存模塊,為數(shù)據(jù)接入分發(fā)模塊和時空數(shù)據(jù)索引模塊的數(shù)據(jù)交互提供數(shù)據(jù)緩 存區(qū),用于解決"數(shù)據(jù)接入算子"和"數(shù)據(jù)索引算子"之間數(shù)據(jù)異步更新所導致的數(shù)據(jù)錯發(fā)問 題;
[0052]全局索引數(shù)據(jù)管理模塊,負責對全局索引數(shù)據(jù)的實時更新和維護,并其提供"讀數(shù) 據(jù)"和"寫數(shù)據(jù)"兩種數(shù)據(jù)操作方法,來分別與時空數(shù)據(jù)索引模塊、查詢并行處理模塊以及查 詢計算模塊之間進行索引數(shù)據(jù)交互;
[0053]所述查詢計算模塊,根據(jù)PSK查詢算法處理時空數(shù)據(jù)k近鄰查詢請求;
[0054]具體地,數(shù)據(jù)接入分發(fā)模塊是由多個分布在不同物理計算節(jié)點上的數(shù)據(jù)接入算子 Entrance Actor組成的,每個數(shù)據(jù)接入算子為一個邏輯計算單元。該模塊的主要任務是實 時接入連續(xù)到達的時空數(shù)據(jù)和用戶查詢,并根據(jù)分布式動態(tài)兩級索引結構,為時空數(shù)據(jù)和 查詢分配相應的數(shù)據(jù)索引算子Index Actor。
[0055]具體地,時空數(shù)據(jù)索引模塊,由若干個分布在不同物理計算節(jié)點上的數(shù)據(jù)索引算 子Index Actor組成,每個數(shù)據(jù)索引算子為一個邏輯計算單元。每個Index Actor負責整個 查詢區(qū)域的一小部分區(qū)域。每個Index Actor的功能有兩個:(1)對該部分區(qū)域內的時空數(shù) 據(jù)建立索引,并對索引進行實時更新。(2)根據(jù)時空數(shù)據(jù)k近鄰查詢算法處理由Entrance Ac tor分發(fā)的時空數(shù)據(jù)k近鄰查詢。每個用戶查詢通常由多個Index Ac tor并行處理,每個 Index Actor根據(jù)自身所維護的時空數(shù)據(jù)產生該查詢的部分中間結果。
[0056]具體地,查詢并行處理模塊,由若干個分布在不同物理計算節(jié)點上的數(shù)據(jù)查詢算 子組成,每個數(shù)據(jù)查詢算子為一個邏輯計算單元。
[0057] 每個時空數(shù)據(jù)k近鄰查詢由唯一的一個數(shù)據(jù)查詢算子Search Actor負責,一個 Search Actor根據(jù)自身負載同時處理多個時空數(shù)據(jù)k近鄰查詢。每個Search Actor能夠命 令相應的Index Actor對其負責的查詢進行處理。Search Actor通過發(fā)送和接收事件的形 式實現(xiàn)與Index Actor之間的數(shù)據(jù)交互。
[0058] 分布式環(huán)境下的時空數(shù)據(jù)索引結構是一種全局索引數(shù)據(jù),既有若干計算單元從中 讀取數(shù)據(jù),也有若干計算單元向其寫入數(shù)據(jù)。因此,全局索引數(shù)據(jù)管理模塊在該架構中有重 要作用。該模塊的主要任務是維護一份全局索引數(shù)據(jù)(即DTLI的條狀索引),并提供兩種數(shù) 據(jù)操作方法:put和get。不同物理節(jié)點的計算單元能夠通過get和put操作對該模塊的數(shù)據(jù) 進行讀寫,從而保證全局索引數(shù)據(jù)在不同計算單元之間的及時更新。
[0059] 進一步地,本發(fā)明的分布式計算平臺還包括:數(shù)據(jù)緩存模塊,用來緩存數(shù)據(jù)接入分 發(fā)模塊發(fā)送至所述時空數(shù)據(jù)索引模塊的數(shù)據(jù)。引入數(shù)據(jù)緩存模塊,主要用于解決Entrance Actor和Index Actor之間索引數(shù)據(jù)異步更新所導致的數(shù)據(jù)錯發(fā)問題。實際應用中,Index Actor中條狀索引的更新總是早于Entrance Actor中條狀索引的更新,此時,同一條狀索引 在Index Actor和Entrance Actor中的版本可能不一致,這種情況下,Entrance Actor分發(fā) 至Index Actor的數(shù)據(jù)和查詢將出現(xiàn)錯誤。為此,該發(fā)明引入數(shù)據(jù)緩存模塊,令每個 Entrance Actor不再將時空數(shù)據(jù)和時空數(shù)據(jù)查詢直接發(fā)送至Index Actor,而是發(fā)送至數(shù) 據(jù)緩存模塊,每個Index Actor對數(shù)據(jù)緩存模塊中的數(shù)據(jù)和查詢進行持續(xù)監(jiān)聽從而獲得自 身應處理的數(shù)據(jù)和查詢。
[0060] 本發(fā)明采用全局索引數(shù)據(jù)管理模塊,其提供"讀數(shù)據(jù)"和"寫數(shù)據(jù)"兩種數(shù)據(jù)操作方 法,用于與數(shù)據(jù)接入分發(fā)模塊、時空數(shù)據(jù)索引模塊和查詢并行處理模塊進行索引數(shù)據(jù)交互, 用來支撐分布式動態(tài)兩級索引結構,最終構建出面向海量時空數(shù)據(jù)k近鄰查詢的分布式計 算平臺,該分布式平臺采用并行計算模式能夠支持海量時空數(shù)據(jù)大規(guī)模k近鄰查詢。
[0061] 本發(fā)明所應用的時空數(shù)據(jù)索引結構是針對海量時空數(shù)據(jù)分布式k近鄰查詢而設計 的分布式動態(tài)兩級索引結構(Distributed Two-Levels Index,DTLI),如圖1所示。
[0062] 本發(fā)明的分布式動態(tài)兩級索引結構(DTLI)包含兩部分:(1)條狀索引和網格索引 的邊界信息;(2)被索引的移動對象的位置信息。索引的邊界信息相對較小,而移動對象的 位置信息規(guī)模巨大。隨著移動對象位置的頻繁變化,兩種信息都將頻繁更新。
[0063] 該索引結構首先對全局時空數(shù)據(jù)沿x軸方向進行劃分,構建第一級條狀索引,條狀 索引與y軸方向平行。對于任意一個條狀索引Sl,通過上界和下界確定自身負責的區(qū)域。條 狀索引Si根據(jù)移動對象的位置坐標為自身區(qū)域內的移動對象建立索引。
[0064]每一個條狀索引具有以下特性:
[0065] (1)每個條狀索中引移動對象的數(shù)目總是在一定的范圍之內。假設一個條狀索引 內移動對象的數(shù)量為m,那么l<m<h,其中,1和h分別表示單個條狀索引內移動對象數(shù)量的 下限和上限。
[0066] (2)如果一個條狀索引的移動對象數(shù)量大于h,那么該條狀索引會沿y軸方向分裂 成兩個小的條狀索引,使每個條狀索引的移動對象數(shù)量小于h,圖2是一個條狀索引分裂操 作的示意圖;
[0067] (3)如果一個條狀索引的移動對象數(shù)量小于1,那么該條狀索引就會與相鄰的條狀 索引合并,使合并之后的條狀索引的移動對象數(shù)量大于1。
[0068] DTLI第二級索引是基于條狀索引的網格索引。網格索引是對每一個條狀索引的移 動對象沿y軸進行劃分,這樣每個條狀索就被劃分成多個網格,每個網格對自身區(qū)域內的移 動對象建立索引。圖1中,條狀索引Si被劃分成多個網格索引(gl,g2,…,gn)。
[0069] 網格索引和條狀索引具有相似的特性:
[0070] (1)每個網格索引的移動對象的數(shù)量總是在一個范圍之內;
[0071] (2)每個網格可以在條狀索引范圍之內與相鄰的網格進行分裂或者合并來滿足第 一個特性。
[0072] 本發(fā)明的分布式計算平臺部署了分布式動態(tài)兩級索引結構DTLI,結合圖1和圖3, 部署的具體過程如下:
[0073] 步驟(1):將DTLI部署到本發(fā)明所述的分布式計算平臺上時,每一個Entrance Actor保存一份DTLI第一級條狀索引的邊界信息,但并不記錄任何移動對象的位置信息。 Entrance Actor的任務是為到達的移動對象分配Index Actor并將其發(fā)送至數(shù)據(jù)緩存模 塊。具體來說,對于一個新到達的移動對象〇i(xi,yi),Entrance Actor為其計算對應的條狀 索引以{1比咖},然后以四元組〈〇1,(^71),以,{11^,咖}>的形式發(fā)送至數(shù)據(jù)緩存模塊。由 于條狀索引邊界的數(shù)據(jù)量很小,這樣能夠保證每一個Entrance Actor所維護的數(shù)據(jù)都是輕 量級的,并能夠實時分發(fā)連續(xù)到達的移動對象,從而避免Entrance Actor出現(xiàn)瓶頸。
[0074]步驟(2):每個Index Actor負責維護一個DTLI的條狀索引,對該條狀索引的移動 對象的位置進行存儲和更新。此外,每個Index Actor在自身維護的條狀索引之上建立二級 網格索引。根據(jù)DTLI動態(tài)調整的特性,DTLI的條狀索引會發(fā)生分裂或者合并,對應的Index Actor也會分裂或者合并。
[0075]步驟(3):本發(fā)明所述的全局索引數(shù)據(jù)管理模塊,其維護一份DTLI的條狀索引的邊 界信息。如果某個Index Actor發(fā)生分裂或者合并,該Index Actor實時地將發(fā)生變化的條 狀索引的邊界信息寫入到全局索引數(shù)據(jù)管理模塊。每一個Entrance Actor能夠通過"監(jiān)聽" 操作啟動一個監(jiān)聽進程對全局索引數(shù)據(jù)管理模塊的數(shù)據(jù)進行持續(xù)監(jiān)聽。當監(jiān)聽進程一旦發(fā) 現(xiàn)全局索引數(shù)據(jù)管理模塊的條狀索引發(fā)生了變化,Entrance Actor則實時地調用get方法 獲取全局索引數(shù)據(jù)管理模塊更新的條狀索引來覆蓋本地的條狀索引對應的部分。在處理k 近鄰查詢時,一些Search Actor也需要用到全局的條狀索引信息,屆時也將訪問全局索引 數(shù)據(jù)管理模塊獲取條狀索引。該方案實現(xiàn)了Index Actor與其他處理單元之間全局索引數(shù) 據(jù)的同步。
[0076]步驟(4):本發(fā)明所述的數(shù)據(jù)緩存模塊用來維護Entrance Actor發(fā)送至Index Actor的數(shù)據(jù)。數(shù)據(jù)緩存模塊為每個Index Actor分配一個隊列,每個Index Actor會持續(xù)監(jiān) 聽數(shù)據(jù)緩存模塊隊列中到達的時空數(shù)據(jù)。令負責維護條狀索引&的Index Actor為I、,所對 應的隊列為Gb。對于新到達隊列^的時空數(shù)據(jù)〇1,1、監(jiān)聽到〈〇1,& 1,71),以,{1屮,1!屮}>后, 判斷〇1是否屬于自身維護的條狀索引。如果屬于,則I、將從數(shù)據(jù)緩存模塊中讀取該對象并 將該對象從數(shù)據(jù)緩存模塊刪除。如果I、發(fā)現(xiàn) 〇1不屬于自身維護的條狀索引,則將元組〈〇1, (Xi,yi),Sj,{lbj,ub j}>中的Sj設置為Suspend,表示該移動對象為待處理狀態(tài)。數(shù)據(jù)緩存模 塊采用廣播方式,將待處理狀態(tài)的移動對象發(fā)送至其他所有Index Actor的隊列。如果某個 Index Actor監(jiān)聽到含有Suspend標記的移動對象后,首先判斷該對象是否屬于自身維護的 條狀索引。如果屬于,則處理該對象;否則,則將該移動對象丟棄。
[0077]以上是DTLI索引結構在分布式計算平臺上的整個部署方案,該方案描述了一個能 夠支持海量時空數(shù)據(jù)實時存儲和維護的可擴展的分布式動態(tài)索引結構。圖6描述了該分布 式索引架構處理移動對象的流程圖。
[0078]本發(fā)明所述海量時空數(shù)據(jù)分布式k近鄰查詢方法(PSK算法)的具體步驟如下:
[0079] 輸入:k近鄰查詢qj(Xj,yj);當前所有移動對象的位置信息;
[0080] 輸出:與查詢點^的距離最近的k個移動對象;
[0081] 步驟(1):對于接收的k近鄰查詢qj(Xj,^),首先根據(jù)DTLI的條狀索引查找包含 qj 以及距離W最近的(k-1)個條狀索引,生成候選條狀索引集合V。對于任意一個條狀索引Sl, 它與查詢qj的距離定義為
[0082]步驟(2):從集合V的每個候選條狀索引中選擇距離查詢點^最近的h個移動對象, 其中h=min{k,9}。
[0083] 步驟(3):從h*k個移動對象中選擇距離查詢qj最近的k個對象,并對k個對象根據(jù) 與W的距離進行排序,然后計算得到一個以W為圓心,以W和第k個對象距離為半徑的圓&。 圓Ck包含了 qj的k個近鄰。
[0084]步驟(4):計算得到與圓Ck相交的條狀索引集合U,令集合W = U_V。集合W的條狀索 引是指可能含有查詢W的k近鄰但是不屬于集合V的條狀索引。
[0085]步驟(5):負責集合W中的每個條狀索查找自身區(qū)域內屬于圓Ck并且與^距離最近 的k個對象。如果符合條件的移動對象的數(shù)目小于k,則選擇所有符合條件的對象。
[0086]步驟(6):將從集合W中的條狀索引獲取的對象與之前確定圓Ck的k個對象進行比 較,得到與W最近的k個移動對象,即為^的k近鄰。
[0087] PSK算法示例:在圖4(a)中,給定一個查詢qj(3_NN),PSK算法首先確定候選條狀索 弓丨集合V = {Si,Si+i,si+2};在圖4(b)中,PSK算法根據(jù)候選條狀索引內移動對象(01,03,06)的 位置,進一步確定圓&。根據(jù)PSK算法步驟4可知,條狀索引集合W包含條狀索引s 1+3。然后, PSK算法基于Si+3的網格索引,找到自身區(qū)域內被圓Ck覆蓋的移動對象〇7。最后,PSK算法從移 動對象集合{ 〇1,〇3,06,07 }中找到qj的3個近鄰為{ 01,06,07 }。
[0088] 將PSK算法部署到本發(fā)明的分布式計算平臺后,整個分布式計算平臺并行處理時 空數(shù)據(jù)k近鄰查詢的過程如下:
[0089] 步驟(1): "數(shù)據(jù)接入算子"首先根據(jù)PSK查詢算法的步驟1計算得到候選條狀索引 集合U,S2,…,Sk},然后將w及其候選條狀索引的標識(如,~>,1彡6彡1〇發(fā)送至數(shù)據(jù)緩存 模塊。
[0090] 步驟(2):負責候選條狀索引&的"數(shù)據(jù)索引算子"監(jiān)聽到查詢^后,首先判斷當前 本地條狀索引中&的邊界與接收到&的邊界是否一致。如果一致則進行下一步;否則,將〈 qj,。發(fā)送至其他所有"數(shù)據(jù)索引算子",每個"數(shù)據(jù)索引算子"通過比較條狀索引的邊界 從而判斷自己是否應處理查詢qj。
[0091]步驟(3):負責處理查詢^的"數(shù)據(jù)索引算子"根據(jù)DTLI的網格索引,快速得到距離 查詢qj最近的h個移動對象,h值的確定見PSK算法步驟2。
[0092]步驟(4):負責處理查詢^的各個"數(shù)據(jù)索引算子"將距離^最近的h個移動對象發(fā) 送至同一個"數(shù)據(jù)查詢算子" S、。S、根據(jù)PSK算法的步驟3,基于接收到的由"數(shù)據(jù)索引算子" 發(fā)送的移動對象計算得到圓&。
[0093]步驟(5) :S~從全局索引數(shù)據(jù)管理模塊獲取當前DTLI的條狀索引的邊界信息,然 后計算得到所有與圓&相交的條狀索引,從而得到PSK算法步驟4中的條狀索引集合W。
[0094] 步驟(6): SA」將查詢^以及圓Ck發(fā)送至集合W中條狀索引所對應的"數(shù)據(jù)索引算 子",每個"數(shù)據(jù)索引算子"找到自身區(qū)域內被圓&覆蓋且距離查詢w最近的k個移動對象。并 將這些對象發(fā)送至S、。如果符合條件的移動對象數(shù)量小于k,則將所有符合條件的移動對 象發(fā)送至SAj。
[0095] 步驟(7) :S~將新收到的移動對象與之前確定圓Ck的k個對象進行比較,從而得到 查詢qj的k近鄰。
[0096] 本發(fā)明所提出的面向海量時空數(shù)據(jù)k近鄰查詢的分布式解決方案,減少了分布式 環(huán)境下處理時空數(shù)據(jù)k近鄰查詢所需的物理計算節(jié)點之間的通信代價,能夠對大規(guī)模并發(fā)k 近鄰查詢進行實時響應,顯著提高了查詢效率。
[0097]上述雖然結合附圖對本發(fā)明的【具體實施方式】進行了描述,但并非對本發(fā)明保護范 圍的限制,所屬領域技術人員應該明白,在本發(fā)明的技術方案的基礎上,本領域技術人員不 需要付出創(chuàng)造性勞動即可做出的各種修改或變形仍在本發(fā)明的保護范圍以內。
【主權項】
1. 一種面向時空數(shù)據(jù)k近鄰查詢的分布式計算平臺,其特征在于,包括: 數(shù)據(jù)接入分發(fā)模塊,其用于實時接入連續(xù)到達的時空數(shù)據(jù)和時空數(shù)據(jù)查詢,根據(jù)分布 式動態(tài)兩級索引結構將時空數(shù)據(jù)和時空數(shù)據(jù)查詢分別分發(fā)至數(shù)據(jù)緩存模塊; 分布式動態(tài)兩級索引結構包括第一級條狀索引和基于條狀索引的第二級網格索引,所 述第一級條狀索引由對時空數(shù)據(jù)沿X軸方向進行劃分而構成;所述第二級網格索引是對每 一個條狀索引的時空數(shù)據(jù)沿y軸進行劃分而構成; 數(shù)據(jù)緩存模塊,其用來緩存數(shù)據(jù)接入分發(fā)模塊發(fā)送的時空數(shù)據(jù)和時空數(shù)據(jù)查詢; 時空數(shù)據(jù)索引模塊對各個條狀索引區(qū)域內的時空數(shù)據(jù)分別建立索引,并實時更新時空 數(shù)據(jù)的位置信息;所述時空數(shù)據(jù)索引模塊還實時監(jiān)聽所述數(shù)據(jù)緩存模塊到達的時空數(shù)據(jù)和 時空數(shù)據(jù)查詢,然后獲取自身處理的時空數(shù)據(jù)和查詢; 全局索引數(shù)據(jù)管理模塊,維護一份分布式動態(tài)兩級索引結構的條狀索引的邊界信息作 為全局索引數(shù)據(jù),并與數(shù)據(jù)接入分發(fā)模塊、時空數(shù)據(jù)索引模塊和查詢并行處理模塊進行索 引數(shù)據(jù)交互; 查詢并行處理模塊,對時空數(shù)據(jù)k近鄰查詢請求進行分布式處理。2. 如權利要求1所述的一種面向時空數(shù)據(jù)k近鄰查詢的分布式計算平臺,其特征在于, 所述數(shù)據(jù)接入分發(fā)模塊,由若干個分布在不同物理計算節(jié)點上的數(shù)據(jù)接入算子組成,每個 數(shù)據(jù)接入算子為一個邏輯計算單元。3. 如權利要求1所述的一種面向時空數(shù)據(jù)k近鄰查詢的分布式計算平臺,其特征在于, 所述時空數(shù)據(jù)索引模塊,由若干個分布在不同物理計算節(jié)點上的數(shù)據(jù)索引算子組成,每個 數(shù)據(jù)接入算子為一個邏輯計算單元。4. 如權利要求1所述的一種面向時空數(shù)據(jù)k近鄰查詢的分布式計算平臺,其特征在于, 所述查詢并行處理模塊,由若干個分布在不同物理計算節(jié)點上的數(shù)據(jù)查詢算子組成,每個 數(shù)據(jù)查詢算子為一個邏輯計算單元。5. 如權利要求4所述的一種面向時空數(shù)據(jù)k近鄰查詢的分布式計算平臺,其特征在于, 所述算子之間通過發(fā)送和接收事件的形式來實現(xiàn)數(shù)據(jù)交互。6. 如權利要求5所述的一種面向時空數(shù)據(jù)k近鄰查詢的分布式計算平臺,其特征在于, 所述事件是一個〈key,value〉數(shù)據(jù)對,每個算子將根據(jù)事件的名稱和key值指定其所接受的 事件。7. -種基于如權利要求1-6任一所述的分布式計算平臺的時空數(shù)據(jù)分布式k近鄰查詢 方法,其特征在于,包括以下步驟: 步驟(1):構建上述海量時空數(shù)據(jù)k近鄰查詢的分布式計算平臺; 步驟(2):在分布式計算平臺上部署分布式動態(tài)兩級索引結構DTLI; 步驟(3):基于分布式動態(tài)兩級索引結構DTLI,對連續(xù)到達的海量時空數(shù)據(jù)進行處理; 步驟(4):基于分布式索引結構,將時空數(shù)據(jù)分布式k近鄰查詢算法,即PSK算法部署到 分布式計算平臺上,實現(xiàn)PSK算法的并行化,進而實現(xiàn)對海量時空數(shù)據(jù)k近鄰查詢的并行處 理。8. 如權利要求7所述的查詢方法,其特征在于,所述步驟(2)的具體過程,包括: 步驟(2.1):數(shù)據(jù)接入分發(fā)模塊中的每一個數(shù)據(jù)接入算子維護一份DTLI的條狀索引的 邊界信息,全局索引數(shù)據(jù)管理模塊也維護一份DTLI的條狀索引的邊界信息,但并不記錄任 何時空數(shù)據(jù)的位置信息; 步驟(2.2):時空數(shù)據(jù)索引模塊中的每個數(shù)據(jù)索引算子負責維護一個條狀索引,并對該 條狀索引內的時空數(shù)據(jù)的位置進行存儲和更新;每個數(shù)據(jù)索引算子在自身維護的條狀索引 之上構建第二級網格索引,從而實現(xiàn)將分布式動態(tài)兩級索引結構部署在分布式計算平臺 上。9. 如權利要求8所述的查詢方法,其特征在于,在所述步驟(2.2)中,若出現(xiàn)時空數(shù)據(jù)索 引模塊中的數(shù)據(jù)索引算子負責維護的一個條狀索引發(fā)生分裂或者合并,該數(shù)據(jù)索引算子實 時地將發(fā)生變化的條狀索引的邊界信息寫入到全局索引數(shù)據(jù)管理模塊。10. 如權利要求7所述的查詢方法,其特征在于,所述步驟(3)的具體過程,包括: 步驟(3.1):數(shù)據(jù)接入分發(fā)模塊中的每一個數(shù)據(jù)接入算子并行地接入到達的時空數(shù)據(jù), 并根據(jù)DTLI的條狀索引為時空數(shù)據(jù)分配相應的數(shù)據(jù)索引算子。 步驟(3.2):數(shù)據(jù)接入分發(fā)模塊中的數(shù)據(jù)接入算子將時空數(shù)據(jù)發(fā)送至數(shù)據(jù)緩存模塊,數(shù) 據(jù)索引模塊中的每個數(shù)據(jù)索引算子持續(xù)監(jiān)聽數(shù)據(jù)緩存模塊中到達的時空數(shù)據(jù),從數(shù)據(jù)緩存 模塊中實時獲取自身應處理的時空數(shù)據(jù)。
【文檔編號】G06F17/30GK105893605SQ201610259255
【公開日】2016年8月24日
【申請日】2016年4月25日
【發(fā)明人】于自強, 王棟, 韓士元, 陳月輝, 馬坤
【申請人】濟南大學