本發(fā)明涉及大數(shù)據(jù)技術(shù)領(lǐng)域,尤其涉及一種分布式newsql數(shù)據(jù)庫系統(tǒng)和圖片數(shù)據(jù)查詢方法。
背景技術(shù):
hbase存儲的數(shù)據(jù)沒有數(shù)據(jù)類型之分,均為byte數(shù)組。如若要存儲圖片數(shù)據(jù)即需要將圖片數(shù)據(jù)序列化后和其他字段的數(shù)據(jù)一起存儲。在實際場景中,圖片數(shù)據(jù)屬于一次寫入多次讀取的數(shù)據(jù),而且圖片的數(shù)據(jù)會比較大,其他字段卻是會出現(xiàn)頻繁的讀寫操作,基于現(xiàn)有的hbase存儲圖片數(shù)據(jù)的方式,會導(dǎo)致當(dāng)只是查詢其他字段時造成讀取數(shù)據(jù)的性能的下降。再者因為hbase其region中的實質(zhì)數(shù)據(jù)在flush到磁盤時是需要同時flush的,這樣一并存儲也會對寫入數(shù)據(jù)的性能造成影響。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例的目的是提供一種分布式newsql數(shù)據(jù)庫系統(tǒng)及圖片數(shù)據(jù)查詢方法,滿足用戶圖片的查詢需求,解決由圖片數(shù)據(jù)所導(dǎo)致的其他字段讀取性能下降的問題。
為實現(xiàn)上述目的,本發(fā)明實施例提供了一種分布式newsql數(shù)據(jù)庫系統(tǒng),包括:
控制單元,用于以數(shù)據(jù)庫接口的方式接入用戶請求,并將所述用戶請求發(fā)送給計劃單元;還用于將查詢結(jié)果返回用戶;其中,所述用戶請求包括需要查詢的圖片數(shù)據(jù)的查詢條件,所述查詢結(jié)果為根據(jù)所述查詢條件所獲得的查詢結(jié)果;
計劃單元,用于解析所述用戶請求,編譯以及生成對應(yīng)的執(zhí)行計劃;
執(zhí)行單元,用于根據(jù)執(zhí)行計劃,啟動協(xié)同處理模塊獲取與所述用戶請求的所述查詢條件相對應(yīng)的md5;并根據(jù)獲取的所述md5查詢圖片數(shù)據(jù)表,從而獲得對應(yīng)的所述查詢結(jié)果;并返回查詢結(jié)果至所述控制單元;
hbase單元,用于儲存原始數(shù)據(jù)表和所述圖片數(shù)據(jù)表;所述hbase單元包括所述協(xié)同處理模塊,用于根據(jù)所述查詢條件查詢原始數(shù)據(jù)表,獲得相對應(yīng)的所述md5;其中hbase單元的底層增加lob類型。
與現(xiàn)有技術(shù)相比,本發(fā)明公開的一種分布式newsql數(shù)據(jù)庫系統(tǒng),通過控制單元以數(shù)據(jù)庫接口的方式接入用戶請求,并將所述用戶請求發(fā)送給計劃單元;通過計劃單元解析所述用戶請求,編譯以及生成對應(yīng)的執(zhí)行計劃;通過執(zhí)行單元根據(jù)執(zhí)行計劃,啟動協(xié)同處理模塊獲取hbase單元的原始數(shù)據(jù)表中與所述用戶請求的所述查詢條件相對應(yīng)的md5;并根據(jù)獲取的所述md5查詢hbase單元的圖片數(shù)據(jù)表,從而獲得對應(yīng)的所述查詢結(jié)果;并返回查詢結(jié)果至所述控制單元;通過控制單元將查詢結(jié)果返回用戶的技術(shù)方案,解決了現(xiàn)有技術(shù)中因圖片數(shù)據(jù)導(dǎo)致其它數(shù)據(jù)的讀取性能下降的問題,保證了用戶對圖片數(shù)據(jù)的檢索需求,同時提高其它數(shù)據(jù)的讀取性能。
進一步的,還包括分布式事務(wù)管理器,用于當(dāng)所述執(zhí)行計劃中涉及分布式事務(wù)時,協(xié)調(diào)所述執(zhí)行計劃中的多方完成分布式事務(wù)管理。
進一步的,還包括:所述hbase單元還包括hbase單元api接口,所述執(zhí)行單元用于根據(jù)獲取的所述md5通過所述hbase單元api接口查詢數(shù)據(jù)表,從而獲得對應(yīng)的所述查詢結(jié)果。
進一步的,所述數(shù)據(jù)庫接口為jdbc或odbc。
本發(fā)明實施例還提供了一種圖片數(shù)據(jù)查詢方法,基于上述本發(fā)明實施例提供的分布式newsql數(shù)據(jù)庫系統(tǒng),包括:
通過控制單元以數(shù)據(jù)庫接口的方式接入用戶請求,并將所述用戶請求發(fā)送給計劃單元;其中,所述用戶請求包括需要查詢的圖片數(shù)據(jù)的查詢條件;
通過計劃單元解析所述用戶請求,編譯以及生成對應(yīng)的執(zhí)行計劃;
通過執(zhí)行單元根據(jù)執(zhí)行計劃,啟動協(xié)同處理模塊獲取與所述用戶請求的所述查詢條件相對應(yīng)的md5;并根據(jù)獲取的所述md5查詢圖片數(shù)據(jù)表,從而獲得對應(yīng)的所述查詢結(jié)果;其中,所述原始數(shù)據(jù)表和所述圖片數(shù)據(jù)表儲存于hbase單元,hbase單元的底層增加lob類型。
通過所述執(zhí)行單元返回查詢結(jié)果至所述控制單元;
通過所述控制單元返回所述查詢結(jié)果至用戶。
與現(xiàn)有技術(shù)相比,本發(fā)明公開的一種圖片數(shù)據(jù)查詢方法,通過控制單元以數(shù)據(jù)庫接口的方式接入用戶請求,并將所述用戶請求發(fā)送給計劃單元;通過計劃單元解析所述用戶請求,編譯以及生成對應(yīng)的執(zhí)行計劃;通過執(zhí)行單元根據(jù)執(zhí)行計劃,啟動協(xié)同處理模塊獲取hbase單元的原始數(shù)據(jù)表中與所述用戶請求的所述查詢條件相對應(yīng)的md5;并根據(jù)獲取的所述md5查詢hbase單元的圖片數(shù)據(jù)表,從而獲得對應(yīng)的所述查詢結(jié)果;并返回查詢結(jié)果至所述控制單元;通過控制單元將查詢結(jié)果返回用戶的技術(shù)方案,解決了現(xiàn)有技術(shù)中因圖片數(shù)據(jù)導(dǎo)致其它數(shù)據(jù)的讀取性能下降的問題,保證了用戶對圖片數(shù)據(jù)的檢索需求,同時提高其它數(shù)據(jù)的讀取性能。
進一步的,還包括:
通過分布式事務(wù)管理器當(dāng)所述執(zhí)行計劃中涉及分布式事務(wù)時,協(xié)調(diào)所述執(zhí)行計劃中的多方完成分布式事務(wù)管理。
進一步的,所述執(zhí)行單元查詢所述圖片數(shù)據(jù)表時通過所述hbase單元的hbase單元api接口查詢所述圖片數(shù)據(jù)表,從而獲得對應(yīng)的查詢結(jié)果。
進一步的,所述數(shù)據(jù)庫接口為jdbc或odbc。
附圖說明
圖1是本發(fā)明實施例1提供的一種分布式newsql數(shù)據(jù)庫系統(tǒng)的結(jié)構(gòu)示意圖;
圖2是本發(fā)明實施例2提供的一種圖片數(shù)據(jù)查詢方法的流程示意圖;
圖3是本發(fā)明實施例2提供的一種圖片數(shù)據(jù)查詢方法的步驟s2中生成執(zhí)行計劃的流程示意圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
參見圖1,圖1是本發(fā)明實施例1提供的一種分布式newsql數(shù)據(jù)庫系統(tǒng)的結(jié)構(gòu)示意圖;本實施例的具體結(jié)構(gòu)包括:
控制單元1,用于以數(shù)據(jù)庫接口的方式接入用戶請求,并將所述用戶請求發(fā)送給計劃單元2;還用于將查詢結(jié)果返回用戶;其中,所述用戶請求包括需要查詢的圖片數(shù)據(jù)的查詢條件,所述查詢結(jié)果為根據(jù)所述查詢條件所獲得的查詢結(jié)果;
計劃單元2,用于解析所述用戶請求,編譯以及生成對應(yīng)的執(zhí)行計劃;
執(zhí)行單元3,用于根據(jù)執(zhí)行計劃,啟動協(xié)同處理模塊41獲取與所述用戶請求的所述查詢條件相對應(yīng)的md5;并根據(jù)獲取的所述md5查詢圖片數(shù)據(jù)表,從而獲得對應(yīng)的所述查詢結(jié)果;并返回查詢結(jié)果至所述控制單元1;
hbase單元4,用于儲存原始數(shù)據(jù)表和所述圖片數(shù)據(jù)表;所述hbase單元4包括所述協(xié)同處理模塊41,用于根據(jù)所述查詢條件查詢原始數(shù)據(jù)表,獲得相對應(yīng)的所述md5;其中hbase單元4的底層增加lob類型。
本實施例的hbase單元4的底層增加lob類型,提供lob存儲,而lob可以高效的滿足單條數(shù)據(jù)大小在幾百k到10m的二進制存儲需求,即hbase單元4通過lob已存儲圖片數(shù)據(jù)。lob類型參考了sql中的blob類型的實現(xiàn),將大對象存儲為數(shù)據(jù)庫中的一個位圖,但是此處的lob其實現(xiàn)為針對lob類型建立另類索引,圖片數(shù)據(jù)以位圖存儲在獨立的數(shù)據(jù)表中,原始數(shù)據(jù)表僅僅存儲索引數(shù)據(jù),以此減少數(shù)據(jù)表大小。在圖片的索引數(shù)據(jù)生成方面,圖片數(shù)據(jù)通過md5計算將md5的結(jié)果作為圖片數(shù)據(jù)的唯一索引數(shù)據(jù)。因為圖片數(shù)據(jù)只能進行原子覆蓋的修改以及相對獨立的查詢,在針對非圖片字段的查詢時能大大提升檢索速度。
進一步的,還包括分布式事務(wù)管理器,用于當(dāng)執(zhí)行計劃中涉及事務(wù)時,協(xié)調(diào)執(zhí)行計劃中的多方完成分布式事務(wù)管理。分布式事務(wù)管理器利用java事務(wù)處理api(jta)實現(xiàn)分布式事務(wù)處理和事務(wù)管理;其中,jta,即javatransactionapi,jta允許應(yīng)用程序執(zhí)行分布式事務(wù)處理——在兩個或多個網(wǎng)絡(luò)計算機資源上訪問并且更新數(shù)據(jù)。
進一步的,還包括:hbase單元4還包括hbase單元api接口,所述執(zhí)行單元3用于根據(jù)獲取的所述md5通過所述hbase單元api接口查詢數(shù)據(jù)表,從而獲得對應(yīng)的所述查詢結(jié)果。
進一步的,所述數(shù)據(jù)庫接口為jdbc或odbc。
其中,執(zhí)行單元3通過協(xié)同處理模塊41獲取與用戶請求的查詢條件相對應(yīng)的索引數(shù)據(jù)時,利用協(xié)同處理模塊41的并行性,能夠提高整體的查詢速度。且當(dāng)協(xié)同處理模塊41獲得索引數(shù)據(jù)后,hbase單元4將索引數(shù)據(jù)返回給執(zhí)行單元3,從而使執(zhí)行單元3能夠根據(jù)索引數(shù)據(jù)進一步查詢數(shù)據(jù)表,以獲得對應(yīng)的查詢結(jié)果。
進一步的,控制單元1還連接一監(jiān)視器,用于負(fù)責(zé)元數(shù)據(jù)管理以及用于監(jiān)控底層hbaseregion的負(fù)載,避免特定的region負(fù)載過高,以及利用協(xié)同處理模塊41重新分配region。
另外,控制單元1還用于協(xié)調(diào)多個角色之間的數(shù)據(jù)通訊、管理整體流程。
具體的,計劃單元2用于接收到控制單元1的用戶請求后,解析用戶請求,并通過高速sql引擎編譯sql,然后再生成執(zhí)行計劃。另外,執(zhí)行單元3還用于執(zhí)行計劃生成后返回給控制單元1。而控制單元1在接收到執(zhí)行計劃后,還用于根據(jù)執(zhí)行計劃的內(nèi)容判斷是否需要分布式事務(wù)管理器的介入,如果需要,則啟動分布式事務(wù)管理器。
計劃單元2用于生成執(zhí)行計劃的過程,具體包括:
判斷共享緩存池中是否存在與sql語句相對應(yīng)的預(yù)存sql語句,若是,則輸出與sql語句對應(yīng)的執(zhí)行計劃,若否,則
對sql語句進行語法檢查,若語法錯誤返回錯誤信息給用戶,否則,
對sql語句進行語義檢查,若語義錯誤返回錯誤信息給用戶,否則,
對sql語句進行視圖以及表達式轉(zhuǎn)換,獲得對應(yīng)的轉(zhuǎn)化結(jié)果;
根據(jù)轉(zhuǎn)換結(jié)果選擇優(yōu)化器,獲得對應(yīng)的優(yōu)化器選擇結(jié)果;
根據(jù)優(yōu)化器選擇結(jié)果選擇對應(yīng)的數(shù)據(jù)連接方式以及連接順序;
根據(jù)連接方式和連接順序選擇搜索的路徑;
根據(jù)搜索路徑生成執(zhí)行計劃,并輸出執(zhí)行計劃。
具體實施時,通過控制單元1以數(shù)據(jù)庫接口的方式接入用戶請求,并將所述用戶請求發(fā)送給計劃單元2;通過計劃單元2解析所述用戶請求,編譯以及生成對應(yīng)的執(zhí)行計劃;通過執(zhí)行單元3根據(jù)執(zhí)行計劃,啟動協(xié)同處理模塊41獲取hbase單元4的原始數(shù)據(jù)表中與所述用戶請求的所述查詢條件相對應(yīng)的md5;并根據(jù)獲取的所述md5查詢hbase單元4的圖片數(shù)據(jù)表,從而獲得對應(yīng)的所述查詢結(jié)果;并返回查詢結(jié)果至所述控制單元1;通過控制單元1將查詢結(jié)果返回用戶。
本實施例解決了現(xiàn)有技術(shù)中因圖片數(shù)據(jù)導(dǎo)致其它數(shù)據(jù)的讀取性能下降的問題,保證了用戶對圖片數(shù)據(jù)的檢索需求,同時提高其它數(shù)據(jù)的讀取性能。
參見圖2,圖2是本發(fā)明實施例2提供的一種圖片數(shù)據(jù)查詢方法的流程示意圖;本實施例2提供的圖片數(shù)據(jù)查詢方法為基于上述實施例1提供的分布式newsql數(shù)據(jù)庫系統(tǒng),本實施例2包括下述步驟:
s1、通過控制單元1以數(shù)據(jù)庫接口的方式接入用戶請求,并將所述用戶請求發(fā)送給計劃單元2;其中,所述用戶請求包括需要查詢的圖片數(shù)據(jù)的查詢條件;
s2、通過計劃單元2解析所述用戶請求,編譯以及生成對應(yīng)的執(zhí)行計劃;
s3、通過執(zhí)行單元3根據(jù)執(zhí)行計劃,啟動協(xié)同處理模塊獲取與所述用戶請求的所述查詢條件相對應(yīng)的md5;并根據(jù)獲取的所述md5查詢圖片數(shù)據(jù)表,從而獲得對應(yīng)的所述查詢結(jié)果;其中,所述原始數(shù)據(jù)表和所述圖片數(shù)據(jù)表儲存于hbase單元4,hbase單元4的底層增加lob類型。
s4、通過所述執(zhí)行單元3返回查詢結(jié)果至所述控制單元1;
s5、通過所述控制單元1返回所述查詢結(jié)果至用戶。
本實施例的hbase單元4的底層增加lob類型,提供lob存儲,而lob可以高效的滿足單條數(shù)據(jù)大小在幾百k到10m的二進制存儲需求,即hbase單元4通過lob已存儲圖片數(shù)據(jù)。lob類型參考了sql中的blob類型的實現(xiàn),將大對象存儲為數(shù)據(jù)庫中的一個位圖,但是此處的lob其實現(xiàn)為針對lob類型建立另類索引,圖片數(shù)據(jù)以位圖存儲在獨立的數(shù)據(jù)表中,原始數(shù)據(jù)表僅僅存儲索引數(shù)據(jù),以此減少數(shù)據(jù)表大小。在圖片的索引數(shù)據(jù)生成方面,圖片數(shù)據(jù)通過md5計算將md5的結(jié)果作為圖片數(shù)據(jù)的唯一索引數(shù)據(jù)。因為圖片數(shù)據(jù)只能進行原子覆蓋的修改以及相對獨立的查詢,在針對非圖片字段的查詢時能大大提升檢索速度。
進一步的,還包括:
通過分布式事務(wù)管理器當(dāng)所述執(zhí)行計劃中涉及分布式事務(wù)時,協(xié)調(diào)所述執(zhí)行計劃中的多方完成分布式事務(wù)管理。
進一步的,所述執(zhí)行單元3查詢所述圖片數(shù)據(jù)表時通過所述hbase單元4的hbase單元api接口查詢所述圖片數(shù)據(jù)表,從而獲得對應(yīng)的查詢結(jié)果。
進一步的,所述數(shù)據(jù)庫接口為jdbc或odbc。
其中,通過協(xié)同處理模塊41獲取與用戶請求的查詢條件相對應(yīng)的索引數(shù)據(jù)時,利用協(xié)同處理模塊41的并行性,能夠提高整體的查詢速度。且當(dāng)協(xié)同處理模塊41獲得md5后,hbase單元將md5返回給執(zhí)行單元3,從而使執(zhí)行單元3能夠根據(jù)md5進一步查詢數(shù)據(jù)表,以獲得對應(yīng)的查詢結(jié)果。
具體的,通過計劃單元2接收到控制單元1的用戶請求后,解析用戶請求,并通過高速sql引擎編譯sql,然后再生成執(zhí)行計劃。另外,通過執(zhí)行單元2還執(zhí)行計劃生成后返回給控制單元1。通過控制單元1還在接收到執(zhí)行計劃后,根據(jù)執(zhí)行計劃的內(nèi)容判斷是否需要分布式事務(wù)管理器的介入,如果需要,則啟動分布式事務(wù)管理器。
其中,參見圖3,圖3為步驟s2中通過計劃單元2生成執(zhí)行計劃的流程示意圖,具體包括:
s201、判斷共享緩存池中是否存在與sql語句相對應(yīng)的預(yù)存sql語句,若是,則輸出與sql語句對應(yīng)的執(zhí)行計劃,若否,則
s202、對sql語句進行語法檢查,若語法錯誤返回錯誤信息給用戶,否則,
s203、對sql語句進行語義檢查,若語義錯誤返回錯誤信息給用戶,否則,
s204、對sql語句進行視圖以及表達式轉(zhuǎn)換,獲得對應(yīng)的轉(zhuǎn)化結(jié)果;
s205、根據(jù)轉(zhuǎn)換結(jié)果選擇優(yōu)化器,獲得對應(yīng)的優(yōu)化器選擇結(jié)果;
s206、根據(jù)優(yōu)化器選擇結(jié)果選擇對應(yīng)的數(shù)據(jù)連接方式以及連接順序;
s207、根據(jù)連接方式和連接順序選擇搜索的路徑;
s208、根據(jù)搜索路徑生成執(zhí)行計劃,并輸出執(zhí)行計劃。
具體實施時,通過控制單元1以數(shù)據(jù)庫接口的方式接入用戶請求,并將所述用戶請求發(fā)送給計劃單元2;通過計劃單元2解析所述用戶請求,編譯以及生成對應(yīng)的執(zhí)行計劃;通過執(zhí)行單元3根據(jù)執(zhí)行計劃,啟動協(xié)同處理模塊41獲取hbase單元4的原始數(shù)據(jù)表中與所述用戶請求的所述查詢條件相對應(yīng)的md5;并根據(jù)獲取的所述md5查詢hbase單元4的圖片數(shù)據(jù)表,從而獲得對應(yīng)的所述查詢結(jié)果;并返回查詢結(jié)果至所述控制單元1;通過控制單元1將查詢結(jié)果返回用戶。
本實施例解決了現(xiàn)有技術(shù)中因圖片數(shù)據(jù)導(dǎo)致其它數(shù)據(jù)的讀取性能下降的問題,保證了用戶對圖片數(shù)據(jù)的檢索需求,同時提高其它數(shù)據(jù)的讀取性能。
以上所述是本發(fā)明的優(yōu)選實施方式,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也視為本發(fā)明的保護范圍。