一種數(shù)據(jù)庫(kù)集群數(shù)據(jù)分配方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)庫(kù)相關(guān)技術(shù)領(lǐng)域,特別是一種數(shù)據(jù)庫(kù)集群數(shù)據(jù)分配方法及系統(tǒng)。
【背景技術(shù)】
[0002]隨著對(duì)查詢條件的多樣化,和查詢性能要求越來(lái)越高,現(xiàn)在很多業(yè)務(wù)都是用數(shù)據(jù)庫(kù)集群,例如-SolrCloud,作為查詢引擎。Solr是一個(gè)獨(dú)立的企業(yè)級(jí)搜索應(yīng)用服務(wù)器,類(lèi)似于數(shù)據(jù)庫(kù),它對(duì)外提供類(lèi)似于Web-service的API接口。用戶可以通過(guò)http請(qǐng)求,向搜索引擎服務(wù)器提交一定格式的XML文件,生成索引;也可以通過(guò)Http Get操作提出查找請(qǐng)求,并得到XML格式的返回結(jié)果。SolrCloud是對(duì)若干個(gè)solr應(yīng)用提供的一套集群部署方案。
[0003]然而,隨著數(shù)據(jù)量的增長(zhǎng),數(shù)據(jù)就需要做分片存儲(chǔ),數(shù)據(jù)庫(kù)集群提供的分片機(jī)制不能很好的滿足業(yè)務(wù)需求,比如說(shuō)自定義分片鍵數(shù)據(jù)不能均勻分布。
【發(fā)明內(nèi)容】
[0004]基于此,有必要針對(duì)現(xiàn)有技術(shù)的數(shù)據(jù)庫(kù)集群的分片機(jī)制不能很好的滿足業(yè)務(wù)需求的技術(shù)問(wèn)題,提供一種數(shù)據(jù)庫(kù)集群數(shù)據(jù)分配方法及系統(tǒng)。
[0005]—種數(shù)據(jù)庫(kù)集群數(shù)據(jù)分配方法,包括:
[0006]定時(shí)檢測(cè)步驟,包括:定時(shí)檢測(cè)數(shù)據(jù)庫(kù)集群中所有數(shù)據(jù)庫(kù)集合的數(shù)據(jù)存儲(chǔ)情況,獲取數(shù)據(jù)存儲(chǔ)量超出閥值的數(shù)據(jù)庫(kù)集合作為待分割數(shù)據(jù)庫(kù)集合,將待分割數(shù)據(jù)庫(kù)集合設(shè)置為分割狀態(tài);
[0007]轉(zhuǎn)移步驟,包括:對(duì)待分割數(shù)據(jù)庫(kù)集合根據(jù)預(yù)設(shè)分割規(guī)則進(jìn)行預(yù)分割,得到分割后的新集合數(shù)量,創(chuàng)建新集合數(shù)量的轉(zhuǎn)移數(shù)據(jù)庫(kù)集合,根據(jù)分割規(guī)則確定待分割數(shù)據(jù)庫(kù)集合所對(duì)應(yīng)的多個(gè)轉(zhuǎn)移數(shù)據(jù)庫(kù)集合,將待分割數(shù)據(jù)庫(kù)集合中的數(shù)據(jù)轉(zhuǎn)移到轉(zhuǎn)移數(shù)據(jù)庫(kù)集合;
[0008]寫(xiě)入步驟,包括:客戶端從集群的路由規(guī)則服務(wù)器中獲取待寫(xiě)入數(shù)據(jù)庫(kù)集合的鏈接,根據(jù)鏈接向集群寫(xiě)入數(shù)據(jù),集群的路由器響應(yīng)于客戶端的寫(xiě)入數(shù)據(jù)信息,將寫(xiě)入數(shù)據(jù)信息的鏈接所指定的數(shù)據(jù)庫(kù)集合作為當(dāng)前數(shù)據(jù)庫(kù)集合,判斷當(dāng)前數(shù)據(jù)庫(kù)集合是否為分割狀態(tài),如果為分割狀態(tài),則根據(jù)分割規(guī)則獲取當(dāng)前數(shù)據(jù)庫(kù)集合所對(duì)應(yīng)的轉(zhuǎn)移數(shù)據(jù)庫(kù)集合,將客戶端所寫(xiě)入的數(shù)據(jù)同時(shí)寫(xiě)入當(dāng)前數(shù)據(jù)庫(kù)集合和轉(zhuǎn)移數(shù)據(jù)庫(kù)集合;
[0009]數(shù)據(jù)庫(kù)集合卸載步驟,包括:當(dāng)將待分割數(shù)據(jù)庫(kù)集合中的數(shù)據(jù)轉(zhuǎn)移到轉(zhuǎn)移數(shù)據(jù)庫(kù)集合后,從數(shù)據(jù)庫(kù)集群中卸載待分割數(shù)據(jù)庫(kù)集合
[0010]一種數(shù)據(jù)庫(kù)集群數(shù)據(jù)分配系統(tǒng),包括:
[0011]定時(shí)檢測(cè)模塊,用于:定時(shí)檢測(cè)數(shù)據(jù)庫(kù)集群中所有數(shù)據(jù)庫(kù)集合的數(shù)據(jù)存儲(chǔ)情況,獲取數(shù)據(jù)存儲(chǔ)量超出閥值的數(shù)據(jù)庫(kù)集合作為待分割數(shù)據(jù)庫(kù)集合,將待分割數(shù)據(jù)庫(kù)集合設(shè)置為分割狀態(tài);
[0012]轉(zhuǎn)移模塊,用于:對(duì)待分割數(shù)據(jù)庫(kù)集合根據(jù)預(yù)設(shè)分割規(guī)則進(jìn)行預(yù)分割,得到分割后的新集合數(shù)量,創(chuàng)建新集合數(shù)量的轉(zhuǎn)移數(shù)據(jù)庫(kù)集合,根據(jù)分割規(guī)則確定待分割數(shù)據(jù)庫(kù)集合所對(duì)應(yīng)的多個(gè)轉(zhuǎn)移數(shù)據(jù)庫(kù)集合,將待分割數(shù)據(jù)庫(kù)集合中的數(shù)據(jù)轉(zhuǎn)移到轉(zhuǎn)移數(shù)據(jù)庫(kù)集合;
[0013]寫(xiě)入模塊,用于:客戶端從集群的路由規(guī)則服務(wù)器中獲取待寫(xiě)入數(shù)據(jù)庫(kù)集合的鏈接,根據(jù)鏈接向集群寫(xiě)入數(shù)據(jù),集群的路由器響應(yīng)于客戶端的寫(xiě)入數(shù)據(jù)信息,將寫(xiě)入數(shù)據(jù)信息的鏈接所指定的數(shù)據(jù)庫(kù)集合作為當(dāng)前數(shù)據(jù)庫(kù)集合,判斷當(dāng)前數(shù)據(jù)庫(kù)集合是否為分割狀態(tài),如果為分割狀態(tài),則根據(jù)分割規(guī)則獲取當(dāng)前數(shù)據(jù)庫(kù)集合所對(duì)應(yīng)的轉(zhuǎn)移數(shù)據(jù)庫(kù)集合,將客戶端所寫(xiě)入的數(shù)據(jù)同時(shí)寫(xiě)入當(dāng)前數(shù)據(jù)庫(kù)集合和轉(zhuǎn)移數(shù)據(jù)庫(kù)集合;
[0014]數(shù)據(jù)庫(kù)集合卸載模塊,用于:當(dāng)將待分割數(shù)據(jù)庫(kù)集合中的數(shù)據(jù)轉(zhuǎn)移到轉(zhuǎn)移數(shù)據(jù)庫(kù)集合后,從數(shù)據(jù)庫(kù)集群中卸載待分割數(shù)據(jù)庫(kù)集合。
[0015]本發(fā)明通過(guò)對(duì)數(shù)據(jù)庫(kù)集群定時(shí)檢測(cè),從而將數(shù)據(jù)存儲(chǔ)量超出閥值的數(shù)據(jù)庫(kù)集合分割為多個(gè)數(shù)據(jù)庫(kù),以實(shí)現(xiàn)數(shù)據(jù)均勻分布,同時(shí)對(duì)于在分割轉(zhuǎn)移過(guò)程中的客戶端寫(xiě)入數(shù)據(jù)請(qǐng)求,通過(guò)同時(shí)向兩個(gè)數(shù)據(jù)庫(kù)寫(xiě)入的方式,避免對(duì)客戶端寫(xiě)入造成影響。
【附圖說(shuō)明】
[0016]圖1為本發(fā)明一種數(shù)據(jù)庫(kù)集群數(shù)據(jù)分配方法的工作流程圖;
[0017]圖2為本發(fā)明的一個(gè)最佳實(shí)施例;
[0018]圖3為本發(fā)明一種數(shù)據(jù)庫(kù)集群數(shù)據(jù)分配系統(tǒng)的結(jié)構(gòu)模塊圖。
【具體實(shí)施方式】
[0019]下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明做進(jìn)一步詳細(xì)的說(shuō)明。
[0020]如圖1所示為本發(fā)明一種數(shù)據(jù)庫(kù)集群數(shù)據(jù)分配方法的工作流程圖,包括:
[0021]步驟S101,包括:定時(shí)檢測(cè)數(shù)據(jù)庫(kù)集群中所有數(shù)據(jù)庫(kù)集合的數(shù)據(jù)存儲(chǔ)情況,獲取數(shù)據(jù)存儲(chǔ)量超出閥值的數(shù)據(jù)庫(kù)集合作為待分割數(shù)據(jù)庫(kù)集合,將待分割數(shù)據(jù)庫(kù)集合設(shè)置為分割狀態(tài);
[0022]步驟S102,包括:對(duì)待分割數(shù)據(jù)庫(kù)集合根據(jù)預(yù)設(shè)分割規(guī)則進(jìn)行預(yù)分割,得到分割后的新集合數(shù)量,創(chuàng)建新集合數(shù)量的轉(zhuǎn)移數(shù)據(jù)庫(kù)集合,根據(jù)分割規(guī)則確定待分割數(shù)據(jù)庫(kù)集合所對(duì)應(yīng)的多個(gè)轉(zhuǎn)移數(shù)據(jù)庫(kù)集合,將待分割數(shù)據(jù)庫(kù)集合中的數(shù)據(jù)轉(zhuǎn)移到轉(zhuǎn)移數(shù)據(jù)庫(kù)集合;
[0023]步驟S103,包括:客戶端從集群的路由規(guī)則服務(wù)器中獲取待寫(xiě)入數(shù)據(jù)庫(kù)集合的鏈接,根據(jù)鏈接向集群寫(xiě)入數(shù)據(jù),集群的路由器響應(yīng)于客戶端的寫(xiě)入數(shù)據(jù)信息,將寫(xiě)入數(shù)據(jù)信息的鏈接所指定的數(shù)據(jù)庫(kù)集合作為當(dāng)前數(shù)據(jù)庫(kù)集合,判斷當(dāng)前數(shù)據(jù)庫(kù)集合是否為分割狀態(tài),如果為分割狀態(tài),則根據(jù)分割規(guī)則獲取當(dāng)前數(shù)據(jù)庫(kù)集合所對(duì)應(yīng)的轉(zhuǎn)移數(shù)據(jù)庫(kù)集合,將客戶端所寫(xiě)入的數(shù)據(jù)同時(shí)寫(xiě)入當(dāng)前數(shù)據(jù)庫(kù)集合和轉(zhuǎn)移數(shù)據(jù)庫(kù)集合;
[0024]步驟S104,包括:當(dāng)將待分割數(shù)據(jù)庫(kù)集合中的數(shù)據(jù)轉(zhuǎn)移到轉(zhuǎn)移數(shù)據(jù)庫(kù)集合后,從數(shù)據(jù)庫(kù)集群中卸載待分割數(shù)據(jù)庫(kù)集合。
[0025]步驟S101,對(duì)數(shù)據(jù)庫(kù)集群的情況進(jìn)行定時(shí)檢測(cè),具體可以采用一個(gè)專(zhuān)門(mén)部署定時(shí)任務(wù)的服務(wù)器,采用定時(shí)任務(wù),每一小時(shí)檢測(cè)一次。然后由步驟S102執(zhí)行分割和轉(zhuǎn)移。其中,分割規(guī)則由集群的管理員預(yù)先設(shè)定。在執(zhí)行步驟S102的過(guò)程中,客戶端向數(shù)據(jù)庫(kù)集群寫(xiě)入數(shù)據(jù),則觸發(fā)步驟S103,由于集群中包括多個(gè)數(shù)據(jù)庫(kù)集合,客戶端并不能確定所要寫(xiě)入數(shù)據(jù)的最終的數(shù)據(jù)庫(kù)集合,因此客戶端向數(shù)據(jù)庫(kù)集群寫(xiě)入數(shù)據(jù)時(shí)會(huì)先從路由規(guī)則服務(wù)器中獲取待寫(xiě)入數(shù)據(jù)庫(kù)集合的鏈接,然后向數(shù)據(jù)庫(kù)集群寫(xiě)入數(shù)據(jù),寫(xiě)入數(shù)據(jù)信息會(huì)先傳遞到路由器,然后由路由器判斷客戶端所要訪問(wèn)的當(dāng)前數(shù)據(jù)庫(kù)集合是否為分割狀態(tài),如果是分割狀態(tài),則將客戶端所寫(xiě)入的數(shù)據(jù)同時(shí)寫(xiě)入當(dāng)前數(shù)據(jù)庫(kù)集合和轉(zhuǎn)移數(shù)據(jù)庫(kù)集合,因此客戶端并不會(huì)需要更新其寫(xiě)入目標(biāo),同時(shí)數(shù)據(jù)也能保存在轉(zhuǎn)移數(shù)據(jù)庫(kù)集合中,而如果當(dāng)前數(shù)據(jù)庫(kù)集合的狀態(tài)不是分割狀態(tài),則采用正常的方式,寫(xiě)入當(dāng)前數(shù)據(jù)庫(kù)集合即可。當(dāng)轉(zhuǎn)移完成后執(zhí)行步驟S104將待分割數(shù)據(jù)庫(kù)集合卸載,則后續(xù)所有對(duì)數(shù)據(jù)庫(kù)的查詢或者寫(xiě)入,將由新的轉(zhuǎn)移數(shù)據(jù)庫(kù)集合進(jìn)行處理。
[0026]如圖2所示為本發(fā)明的一個(gè)最佳實(shí)施例的工作流程圖,數(shù)據(jù)庫(kù)集合為包括多個(gè)solr數(shù)據(jù)庫(kù)的SolrCloud,具體包括:
[0027]步驟S201,定時(shí)任務(wù)每隔一段時(shí)間,檢測(cè)所有solr數(shù)據(jù)庫(kù)集合的數(shù)據(jù)分布情況,得到數(shù)據(jù)超出閥值的數(shù)據(jù)庫(kù)集合,設(shè)置此數(shù)據(jù)庫(kù)集合為分割狀態(tài),然后通過(guò)消息觸發(fā)步驟S202的任務(wù)分割功能;
[0028]步驟S202:任務(wù)分割功能,根據(jù)規(guī)則預(yù)分割數(shù)據(jù)庫(kù)集合,得到分成子數(shù)據(jù)庫(kù)集合的數(shù)量。根據(jù)得到的數(shù)量創(chuàng)建對(duì)應(yīng)的數(shù)量的新數(shù)據(jù)庫(kù)集合,步驟S201中設(shè)置為分割狀態(tài)的數(shù)據(jù)庫(kù)集合為老數(shù)據(jù)庫(kù)集合,將老數(shù)據(jù)庫(kù)集合上當(dāng)前時(shí)間點(diǎn)以前的數(shù)據(jù)分發(fā)到新數(shù)據(jù)庫(kù)集合里;
[0029]步驟S203,客戶端往solr服務(wù)器插入數(shù)據(jù)時(shí),通過(guò)自定義的分片字段,通過(guò)算法規(guī)則路由到實(shí)際插入的當(dāng)前數(shù)據(jù)庫(kù)集合。此時(shí)判斷當(dāng)前數(shù)據(jù)庫(kù)集合是不是分割狀態(tài),如果是分割狀態(tài),得到新數(shù)據(jù)庫(kù)集合的名字,向當(dāng)前數(shù)據(jù)庫(kù)集合和新數(shù)據(jù)庫(kù)集合進(jìn)行雙寫(xiě)操作;
[0030]步驟S204,當(dāng)步驟S202執(zhí)行完成后,修改路由規(guī)則,將老數(shù)據(jù)庫(kù)集合卸載掉。
[0031]本發(fā)明通過(guò)對(duì)數(shù)據(jù)庫(kù)集群定時(shí)檢測(cè),從而將數(shù)據(jù)存儲(chǔ)量超出閥值的數(shù)據(jù)庫(kù)集合分割為多個(gè)數(shù)據(jù)庫(kù)集合,以實(shí)現(xiàn)數(shù)據(jù)均勻分布,能讓數(shù)據(jù)庫(kù)集群在數(shù)據(jù)持續(xù)增長(zhǎng)的情況下,能夠很好的擴(kuò)展,并讓數(shù)據(jù)盡可能的保持均勻分布。同時(shí)對(duì)于在分割轉(zhuǎn)移過(guò)程中的客戶端寫(xiě)入數(shù)據(jù)請(qǐng)求,通過(guò)同時(shí)向兩個(gè)數(shù)據(jù)庫(kù)集合寫(xiě)入的方式,避免對(duì)客戶端寫(xiě)入造成影響。
[0032]在其中一個(gè)實(shí)施例中,所述步驟S104,具體包括:
[0033]從集群的路由規(guī)則服務(wù)器中,將指向待分割數(shù)據(jù)庫(kù)集合的鏈接替換為指向轉(zhuǎn)移數(shù)據(jù)庫(kù)集合,所述客戶端在進(jìn)行查詢和寫(xiě)入操作時(shí),從所述路由規(guī)則服務(wù)器獲取鏈接。
[0034]本實(shí)施例的方式,使得客戶端對(duì)數(shù)據(jù)庫(kù)集群的分割轉(zhuǎn)移行為透明。
[0035]在其中一個(gè)實(shí)施例中,所述步驟S103,具體包括:
[0036]客戶端從集群的路由規(guī)則服務(wù)器中獲取待寫(xiě)入數(shù)據(jù)庫(kù)集合的鏈接,根據(jù)鏈接向集群寫(xiě)入數(shù)據(jù),集群的路由器響應(yīng)于客戶端的寫(xiě)入數(shù)據(jù)信息,將寫(xiě)入數(shù)據(jù)信息的鏈接所指定的數(shù)據(jù)庫(kù)集合作為當(dāng)前數(shù)據(jù)庫(kù)集合,集群的路由器判斷當(dāng)前數(shù)據(jù)庫(kù)集合是否為分割狀態(tài),如果為分割狀態(tài),則根據(jù)分割規(guī)則獲取當(dāng)前數(shù)據(jù)庫(kù)集合所對(duì)應(yīng)的轉(zhuǎn)移數(shù)據(jù)庫(kù)集合,將客戶端所寫(xiě)入的數(shù)據(jù)同時(shí)轉(zhuǎn)發(fā)到當(dāng)前數(shù)據(jù)庫(kù)集合和轉(zhuǎn)移數(shù)據(jù)庫(kù)集合。
[0037]在其中一個(gè)實(shí)施例中,所述客戶端從集群的路由規(guī)則服務(wù)器中獲取待寫(xiě)入數(shù)據(jù)庫(kù)集合的鏈接,具體包括:客戶端向集群的路由規(guī)則服務(wù)器發(fā)出包括分片字段的寫(xiě)入數(shù)據(jù)請(qǐng)求,從路由規(guī)則服務(wù)器中獲取關(guān)于所述分片字段的待寫(xiě)入數(shù)據(jù)庫(kù)集合的鏈接。
[0038]分片字段由管理員或用戶自行指定,例如可以指定不同商品使用不同的分片字段。本實(shí)施例使得數(shù)據(jù)分配更自由,可以應(yīng)對(duì)數(shù)據(jù)的持續(xù)增長(zhǎng)。
[0039]在其中一個(gè)實(shí)施例中,所述步驟S102中,所述對(duì)待分割數(shù)據(jù)庫(kù)集合根據(jù)預(yù)設(shè)分割規(guī)則進(jìn)行預(yù)分割,得到分割后的新集合數(shù)量,具體包括:
[0040]獲取待分割數(shù)據(jù)庫(kù)集合的數(shù)據(jù)存儲(chǔ)量m,以及預(yù)設(shè)的單個(gè)數(shù)據(jù)庫(kù)集合的優(yōu)選存儲(chǔ)量k,則分割后的新集合數(shù)量n