本發(fā)明涉及存儲、檢索
技術(shù)領(lǐng)域:
:,尤其涉及一種存儲、檢索照片的方法及裝置。
背景技術(shù):
::隨著照片數(shù)據(jù)量的日益增長,對照片存儲和訪問管理難度越來越大,對于大多數(shù)系統(tǒng),在大規(guī)模的小文件存儲與讀取時(shí),因?yàn)榇蓬^需要頻繁的尋道和換道,因此在讀取上容易帶來較長的延時(shí),尤其在大量高并發(fā)訪問量的情況下,大大降低了讀取效果。傳統(tǒng)基于可移植操作系統(tǒng)接口(PortableOperatingSystemInterface,POSIX)的文件系統(tǒng)的缺點(diǎn)主要是目錄和每個(gè)文件的元數(shù)據(jù)。對于圖片應(yīng)用,很多元數(shù)據(jù)(比如文件權(quán)限),是無用的而且浪費(fèi)了很多存儲容量。而且更大的性能消耗在于文件的元數(shù)據(jù)必須從磁盤讀到內(nèi)存來定位文件。文件規(guī)模較小時(shí)這些花費(fèi)無關(guān)緊要,然而面對TB級別圖片和PB級別的數(shù)據(jù),訪問元數(shù)據(jù)就是吞吐量瓶頸所在;且很難提供對照片統(tǒng)計(jì)、分析的功能。目前采用的照片存儲系統(tǒng),存在有以下弊端:讀寫慢:大規(guī)模的小文件存儲與讀取,磁頭需要頻繁的尋道和換道。提供的服務(wù)單一:采用目錄和文件名稱來存儲和定位數(shù)據(jù)。穩(wěn)定性低:依賴外包開發(fā)的系統(tǒng),存在大量漏洞。安全性差:當(dāng)存儲的磁盤出現(xiàn)問題,全部照片服務(wù)無法使用。成本高:購買外包照片系統(tǒng)和高性能的磁盤。技術(shù)實(shí)現(xiàn)要素:本發(fā)明實(shí)施例的技術(shù)方案在于提供一種存儲、檢索照片的方法及裝置,旨在解決現(xiàn)有技術(shù)中照片存儲系統(tǒng)讀寫慢、穩(wěn)定性低、安全性差以及成本高的問題。本發(fā)明實(shí)施例提供一種存儲、檢索照片的方法,包括:根據(jù)待存儲照片的預(yù)設(shè)第一類屬性,設(shè)置待存儲照片的行鍵值rowkey;獲取待存儲照片的預(yù)設(shè)第二類屬性,建立待存儲照片的第二類屬性與所述rowkey之間的關(guān)聯(lián);按照所述rowkey的字符順序,將待存儲照片的數(shù)據(jù)作為hbase表的列值存儲在hbase中;接收客戶端發(fā)送的查詢請求,根據(jù)所述查詢請求中攜帶的第一類屬性和/或第二類屬性的查詢條件,在hbase中查詢與所述查詢請求匹配的照片。其中,所述第一類屬性包括:地理位置信息、拍攝時(shí)間信息、類別信息以及用戶ID信息中的任一種或者任意幾種的組合;所述第二類屬性至少包括:地理位置信息、拍攝時(shí)間信息、類別信息、用戶ID信息以及照片名稱信息中區(qū)別于所述第一類屬性的信息。其中,所述根據(jù)待存儲照片的預(yù)設(shè)第一類屬性,設(shè)置待存儲照片的行鍵值rowkey,具體為:將所述第一類屬性轉(zhuǎn)化為字符串作為待存儲照片的所述rowkey。其中,所述獲取待存儲照片的預(yù)設(shè)第二類屬性,建立待存儲照片的第二類屬性與所述rowkey之間的關(guān)聯(lián),包括:根據(jù)待存儲照片的所述第二類屬性在solr上建立索引;建立索引與待存儲照片的所述rowkey之間的一一對應(yīng)關(guān)系。其中,所述按照所述rowkey的字符順序,將待存儲照片的數(shù)據(jù)作為hbase表的列值存儲在hbase中,包括:獲取待存儲照片轉(zhuǎn)換為字節(jié)數(shù)組后的數(shù)據(jù);獲取待存儲照片的所述rowkey的字符,按照預(yù)設(shè)的字符順序,將待存儲照片轉(zhuǎn)換為字節(jié)數(shù)組后的數(shù)據(jù)作為hbase表的列值存儲在hbase中的相應(yīng)位置。其中,所述根據(jù)所述查詢請求中攜帶的第一類屬性和/或第二類屬性的查詢條件,在hbase中查詢與所述查詢請求匹配的照片之后,所述方法還包括:獲取客戶端所支持的數(shù)據(jù)格式;將查找到的與所述查詢請求匹配的照片轉(zhuǎn)化為客戶端所支持的數(shù)據(jù)格式進(jìn)行傳輸。本發(fā)明實(shí)施例該提供一種存儲、檢索照片的裝置,包括:設(shè)置模塊,用于根據(jù)待存儲照片的預(yù)設(shè)第一類屬性,設(shè)置待存儲照片的行鍵值rowkey;建立模塊,用于獲取待存儲照片的預(yù)設(shè)第二類屬性,建立待存儲照片的第二類屬性與所述rowkey之間的關(guān)聯(lián);存儲模塊,用于按照所述rowkey的字符順序,將待存儲照片的數(shù)據(jù)作為hbase表的列值存儲在hbase中;查找模塊,用于接收客戶端發(fā)送的查詢請求,根據(jù)所述查詢請求中攜帶的第一類屬性和/或第二類屬性的查詢條件,在hbase中查詢與所述查詢請求匹配的照片。其中,所述設(shè)置模塊中的第一類屬性包括:地理位置信息、拍攝時(shí)間信息、類別信息以及用戶ID信息中的任一種或者任意幾種的組合;所述建立模塊中的第二類屬性至少包括:地理位置信息、拍攝時(shí)間信息、類別信息、用戶ID信息以及照片名稱信息中區(qū)別于所述第一類屬性的信息。其中,所述設(shè)置模塊進(jìn)一步用于:將所述第一類屬性轉(zhuǎn)化為字符串作為待存儲照片的所述rowkey。其中,所述建立模塊包括:第一建立子模塊,用于根據(jù)待存儲照片的所述第二類屬性在solr上建立索引;第二建立子模塊,用于建立索引與待存儲照片的所述rowkey之間的一一對應(yīng)關(guān)系。其中,所述存儲模塊包括:獲取子模塊,用于獲取待存儲照片轉(zhuǎn)換為字節(jié)數(shù)組后的數(shù)據(jù);處理子模塊,用于獲取待存儲照片的所述rowkey的字符,按照預(yù)設(shè)的字符順序,將待存儲照片轉(zhuǎn)換為字節(jié)數(shù)組后的數(shù)據(jù)作為hbase表的列值存儲在hbase中的相應(yīng)位置。其中,所述裝置還包括:獲取模塊,用于在所述查找模塊根據(jù)所述查詢請求中攜帶的第一類屬性和/或第二類屬性的查詢條件,在hbase中查詢與所述查詢請求匹配的照片之后, 獲取客戶端所支持的數(shù)據(jù)格式;轉(zhuǎn)化模塊,用于將查找到的與所述查詢請求匹配的照片轉(zhuǎn)化為客戶端所支持的數(shù)據(jù)格式進(jìn)行傳輸。本發(fā)明實(shí)施例上述技術(shù)方案至少包括如下有益效果:通過獲取待存儲照片的預(yù)設(shè)第一類屬性,設(shè)置待存儲照片的rowkey,獲取待存儲照片的預(yù)設(shè)第二類屬性,建立待存儲照片的第二類屬性與rowkey之間的關(guān)聯(lián),采用hbase的列存儲機(jī)制,將待存儲照片的數(shù)據(jù)作為hbase表的列值,使用hdfs對照片進(jìn)行存儲,根據(jù)客戶端發(fā)送的查詢請求中攜帶的第一類屬性和/或第二類屬性的查詢條件,在hbase中查詢與查詢請求匹配的照片,可以實(shí)現(xiàn)基于HDFS進(jìn)行照片數(shù)據(jù)的高容量且快速存儲,同時(shí)具有高可用性、檢索快速的優(yōu)點(diǎn),可充分發(fā)揮IO吞吐能力,成本較低,提高了用戶的體驗(yàn)性。附圖說明圖1為本發(fā)明實(shí)施例的存儲、檢索照片的方法流程示意圖一;圖2為本發(fā)明實(shí)施例的存儲、檢索照片的方法流程示意圖二;圖3為本發(fā)明實(shí)施例的存儲、檢索照片的方法流程示意圖三;圖4為本發(fā)明實(shí)施例的照片存儲流程示意圖;圖5為本發(fā)明實(shí)施例的照片存儲框圖;圖6為本發(fā)明實(shí)施例客戶端與照片系統(tǒng)傳遞數(shù)據(jù)示意圖;圖7為本發(fā)明實(shí)施例的存儲、檢索照片的裝置示意圖一;圖8為本發(fā)明實(shí)施例的存儲、檢索照片的裝置示意圖二。具體實(shí)施方式為使本發(fā)明要解決的技術(shù)問題、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖及具體實(shí)施例進(jìn)行詳細(xì)描述。本發(fā)明實(shí)施例提供一種存儲、檢索照片的方法及裝置,采用hbase和solr對照片進(jìn)行處理,使其存儲在hdfs上,其中hbase存儲照片信息,solr存儲照片的搜索索引信息。本方案需要搭建完成hdfs、hbase、solr集群,然后對三者進(jìn)行整合,使得 hbase的表文件和solr的索引文件都存儲在hdfs上。下面對三個(gè)集群功能進(jìn)行簡單介紹:Hadoop集群:Hadoop是一個(gè)分布式文件系統(tǒng)(HadoopDistributedFileSystem,HDFS)。HDFS有高容錯(cuò)性的特點(diǎn),并且設(shè)計(jì)用來部署在低廉的硬件上;提供高吞吐量來訪問應(yīng)用程序的數(shù)據(jù),適合那些有著超大數(shù)據(jù)集的應(yīng)用程序。HDFS放寬了POSIX的要求,可以以流的形式訪問文件系統(tǒng)中的數(shù)據(jù)。Hadoop的框架最核心的設(shè)計(jì)就是:HDFS和編程模型MapReduce。HDFS為海量的數(shù)據(jù)提供了存儲,MapReduce為海量的數(shù)據(jù)提供了計(jì)算。MapReduce是Google提出的一個(gè)軟件架構(gòu),用于大規(guī)模數(shù)據(jù)集的并行計(jì)算。HBase集群:HBase(HadoopDatabase)是一個(gè)分布式的、面向列的開源數(shù)據(jù)庫,該技術(shù)來源于FayChang所撰寫的Google論文“Bigtable:一個(gè)結(jié)構(gòu)化數(shù)據(jù)的分布式存儲系統(tǒng)”。就像Bigtable利用了Google文件系統(tǒng)所提供的分布式數(shù)據(jù)存儲一樣,HBase在Hadoop之上提供了類似于Bigtable的能力。HBase是Apache的Hadoop項(xiàng)目的子項(xiàng)目。HBase不同于一般的關(guān)系數(shù)據(jù)庫,它是一個(gè)適合于非結(jié)構(gòu)化數(shù)據(jù)存儲的數(shù)據(jù)庫。另一個(gè)不同的是HBase基于列的而不是基于行的模式。HBase是一個(gè)高可靠性、高性能、面向列、可伸縮的分布式存儲系統(tǒng),利用HBase技術(shù)可在廉價(jià)PC服務(wù)器上搭建起大規(guī)模結(jié)構(gòu)化存儲集群。solr集群:Solr是一個(gè)高性能,采用Java5開發(fā),基于全文檢索引擎的架構(gòu)Lucene的全文搜索服務(wù)器。同時(shí)對其進(jìn)行了擴(kuò)展,提供了比Lucene更為豐富的查詢語言,同時(shí)實(shí)現(xiàn)了可配置、可擴(kuò)展并對查詢性能進(jìn)行了優(yōu)化,并且提供了一個(gè)完善的功能管理界面,是一款非常優(yōu)秀的全文搜索引擎。本發(fā)明實(shí)施例一種存儲、檢索照片的方法,如圖1所示,包括:S100、根據(jù)待存儲照片的預(yù)設(shè)第一類屬性,設(shè)置待存儲照片的行鍵值rowkey;S200、獲取待存儲照片的預(yù)設(shè)第二類屬性,建立待存儲照片的第二類屬性與rowkey之間的關(guān)聯(lián);S300、按照rowkey的字符順序,將待存儲照片的數(shù)據(jù)作為hbase表的列值存儲在hbase中;S400、接收客戶端發(fā)送的查詢請求,根據(jù)查詢請求中攜帶的第一類屬性和/或第二類屬性的查詢條件,在hbase中查詢與查詢請求匹配的照片。具體的,設(shè)置待存儲照片的第一類屬性和第二類屬性,根據(jù)待存儲照片的第一類屬性,設(shè)置待存儲照片的rowkey,根據(jù)待存儲照片的預(yù)設(shè)第二類屬性,建立待存儲照片的第二類屬性與rowkey之間的關(guān)聯(lián)。即針對一待處理照片而言,根據(jù)待處理照片的第一類屬性,例如照片的地理位置信息設(shè)置rowkey,然后獲取待處理照片的第二類屬性,例如第二類屬性包括:拍攝時(shí)間信息和類別信息,建立第二類屬性與rowkey的關(guān)聯(lián),即拍攝時(shí)間信息、類別信息與照片的地理位置信息是相互對應(yīng)的,在查找照片的過程中,可以根據(jù)拍攝時(shí)間信息查找到對應(yīng)的地理位置信息,也可以根據(jù)類別信息查找到對應(yīng)的地理位置信息,進(jìn)而查找到相應(yīng)的照片。在建立待存儲照片的第二類屬性與rowkey之間的關(guān)聯(lián)之后,可以按照rowkey的字符順序,將待存儲照片的數(shù)據(jù)作為hbase表的列值存儲在hbase中。然后根據(jù)客戶端發(fā)送的查詢請求中攜帶的第一類屬性和/或第二類屬性的查詢條件,在hbase中查詢與查詢請求匹配的照片。需要說明的是,當(dāng)根據(jù)地理位置信息設(shè)置待存儲照片的rowkey,在根據(jù)客戶端發(fā)送的查詢請求進(jìn)行查詢的過程中,查詢請求中攜帶的是第一類屬性地理位置信息時(shí),將經(jīng)緯度的二維關(guān)系使用geohash進(jìn)行轉(zhuǎn)換,得到一維字符串,其中g(shù)eohash是一種將二維的經(jīng)緯度轉(zhuǎn)換成一維字符串的算法,然后將得到的一維字符串信息,與存儲的rowkey值進(jìn)行比較,獲取與一維字符串信息匹配的rowkey,進(jìn)而獲取到相應(yīng)的照片。當(dāng)根據(jù)地理位置信息設(shè)置待存儲照片的rowkey,當(dāng)?shù)诙悓傩园ㄅ臄z時(shí)間信息、類別信息、用戶ID信息以及照片名稱信息時(shí),建立待存儲照片的第二類屬性與rowkey之間的關(guān)聯(lián)。在根據(jù)客戶端發(fā)送的查詢請求進(jìn)行查詢的過程中,查詢請求中攜帶的是第二類屬性照片名稱信息時(shí),根據(jù)照片名稱信息查找到相應(yīng)的第二類屬性,根據(jù)第二類屬性與rowkey之間的關(guān)聯(lián),查找到對應(yīng)的rowkey,進(jìn)而獲取到相應(yīng)的照片。在本發(fā)明上述實(shí)施例中,第一類屬性包括:地理位置信息、拍攝時(shí)間信息、類別信息以及用戶ID信息中的任一種或者任意幾種的組合;相應(yīng)的第二類屬性包括:地理位置信息、拍攝時(shí)間信息、類別信息、用戶ID信息以及照片名稱信息中區(qū)別于第一類屬性的信息。具體的,當(dāng)?shù)谝活悓傩詾榈乩砦恢眯畔⒑陀脩鬒D信息的組合時(shí),由于地理位置信息的經(jīng)緯度是二維關(guān)系,需要使用geohash對經(jīng)緯度進(jìn)行轉(zhuǎn)換,把二維關(guān)系轉(zhuǎn)換為一維字符串。如表1所示:緯度經(jīng)度geohash值40.12288117.09088wx5k22nuxqbj40.12187117.08743wx5k0ruqyfet21.27364110.36249w7y3p2exbmvj39.87317116.64892wx4fy6tnhcdg39.86179116.65084wx4fy2wec84x39.86035116.65083wx4fy2qe37g139.8587116.65082wx4fy2n9c05w39.85757116.65081wx4fwrye0vs639.85493116.65054wx4fwrq7f96v39.85288116.65265wx4fwqzzgg23表1根據(jù)地理位置信息,將經(jīng)緯度轉(zhuǎn)化為字符串,由于同一點(diǎn)可能出現(xiàn)多張照片,還需要加上一個(gè)唯一ID才能組成唯一rowkey,最終的結(jié)果如表2所示:緯度經(jīng)度rowkey值40.12288117.09088wx5k22nuxqbj000000017040.12187117.08743wx5k0ruqyfet000000017121.27364110.36249w7y3p2exbmvj000000017239.87317116.64892wx4fy6tnhcdg000000017539.86179116.65084wx4fy2wec84x000000017739.86035116.65083wx4fy2qe37g1000000017939.8587116.65082wx4fy2n9c05w000000018039.85757116.65081wx4fwrye0vs6000000018139.85493116.65054wx4fwrq7f96v000000018239.85288116.65265wx4fwqzzgg230000000183表2按照該方式存儲后,根據(jù)hbase按照rowkey的字符順序存儲規(guī)則,只要傳入左下角和右上角點(diǎn)經(jīng)緯度的geohash值,作為起始Rowkey和終止Rowkey,即可獲取該區(qū)域內(nèi)的照片信息,例如獲取矩形范圍(39.8587116.65082、39.8587117.08743、40.12187117.08743、40.12187116.65082、39.8587116.65082)的 照片信息,只要使用左下角(39.8587116.65082)的geohash值:wx4fy2n9c05w作為起始Rowkey,右上角(40.12187117.08743)的geohash值:wx5k0ruqyfet作為終止Rowkey,通過地理位置的區(qū)域范圍獲取照片數(shù)據(jù)。進(jìn)一步的,在現(xiàn)實(shí)獲取照片時(shí),查找方式可能是多種多樣的,區(qū)域范圍查找,并不能滿足需求,此時(shí)使用solr在照片錄入時(shí),添加對應(yīng)需要的索引,使其關(guān)聯(lián)到要查找照片的rowkey上,即可實(shí)時(shí)、高效定位照片,例如對照片名稱、類別、拍攝日期時(shí)間等進(jìn)行等建立solr索引,利用solr來實(shí)時(shí)查找、統(tǒng)計(jì)、分析照片。在本發(fā)明上述實(shí)施例中,如圖2所示,步驟S200包括:S201、根據(jù)待存儲照片的第二類屬性在solr上建立索引;S202、建立索引與待存儲照片的rowkey之間的一一對應(yīng)關(guān)系。具體的,當(dāng)在根據(jù)第一類屬性,設(shè)置待存儲照片的rowkey之后,需要建立待存儲照片的第二類屬性與rowkey之間的關(guān)聯(lián),可以根據(jù)客戶端輸入的不同的查詢條件查找到對應(yīng)的照片。在建立待存儲照片的第二類屬性與rowkey之間的關(guān)聯(lián)時(shí),根據(jù)待存儲照片的第二類屬性在solr上建立索引,然后建立索引與rowkey之間的對應(yīng)關(guān)系。例如:針對一待存儲照片A,獲取照片A的第二類屬性,在solr上建立照片A的第二類屬性的索引a,然后建立索引a與照片A的rowkey之間的一一對應(yīng)。從而可以形成照片A的第二類屬性與照片A的rowkey之間的關(guān)聯(lián)。當(dāng)照片A的第一類屬性為拍攝時(shí)間信息時(shí),根據(jù)拍攝時(shí)間信息設(shè)置照片A的rowkey,然后獲取照片A的第二類屬性,此時(shí)照片A的第二類屬性可以包括:地理位置信息、名稱信息、用戶ID等,根據(jù)照片A的第二類屬性在solr上建立照片A的第二類屬性的索引a,建立索引a與照片A的rowkey之間的對應(yīng),進(jìn)而可以建立照片A的第二類屬性:地理位置信息、名稱信息、用戶ID與照片A的第一類屬性:拍攝時(shí)間信息的關(guān)聯(lián)。當(dāng)客戶端在輸入查詢條件時(shí),可以輸入拍攝時(shí)間信息、地理位置信息、名稱信息或用戶ID,當(dāng)客戶端輸入拍攝時(shí)間信息時(shí),可以直接對應(yīng)到相應(yīng)的多個(gè)rowkey,獲取相應(yīng)的在該時(shí)刻拍攝的所有照片。當(dāng)客戶端輸入拍攝時(shí)間信息和地理位置信息時(shí),根據(jù)拍攝時(shí)間信息對應(yīng)到 相應(yīng)的多個(gè)rowkey,可以獲得在該時(shí)刻拍攝的所有照片,由于客戶端同時(shí)輸入了地理位置信息,可以根據(jù)地理位置信息對應(yīng)到相應(yīng)的索引,根據(jù)索引與rowkey之間的關(guān)聯(lián),進(jìn)而對應(yīng)到相應(yīng)的rowkey,此時(shí)可以獲取到在該時(shí)刻、該地理位置上拍攝的照片。當(dāng)客戶端輸入地理位置信息時(shí),根據(jù)地理位置信息對應(yīng)到相應(yīng)的索引,根據(jù)索引與rowkey之間的關(guān)聯(lián),進(jìn)而對應(yīng)到相應(yīng)的rowkey,此時(shí)可以獲取到在地理位置上拍攝的照片。在本發(fā)明上述實(shí)施例中,在建立完成待存儲照片的第二類屬性與待存儲照片的rowkey之間的關(guān)聯(lián)之后,需要將待存儲照片的數(shù)據(jù)作為hbase表的列值存儲在hbase中,如圖3所示,步驟S300包括:S301、獲取待存儲照片轉(zhuǎn)換為字節(jié)數(shù)組后的數(shù)據(jù);S302、獲取待存儲照片的rowkey的字符,按照預(yù)設(shè)的字符順序,將待存儲照片轉(zhuǎn)換為字節(jié)數(shù)組后的數(shù)據(jù)作為hbase表的列值存儲在hbase中的相應(yīng)位置。具體的,在將待存儲照片的數(shù)據(jù)進(jìn)行存儲的過程中,需要使用一個(gè)列族data,分別存儲照片轉(zhuǎn)換為字節(jié)數(shù)組后的值、對應(yīng)該照片縮略圖轉(zhuǎn)換為字節(jié)數(shù)組后的值以及照片的第二類屬性信息。rowkey等同于關(guān)系型數(shù)據(jù)庫的主鍵,但存儲方式不同,hbase數(shù)據(jù)存儲順序是按照rowkey值的字符順序存儲的。例如,照片A的rowkey值為wx5k22nuxqbj0000000170,照片B的rowkey值為wx5k0ruqyfet0000000171,照片C的rowkey值為w7y3p2exbmvj0000000172,在對照片A、B、C存儲的過程中,按照字符先后順序進(jìn)行存儲,即存儲順序依次為:照片A、照片B和照片C。進(jìn)一步的,在對照片A、照片B和照片C進(jìn)行存儲的過程中,實(shí)際為對照片A的列、照片B的列以及照片C的列進(jìn)行存儲。需要說明的是,列中存儲的照片縮略圖,其目的是可以使得用戶對查找到的照片進(jìn)行瀏覽。列中存儲的照片的第二類屬性信息,其目的是可以提供更多的查詢依據(jù)。若僅根據(jù)rowkey來進(jìn)行查找,若客戶端輸入的查詢條件不是rowkey所對應(yīng)的第一類屬性信息,則無法進(jìn)行查找。需要說明的是,對照片縮略圖轉(zhuǎn)換為字節(jié)數(shù)組后的值以及照片的第二類屬 性信息進(jìn)行存儲,并不是一個(gè)必要的存儲,對照片縮略圖轉(zhuǎn)換為字節(jié)數(shù)組后的值進(jìn)行存儲的目的在于便于對查找到的照片進(jìn)行瀏覽,對第二類屬性信息進(jìn)行存儲的目的在于提供更多的查詢依據(jù)。本領(lǐng)域技術(shù)人員,可以根據(jù)需要來選擇是否存儲照片縮略圖以及照片的第二類屬性。如圖4所示,為本發(fā)明實(shí)施例的照片存儲流程圖。首先客戶端上傳照片,然后生成照片字節(jié)流和索引,將照片字節(jié)流和索引傳輸至照片系統(tǒng)進(jìn)行存儲。如圖5所示,為本發(fā)明實(shí)施例將hbase和solr存儲在hdfs上的框圖。在本發(fā)明上述實(shí)施例中,再將待存儲照片的數(shù)據(jù)作為hbase表的列值存儲在hbase中之后,需要根據(jù)客戶端發(fā)送的查詢請求,根據(jù)查詢請求中攜帶的第一類屬性和/或第二類屬性的查詢條件,在hbase中查詢與查詢請求匹配的照片。具體的,當(dāng)?shù)谝活悓傩詾榈乩砦恢眯畔ⅲ诙悓傩园ǎ号臄z時(shí)間信息、類別信息、用戶ID信息以及照片名稱信息時(shí)。可以根據(jù)客戶端發(fā)送的查詢請求攜帶的不同的查詢條件查詢相應(yīng)的照片。當(dāng)客戶端發(fā)送的查詢請求攜帶的是地理位置信息時(shí),根據(jù)地理位置信息對應(yīng)到相應(yīng)的rowkey,獲取相應(yīng)的照片,此時(shí)獲取得到的可能是多張照片。當(dāng)客戶端發(fā)送的查詢請求攜帶的是拍攝時(shí)間信息時(shí),根據(jù)拍攝時(shí)間信息對應(yīng)到相應(yīng)的solr上的索引,根據(jù)索引與rowkey的對應(yīng)關(guān)系,查找到相應(yīng)的照片,此時(shí)獲取得到的可能是多張照片。當(dāng)客戶端發(fā)送的查詢請求攜帶的是地理位置信息和用戶ID信息時(shí),根據(jù)地理位置信息對應(yīng)到相應(yīng)的rowkey,獲取相應(yīng)的照片,此時(shí)獲取得可能是多張照片,再根據(jù)用戶ID信息對應(yīng)到相應(yīng)的solr上的索引,根據(jù)索引與rowkey的對應(yīng)關(guān)系,查找到相應(yīng)的照片,此時(shí)由于結(jié)合了地理位置信息與用戶ID信息,可以得到確定數(shù)目的照片。即當(dāng)用戶A在某一位置上拍攝了3張照片且都進(jìn)行了存儲,則此時(shí)可以獲取到這3張照片。HBase的查詢支持3種方式:1、通過單個(gè)Rowkey訪問,即按照某個(gè)Rowkey進(jìn)行操作,這樣獲取唯一一條記錄;2、通過設(shè)置起始RowKey和終止RowKey,在這個(gè)范圍內(nèi)進(jìn)行掃描,這樣可以按指定的條件獲取一批記錄;3、全表掃描,即直接掃描整張表中所有行記錄。第一種和第二種是我們需要經(jīng)常使用的,第三種只用來做照片離線分析。需要說明的是,當(dāng)多個(gè)客戶端同時(shí)發(fā)送查詢請求時(shí),nginx接收到多個(gè)查詢請求,將接收到的查詢請求分發(fā)至多個(gè)tomcat,可以使得tomcat承載的負(fù)載較為均衡,減少nginx的承載量。需要說明的是,nginx是HTTP服務(wù)器軟件,可以通過設(shè)置實(shí)現(xiàn)許多功能,如負(fù)載均衡、目錄保護(hù)、IP訪問限制、防盜鏈、下載限速及設(shè)置多域名等。tomcat是一個(gè)免費(fèi)的開放源代碼的Web應(yīng)用服務(wù)器,屬于輕量級應(yīng)用服務(wù)器。如圖6所示,客戶端發(fā)送多個(gè)查詢請求,nginx將接收到的多個(gè)查詢請求分發(fā)至多個(gè)tomcat,tomcat根據(jù)查詢請求在照片系統(tǒng)中查詢相應(yīng)的照片,然后將查詢到的照片返回至nginx,由nginx將照片返回至客戶端。在查詢到與查詢請求匹配的照片之后,需要將照片數(shù)據(jù)傳輸至客戶端,在傳輸之前,需要獲取客戶端所支持的數(shù)據(jù)格式,將查找到照片轉(zhuǎn)化為客戶端所支持的數(shù)據(jù)格式進(jìn)行傳輸。當(dāng)客戶端是WEB瀏覽器時(shí),那就需要生成image/jpeg格式的數(shù)據(jù)流格式進(jìn)行傳輸。本發(fā)明實(shí)施例還提供一種存儲、檢索照片的裝置,如圖7所示,包括:設(shè)置模塊10,用于根據(jù)待存儲照片的預(yù)設(shè)第一類屬性,設(shè)置待存儲照片的行鍵值rowkey;建立模塊20,用于獲取待存儲照片的預(yù)設(shè)第二類屬性,建立待存儲照片的第二類屬性與rowkey之間的關(guān)聯(lián);存儲模塊30,用于按照rowkey的字符順序,將待存儲照片的數(shù)據(jù)作為hbase表的列值存儲在hbase中;查找模塊40,用于接收客戶端發(fā)送的查詢請求,根據(jù)查詢請求中攜帶的第一類屬性和/或第二類屬性的查詢條件,在hbase中查詢與查詢請求匹配的照片。其中,設(shè)置模塊10中的第一類屬性包括:地理位置信息、拍攝時(shí)間信息、類別信息以及用戶ID信息中的任一種或者任意幾種的組合;建立模塊20中的第二類屬性至少包括:地理位置信息、拍攝時(shí)間信息、類別信息、用戶ID信息以及照片名稱信息中區(qū)別于第一類屬性的信息。其中,設(shè)置模塊10進(jìn)一步用于:將第一類屬性轉(zhuǎn)化為字符串作為待存儲照片的rowkey。其中,如圖8所示,建立模塊20包括:第一建立子模塊21,用于根據(jù)待存儲照片的第二類屬性在solr上建立索引;第二建立子模塊22,用于建立索引與待存儲照片的rowkey之間的一一對應(yīng)關(guān)系。其中,存儲模塊30包括:獲取子模塊31,用于獲取待存儲照片轉(zhuǎn)換為字節(jié)數(shù)組后的數(shù)據(jù);處理子模塊32,用于獲取待存儲照片的rowkey的字符,按照預(yù)設(shè)的字符順序,將待存儲照片轉(zhuǎn)換為字節(jié)數(shù)組后的數(shù)據(jù)作為hbase表的列值存儲在hbase中的相應(yīng)位置。其中,該裝置還包括:獲取模塊50,用于在查找模塊40根據(jù)查詢請求中攜帶的第一類屬性和/或第二類屬性的查詢條件,在hbase中查詢與查詢請求匹配的照片之后,獲取客戶端所支持的數(shù)據(jù)格式;轉(zhuǎn)化模塊60,用于將查找到的與查詢請求匹配的照片轉(zhuǎn)化為客戶端所支持的數(shù)據(jù)格式進(jìn)行傳輸。本發(fā)明實(shí)施例存儲、檢索照片的方法,通過獲取待存儲照片的預(yù)設(shè)第一類屬性,設(shè)置待存儲照片的rowkey,獲取待存儲照片的預(yù)設(shè)第二類屬性,建立待存儲照片的第二類屬性與rowkey之間的關(guān)聯(lián),采用hbase的列存儲機(jī)制,將待存儲照片的數(shù)據(jù)作為hbase表的列值,使用hdfs對照片進(jìn)行存儲,根據(jù)客戶端發(fā)送的查詢請求中攜帶的第一類屬性和/或第二類屬性的查詢條件,在hbase中查詢與查詢請求匹配的照片,可以實(shí)現(xiàn)基于HDFS進(jìn)行照片數(shù)據(jù)的高容量且快速存儲,同時(shí)具有高可用性、檢索快速的優(yōu)點(diǎn),可充分發(fā)揮IO吞吐能力,成本較低,提高了用戶的體驗(yàn)性。需要說明的是,本發(fā)明實(shí)施例提供的存儲、檢索照片的裝置是應(yīng)用上述方法的裝置,則上述方法的所有實(shí)施例均適用于該裝置,且均能達(dá)到相同或相似的有益效果。以上所述是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對于本
技術(shù)領(lǐng)域:
:的普通技術(shù)人員來說,在不脫離本發(fā)明所述原理的前提下,還可以作出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng)視為本發(fā)明的保護(hù)范圍。當(dāng)前第1頁1 2 3 當(dāng)前第1頁1 2 3