像素點的集合中來提取顏色特征、形狀特征、紋理特征。上述特 征共同構(gòu)成描述圖像內(nèi)容的特征空間。在提取關(guān)鍵像素點后需要對圖像進行聚類,根據(jù)相 關(guān)性關(guān)系將時間連續(xù)和內(nèi)容相近的元素重新進行組合。
[0030] 以下給出相似度計算公式。設(shè)圖像庫中有N個圖像,則庫中圖像可用P1Q e {1, 2, "·Ν})來表示,C1, G1, S1, 別表示顏色、紋理、形狀、位置特征,用戶提交的待檢索的 圖像實例用Pc表示,其顏色、紋理、形狀、位置特征分別用C。,G。,S。,Μ。來表示,待檢索圖像 與第i個圖像的相似度用D (P。,P1)表示,則相似度計算公式如下:
[0031] D(P0, P1) = WlDc(C0, CJ+aDJG。,Gj+hDjS。,SJ+wDJM。,M1)其中,Dc,Dg,D s, 別為5,?1兩個圖像在顏色、紋理、形狀、位置上的相似度。w 各特征的權(quán)重,其 值可以進行調(diào)整,但要滿足Wi+Wjj+wfWd= 1。
[0032] 對圖像特征進行相似度計算的工作量是非常大的。本發(fā)明利用MapReduce編程 模型來進行相似度計算和相似度匹配,從而實現(xiàn)分布式文件數(shù)據(jù)庫中海量圖像的分布式檢 索。
[0033] 將對大規(guī)模圖像數(shù)據(jù)的操作分發(fā)給主節(jié)點下的各個分節(jié)點去完成。在map階段, MapReduce將圖像數(shù)據(jù)分割成固定大小的分片,然后將每個分片分解成多個鍵值對〈1, V,,并將其作為map函數(shù)的輸入,得到中間結(jié)果<K2, V2>,然后按照1(2繼續(xù)排序,并key值相 同的value放在一起形成一個新列表<K2, list (V2) >。輸入的<K2, list (V2) >對經(jīng)過reduce 函數(shù)的處理后得到鍵值對<K3, V3>,將其輸出到HDFS上。
[0034] 在本發(fā)明的MapReduce檢索函數(shù)中,定義map的輸入為〈圖像ID,特征值〉,輸出 為〈相似度,圖像ID>,reduce端的輸出為與用戶提取的圖像特征值相似度最高的〈相似 度,圖像ID〉。
[0035] MapReduce檢索函數(shù)的過程為:
[0036] (1)在map端,讀取用戶檢索的圖像,判斷其是否滿足檢索條件,若滿足則計算其 特征值,與分布式文件數(shù)據(jù)庫中的圖像進行特征相似度匹配計算,輸出中間結(jié)果〈相似度, 圖像ID>,將其寫入本地存儲器;若不滿足檢索條件,則輸出空鍵值對。
[0037] (2)對map端輸出的鍵值對〈相似度,圖像ID>按照相似度進行分組和排序,然后 輸入到reduce端。
[0038] (3)在reduce端,執(zhí)行任務(wù)的reduce節(jié)點收集各個map節(jié)點任務(wù)的結(jié)果,并對匹 配結(jié)果按照相似度的值由大到小進行排序,然后將最終匹配結(jié)果的目標快照輸出到HDFS 中。用戶點擊圖像快照即可查看目標圖像。
[0039] 對于數(shù)據(jù)存儲,由集群服務(wù)器和終端接入到圖像檢索系統(tǒng),作為數(shù)據(jù)存儲層,集群 中對等的各個服務(wù)器節(jié)點由系統(tǒng)注冊服務(wù)統(tǒng)一分配令牌號,通過一致性散列算法計算得到 各服務(wù)器的數(shù)據(jù)點存儲范圍。
[0040] 系統(tǒng)的數(shù)據(jù)存儲流程可分為以下3步:
[0041] (1)終端通過輪詢或事件觸發(fā)方式獲取當前實時數(shù)據(jù),索引數(shù)據(jù)
[0042] (2)通過用戶配置的數(shù)據(jù)點組態(tài)將實時數(shù)據(jù)上傳至集群服務(wù)器。
[0043] (3)集群服務(wù)器的管理節(jié)點將實時數(shù)據(jù)中的數(shù)據(jù)點名轉(zhuǎn)換為數(shù)據(jù)點ID,并按照一 致性散列算法建立數(shù)據(jù)點ID與物理服務(wù)器的映射,從而將數(shù)據(jù)發(fā)送至指定的服務(wù)器節(jié)點 中。
[0044] 為保障海量數(shù)據(jù)寫入存儲服務(wù)器的實時性,對數(shù)據(jù)上傳機制進行如下優(yōu)化:
[0045] (1)將終端進行分組,并按組名建立與物理服務(wù)器的映射,終端在向集群管理節(jié)點 進行存儲定位后,直接連至指定的物理服務(wù)器,從而盡量減少不必要的數(shù)據(jù)轉(zhuǎn)發(fā)。
[0046] (2)終端在數(shù)據(jù)寫入第一個物理服務(wù)器的內(nèi)存緩存后即認為寫入成功,由該服務(wù) 器節(jié)點執(zhí)行后繼的冗余備份流程,從而減少了數(shù)據(jù)發(fā)送時的阻塞等待時間,在滿足高可用 性的前提下提升了系統(tǒng)吞吐量。
[0047] 為保障數(shù)據(jù)服務(wù)的可用性,需要對歷史數(shù)據(jù)存儲進行冗余備份。系統(tǒng)默認的副本 數(shù)量為1,備份數(shù)據(jù)與主副本數(shù)據(jù)存儲在不同的物理服務(wù)器,存儲規(guī)則由主副本對應(yīng)節(jié)點所 加載的腳本實現(xiàn)。
[0048] 當記錄容量達到緩存頁面大小后,或者超過最大緩存時間后,存儲歸檔服務(wù)在執(zhí) 行本地數(shù)據(jù)持久化的同時,將緩存數(shù)據(jù)發(fā)送至指定的備份節(jié)點。通過存儲數(shù)據(jù)時附加的管 理信息進行數(shù)據(jù)一致性的快速判定和缺失數(shù)據(jù)的準確定位。
[0049] 當出現(xiàn)存儲異常導(dǎo)致多個副本間產(chǎn)生差異時,需要數(shù)據(jù)存儲檢索機制支持備份同 步、差異快速定位。本發(fā)明利用基于多版本控制的數(shù)據(jù)管理:
[0050] 以固定長度的頁面(通常為IkB或4kB)為最小單元進行數(shù)據(jù)管理,頁面類型包括 數(shù)據(jù)記錄頁、索引信息頁和版本信息頁。數(shù)據(jù)記錄頁記錄該數(shù)據(jù)點在某段時間的實時值、質(zhì) 量碼與建立時間,當該頁記錄過程發(fā)生異常時不會切換頁面,而是使用累加的版本號和異 常發(fā)生時的頁面記錄偏移量進行標識;索引信息頁記錄了數(shù)據(jù)記錄頁的簡要信息,如數(shù)據(jù) 記錄頁的版本變化標識、頁面編號和時標索引等;版本信息頁記錄了各版本號對應(yīng)的起止 時間、所關(guān)聯(lián)的數(shù)據(jù)記錄頁起始編號及其頁面記錄偏移量等信息。各頁面間以鏈表方式進 行關(guān)聯(lián),便于指定時間段存儲數(shù)據(jù)的快速定位。
[0051] 由主副本對應(yīng)節(jié)點在數(shù)據(jù)頁寫入磁盤的同時將其發(fā)送至指定的單個或多個備份 節(jié)點,從而實現(xiàn)多重副本的寫入操作。各備份節(jié)點對接收到的數(shù)據(jù)記錄頁的處理流程與主 副本完全相同,并在頁面成功寫入磁盤后通過特定消息告知主副本對應(yīng)節(jié)點。
[0052] 同時,在各備份節(jié)點定期進行自檢操作,通過檢測指定數(shù)據(jù)點所有版本編號的連 續(xù)性,以及各版本中所有數(shù)據(jù)記錄頁編號的連續(xù)性,可以快速確認是否存在數(shù)據(jù)缺失。如果 數(shù)據(jù)是完整的,則在結(jié)果文件中記錄當前的檢測位置,防止已檢測的數(shù)據(jù)內(nèi)容被重復(fù)檢測, 否則將發(fā)起修復(fù)操作。
[0053] (1)與主副本對應(yīng)節(jié)點進行協(xié)商,確定缺失的數(shù)據(jù)記錄頁對應(yīng)的編號范圍。
[0054] (2)向主副本對應(yīng)節(jié)點請求缺失的數(shù)據(jù)記錄頁,在獲取到所有頁面后追加寫入當 前歸檔文件,并修改索引信息頁中維護的時標索引信息。
[0055] (3)如果存在版本號變化,則對應(yīng)的版本信息頁也將進行同步,以保證所有版本編 號的連續(xù)性。
[0056] 當用戶在組態(tài)中添加節(jié)點時,集群管理節(jié)點通過一致性散列算法計算得到該新增 節(jié)點的數(shù)據(jù)存儲范圍。隨后該新增節(jié)點向原主副本對應(yīng)節(jié)點請求存儲范圍內(nèi)的所有數(shù)據(jù)記 錄頁,而獲取到數(shù)據(jù)記錄頁之后的處理流程與主副本完全相同。
[0057] 由于查詢請求首先到達集群管理節(jié)點,需要由集群管理節(jié)點在處理查詢請求時進 行負載均衡,防止某一存儲服務(wù)器負荷過重,而對應(yīng)的備份節(jié)點卻處于空閑狀態(tài)的現(xiàn)象發(fā) 生。集群管理節(jié)點確定查詢目標服務(wù)器后,由查詢客戶端直接向?qū)?yīng)的服務(wù)器進行本地查 詢。
[0058] 進入本地數(shù)據(jù)查詢流程后,通過相互鏈接的索引信息頁中記錄的時標索引,可以 快速定位到指定時間范圍內(nèi)的數(shù)據(jù)存儲位置。如果頁面的版本變化標識被設(shè)置,說明該頁 面中混合存放有正常數(shù)據(jù)和異常數(shù)據(jù),如果不加以區(qū)分而直接按時間順序進行擬合,將產(chǎn) 生錯誤的擬合結(jié)果。
[0059] 通過版本信息頁進行時序數(shù)據(jù)的版本控制,在版本發(fā)生變化的區(qū)間使用最新版本 的數(shù)據(jù)進行擬合,從而避免正常數(shù)據(jù)與異常數(shù)據(jù)混合交錯導(dǎo)致錯誤的查詢擬合結(jié)果。
[0060] 來自查詢客戶端的查詢請求首先被提交給集群管理節(jié)點,由集群管理節(jié)點依據(jù)查 詢時間長度決定是否將查詢請求進行分解。如果查詢時間跨度過大,則將原始查詢請求按 時間范圍分解為多個子查詢請求,并按一致性散列算法指派給多個存儲服務(wù)器節(jié)點。查詢 客戶端獲取到應(yīng)答信息后,與每個存儲服務(wù)器節(jié)點建立直連,分別完成各自的本地數(shù)據(jù)查 詢流程。如果不需要進行查詢請求分解,則按負載均衡算法在主從備份節(jié)點中選擇合適的 單個存儲服務(wù)器進行后繼查詢。
[0061] 各數(shù)據(jù)存儲服務(wù)器在接收到本地查詢請求后,將依據(jù)版本信息頁中的內(nèi)容判斷查 詢時間范圍內(nèi)是否存在版本更新。如果該時間段內(nèi)的過程數(shù)據(jù)屬于同一版本,則直接由索 引信息