一種海量圖片存儲和搜索的方法與流程
2023-10-08 18:23:54 2

本發明涉及圖片存儲和搜索領域,更具體地,涉及一種個人的海量圖片存儲和搜索的方法。
背景技術:
隨著智慧型手機和各種智能設備的普及,個人的圖片總量和類型呈現了爆炸式的增長,用戶通常會將圖片存儲在計算機的硬碟中,圖片的大量增加超出了普通用戶的管理能力,導致了個人的大量圖片的存儲和管理的需求,因而在個人圖片的存儲領域,設計一個針對大量圖片的存儲和檢索系統成為一項待決的問題。
傳統的文件系統基本上都是基於單個存儲設備,文件元數據結構都較為簡單,例如macos的桌面搜索,linux系統的find搜索等,這些搜索工具都是在文件元數據的基礎上建立索引,或者使用遍歷來搜索文件。這種搜索方法在文件達到一個量級後,所花費的時間將變得不可接受,而且這些程序都是對文件的系統元數據(比如訪問時間、修改時間)建立了索引機制,用戶並不對這些屬性感興趣,用戶對圖片的拍攝內容、拍攝時間更感興趣,而這些元數據傳統文件系統無法添加。
技術實現要素:
本發明為了克服上述問題,設計了一種新的索引算法,目的是為了解決個人的大規模圖片快速和便捷存儲和查詢的問題,縮短圖片數據索引時間和提高海量圖片數據存取檢索效率。
為解決上述技術問題,本發明的技術方案如下:
一種海量圖片存儲和查詢的方法,其架構為兩級索引方式,在伺服器上建立兩級索引機制,由伺服器接收來自於客戶端的請求;所述索引機制的第一層為哈希桶,第二層為紅黑樹。
在一種優選的方案中,所述客戶端的請求包括兩類,第一類是請求將圖片存儲到伺服器中,然後根據本算法建立圖片的兩級索引;第二類是根據圖片的擴展屬性在已建立的數據機構中來查找相應的圖片。
在一種優選的方案中,所述的圖片的擴展屬性包括圖片的拍攝時間、圖片的內容及一切用戶添加到圖片中的信息。
在一種優選的方案中,用戶在客戶端上傳圖片,上傳的內容包括圖片和圖片的擴展屬性;所述的圖片存入伺服器中,返回一個伺服器的存儲地址作為value值;以圖片的擴展屬性作為key值,二者組成對。
在一種優選的方案中,圖片存儲的方法具體步驟如下:
s1:使用相關算法對對中的key計算哈希值,從而得到其在兩級索引機制中第一層哈希桶上的位置;
s2:判斷哈希桶中指向下一層紅黑樹索引結構的指針是否為空值,如果是空值,則以建立紅黑樹根節點並返回插入成功;如果其不為空值,進行s3步驟;
s3:在紅黑樹中查找關鍵值為key的節點,如果結果不為空值,證明節點曾經被插入,則在查找到的節點所指向的記錄列表中插入value值;如果為空值,進行s4步驟;
s4:以建立紅黑樹的節點並插入其中,返回插入成功。
在一種優選的方案中,用戶在客戶端上根據圖片的擴展屬性進行圖片的查詢,進而通過rmi遠程調用機制在伺服器上進行查詢;圖片查詢的方法具體步驟如下:
t1:伺服器接收這次查詢並進行查詢條件的解析,提取其中key的值,然後將key值傳入到伺服器內存索引中;
t2:伺服器計算key的哈希值,確定其是否在哈希桶上,如果不在,則直接返回查詢失敗;如果在哈希桶上,則進行步驟t3;
t3:判斷哈希桶中指向下一層紅黑樹索引結構的指針是否為空,如果為空,返回查詢失敗;如果不為空,則進行步驟t4;
t4:在紅黑樹中查詢關鍵值為key的節點,如果為空,則返回查詢失敗;如果不為空,則進行步驟t5;
t5:返回節點中指向記錄鍊表的首地址。
與現有技術相比,本發明技術方案的有益效果是:本發明提供一種海量圖片存儲和查詢的方法,其架構為兩級索引方式,在伺服器上建立兩級索引機制,由伺服器接收來自於客戶端的請求;所述索引機制的第一層為哈希桶,第二層為紅黑樹。本發明旨在解決大規模圖片快速和便捷存儲和查詢的問題,縮短圖片數據索引時間,提高海量圖片數據存取檢索效率,本發明算法穩定性和擴展性良好,使得客戶端的用戶們可以快速方便地進行圖片的存儲和查找。
附圖說明
圖1為本發明實施例1兩級索引結構圖。
圖2為本發明實施例2上傳圖片並建立索引的流程圖。
圖3為本發明的算法在內存中具體建立索引的流程圖。
圖4為本發明實施例2搜索圖片的流程圖。
圖5為本發明的算法在內存中具體找尋圖片路徑的流程圖。
具體實施方式
附圖僅用於示例性說明,不能理解為對本專利的限制;
為了更好說明本實施例,附圖某些部件會有省略、放大或縮小,並不代表實際產品的尺寸;
對於本領域技術人員來說,附圖中某些公知結構及其說明可能省略是可以理解的。
下面結合附圖和實施例對本發明的技術方案做進一步的說明。
如圖1-4所示,整個的圖片存儲系統採用了一個典型的c/s架構。客戶端的主要功能有兩個,第一個是提供一個前端界面,供用戶上傳和查找圖片;第二是提供對圖片添加擴展屬性的接口。伺服器的主要功能也有兩個,第一個是圖片文件的存儲;第二個是圖片文件索引結構的建立。
整個系統的功能主要有兩個:第一個是建立圖片的索引結構,用戶在客戶端上傳各種智能設備或者說照相設備裡的照片,伺服器端會根據圖片的元數據利用本文中的算法建立索引。第二個是搜索圖片,用戶在客戶端上發出搜索請求,伺服器響應客戶端的請求,在建立好的數據結構中查找圖片的地址信息,再根據地址信息返回用戶查詢的圖片。
在具體圖片文件的存儲過程中,如圖2所示,客戶端和伺服器之間通信,在圖片文件管理客戶端上,用戶需要編輯完整圖片的擴展屬性,需要注意的是圖片本身具有系統屬性(比如修改時間、訪問時間等),但是用戶並不會根據這些系統屬性進行圖片的查詢,用戶對自己添加的擴展屬性更加青睞,這些屬性包括圖片的拍攝地點,拍攝的時間,以及用戶給所拍攝圖片所加的各種個性標籤等等。
圖片通過ftp協議上傳到伺服器上,ftp協議用於網際網路上的控制文件的雙向傳輸。用戶操作客戶機程序,連接到在遠程的ftp伺服器程序。用戶通過客戶機的程序向伺服器程序發出命令,這些命令包括上傳文件、創建或者改變伺服器上的目錄等等。伺服器程序會執行用戶所發出的命令,並將執行的結果返回至客戶端。
圖片的擴展屬性通過tcp/ip協議傳輸到伺服器,如圖3所示,圖片在伺服器中建立索引的具體步驟:伺服器接收用戶上傳的圖片文件及其擴展屬性,然後存儲文件到用戶指定的目錄中,判斷圖片的擴展屬性是否為空,如果為空,意味著該圖片無法建立索引,系統直接結束整個進程;如果屬性不為空,此時圖片的擴展屬性作為key,圖片在伺服器的存儲路徑作為value,組成了對,key-value分布式存儲系統查詢速度快、存放數據量大、支持高並發,非常適合通過主鍵進行查詢。接著計算key的哈希值,確定其在哈希桶(bucket)中的位置,檢測對應位置的紅黑樹指針是否為空。
在具體實施過程中,如果對應位置的紅黑樹指針是空的,那麼就直接創建紅黑樹的根節點,將對插入根節點即可,整個進程結束;如果說對應位置的紅黑樹指針不為空,那麼就在需要在這個紅黑樹上查詢key值是否存在;如果存在,那麼說明以前插入過相同的圖片,這次只是更新而已,那麼只需將value值添加到該key節點指定的記錄鍊表中,然後整個進程結束。如果不存在,那麼說明該圖片是第一次插入,應當建立新的紅黑樹節點,然後將對插入到相應的位置,然後整個進程結束。
如圖4所示,當伺服器的圖片越來越多時,圖片的檢索機制就成為整個系統最為核心的部分,用戶需要高效和便捷的找到自己查找的圖片,首先用戶在客戶端上根據圖片的擴展屬性進行圖片的查詢,通過rmi遠程調用機制從而在伺服器上進行查詢。,rmi應用程式包括兩個獨立的程序:伺服器程序和客戶機程序。伺服器應用程式將創建多個遠程對象,使這些遠程對象能夠被引用,然後等待客戶機調用這些遠程對象的方法。而客戶機程序則從伺服器中得到一個或多個遠程對象的引用,然後調用遠程對象的方法。rmi為伺服器和客戶機進行通信和信息傳遞提供了一種機制。
伺服器接收這次查詢並進行查詢請求的解析,如圖5所示,根據內存索引來查找圖片的存儲路徑,伺服器提取查詢請求中key的值,將這個key信息傳入到伺服器內存索引中,伺服器計算key的哈希值,確定其是否在哈希桶(bucket)上,如果不在,那直接返回查詢失敗;如果在,則在哈希桶對應位置下的紅黑樹中進行查詢,如果結果為空,返回查詢失敗;如果不為空,那麼就把value值即圖片在伺服器中存儲的位置返回給調用的函數,通過圖片存儲的位置即可找到圖片。
圖2和圖4中描述位置關係的用語僅用於示例性說明,不能理解為對本專利的限制;
本發明的上述實施例僅僅是為清楚地說明本發明所作的舉例,而並非是對本發明的實施方式的限定。對於所屬領域的普通技術人員來說,在上述說明的基礎上還可以做出其它不同形式的變化或變動。這裡無需也無法對所有的實施方式予以窮舉。凡在本發明的精神和原則之內所作的任何修改、等同替換和改進等,均應包含在本發明權利要求的保護範圍之內。