趙林斌 邵戰強 魏 威
(渭南市互聯網信息辦公室,陜西 渭南 714000)
渭南智慧城市大數據基礎平臺的建設完成,解決了目前渭南市大部分政府部門各異構系統之間的數據整合,實現渭南市各部門原有各業務系統數據級集成,通過平臺內部數據驅動引擎,實現不同單位或系統間的信息整合、交換、共享和業務協同與查詢,為各部門提供統一、標準的服務接口,保證異構數據庫之間的數據交換與共享。但是由于平臺接入的部門越來越多,不同部門間數據存在著交叉關聯,導致業務量與數據量激增,最終導致信息搜索效率下降。為了保證平臺的高速運轉與用戶體驗,應構建一種高效的查詢體系,解決平臺海量數據的查詢速率下降的問題。
因此,本文提出一種基于二分法的海量數據快速查詢技術。再對搜索過程通過借助二分法對搜索算法進行改進,最終得到最佳的搜索解區域,提高搜索的效率,保證平臺系統的運轉高速性。
通常采用的數據查詢方法需要對所有數據進行。效率低下且占用服務器資源。而對于用戶來說,這不僅降低了工作效率,用戶體驗也極差。結合渭南客戶實際情況,對當前查詢技術進行分析,從局部并行查詢、查詢融合兩個方面分析問題鎖所在。決定使用二分定位,解決數據排序、整合等影響查詢效率的問題。
平臺優化的查詢方法基于一種經典的數據搜索算法——二分法。首先需要根據相關信息確定其根區間,然后將區間分成兩個相等的部分,再通過對函數f(x)符號和單調性進行判斷分析,使根區間逐漸減小。在根區間在所尋求的范圍內,可以快速找到滿足需求的近似根。在此以有序數組Array[N0,N1,...,Nn]為例,主要步驟如下:
確定數組的中位數為:M=[N0,N1,...,Nn]/2。然后比較目標查詢數據Nm與中位數M的大小,如果兩值相等,則返回此位置; 否則,對下一個新的區間繼續進行上述步驟。若M小于Nm,結合數組有序性,則Nm<M=[M,...,Nn],因此,對下一個搜索區間Array[N0,N1,...,M]繼續進行上述操作。每一次搜索與中值進行比較,確定搜索結果后再進行判斷。若搜索不成功,則將搜索區間減半。逐步查找得到確定數據插入位置。
在實際的查詢中,數據一般都是以對象的形式存儲,因此,需要先對數據進行對象化,對此可采用OPC統一架構模式,然后將數據分布式加載到對象服務器內存中,以此實現數據的分布式存儲。再對數據對象實行本地查詢后對結果進行排序,同時從中取得相應的查詢結果,最后通過多級查詢融合后以獲取最終結果。在整個查詢過程中,查詢結果以數據塊為單位(數據記錄由實際查詢業務決定)經過多級查詢融合等最終得到一個數據塊,將最后得到的數據塊反饋給用戶。詳細步驟如下:
在進行本地查詢時,各對象服務器之間是并行執行的。首先,本地查詢所需的基本數據塊的創建,是以每個對象服務器為基礎并在內進行創建,將本地數據根據用戶查詢條件遍歷,滿足條件的元素按照序列添加到數據塊中。數據塊設置大小為K。添加時,二分法主要用于精準地實施定位插入位置,然后再將數據插入數據塊中。如若數據塊的元素超過一定數量,則會產生溢出現象,此時應將數據塊的首個元素后者末位元素移除。全部的有效元素插入之后,在得到本地查詢結果后開始進入下一階段。
接下來的階段中,是參照數據對象之間的邏輯關系逐步合并對象服務器之間查詢結果的過程。針對每個級別,對象服務器依據收集下級對象服務器節點的查詢結果,創建一個新的數據塊定義并元素數量為K,再通過二分法定位將所有查詢結果插入到數據塊中。在每次插入完成需要判斷數據塊是否溢出。如溢出,則需要移除首位元素或者末位元素。最后,將多級融合的數據塊發送給上級服務器。不斷循環執行此過程,直到頂級對象服務器將融合后的查詢結果返回到平臺應用中。
借助于渭南市平臺與數據量,針對目前現有的海量數據實現二分法快速查詢與普通查詢算法進行測試對比,進行了如下實驗:
(1) 測試數據量級從512 MB到1 TB逐步上升時兩種查詢方式的速度比較,如圖1所示。可以看出數據量級越大,二分法查詢的速度越快。

圖1 數據量級對查詢速度的測試
(2) 測試數據量級為1 GB時數據返回結果條數與查詢時間的變化,如圖2所示。可以看出二分法在數據查詢結果上升時也優于普通算法。

圖2 數據查詢目標條數對查詢速度的測試
針對當前渭南智慧城市大數據基礎平臺的現狀,在此提出了一種基于面向對象并行計算的海量數據快速查詢技術——二分法查詢,解決了平臺的目前遇到的問題。但是還需要在后期的維護升級中針對現狀進行優化,需要能在后期大數據技術的發展中尋求更好的解決方案。