一種基于路由算法的數(shù)據(jù)庫(kù)分片方法、系統(tǒng)和中間件系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種基于路由算法的數(shù)據(jù)庫(kù)分片方法、系統(tǒng)和中間件系統(tǒng),屬于數(shù)據(jù)庫(kù)技術(shù)領(lǐng)域。
【背景技術(shù)】
[0002]在信息技術(shù)時(shí)代,數(shù)據(jù)急劇膨脹,以購(gòu)物網(wǎng)站為例,比如用戶(hù)達(dá)到百萬(wàn)級(jí)以后,其所帶來(lái)的站內(nèi)信、系統(tǒng)消息等與用戶(hù)個(gè)人相關(guān)的數(shù)據(jù)都將達(dá)到千萬(wàn)級(jí)以上,甚至達(dá)到億級(jí)數(shù)據(jù)。所以開(kāi)始采用主從(Master/Salve)讀寫(xiě)分離技術(shù),分散服務(wù)器的壓力。但是主從同步之間的各方面性能開(kāi)銷(xiāo)也很大。
[0003]為了解決這個(gè)難題,數(shù)據(jù)庫(kù)管理者會(huì)在單一的Master/Salve模式的基礎(chǔ)之上進(jìn)行數(shù)據(jù)庫(kù)的垂直分區(qū)(分庫(kù))。所謂垂直分區(qū)指的是可以根據(jù)業(yè)務(wù)自身的不同,將原本冗余在一個(gè)數(shù)據(jù)庫(kù)內(nèi)的業(yè)務(wù)表拆散,將數(shù)據(jù)分別存儲(chǔ)在不同的數(shù)據(jù)庫(kù)中;但是即使設(shè)置了索引,仍然無(wú)法掩蓋因?yàn)閿?shù)據(jù)量過(guò)大從而導(dǎo)致的數(shù)據(jù)庫(kù)性能下降的事實(shí),因此這個(gè)時(shí)候數(shù)據(jù)庫(kù)管理者就對(duì)數(shù)據(jù)庫(kù)進(jìn)行水平分區(qū)(分表),所謂水平分區(qū)指的是將一個(gè)業(yè)務(wù)表拆分成多個(gè)子表,子表之間通過(guò)某種契約關(guān)聯(lián)在一起。
[0004]即使采用分庫(kù)分表的方法對(duì)數(shù)據(jù)庫(kù)進(jìn)行處理,隨著數(shù)據(jù)更新速度的提高和數(shù)據(jù)更新量呈幾何量增長(zhǎng),原本一個(gè)數(shù)據(jù)庫(kù)能夠完成的CRUD操作,在分庫(kù)分表模式之后,顯得復(fù)雜和麻煩,直接反應(yīng)到數(shù)據(jù)的CRUD效率降低上面,其中CRUD為增加(Create)、讀取(Retrieve)、更新(Update)和刪除(Delete)幾個(gè)單詞的首字母簡(jiǎn)寫(xiě)。
【發(fā)明內(nèi)容】
[0005]針對(duì)現(xiàn)有技術(shù)存在的問(wèn)題,提出了本發(fā)明的技術(shù)方案。
[0006]本發(fā)明一方面提供一種基于路由算法的數(shù)據(jù)庫(kù)分片方法,包括以下步驟:
[0007]A、數(shù)據(jù)庫(kù)中間件接收數(shù)據(jù)庫(kù)應(yīng)用層訪問(wèn)請(qǐng)求,所述訪問(wèn)請(qǐng)求包括數(shù)據(jù)讀寫(xiě);
[0008]B、所述數(shù)據(jù)庫(kù)中間件對(duì)寫(xiě)入的數(shù)據(jù)分片,并根據(jù)數(shù)據(jù)路由分配到數(shù)據(jù)庫(kù)集群;
[0009]C、所述數(shù)據(jù)庫(kù)中間件根據(jù)所述數(shù)據(jù)路由讀取數(shù)據(jù)庫(kù)集群的分片數(shù)據(jù)。
[0010]優(yōu)選地?cái)?shù)據(jù)庫(kù)中間件接收數(shù)據(jù)庫(kù)應(yīng)用層訪問(wèn)請(qǐng)求之前,還加載預(yù)設(shè)的配置文件,配置文件包括數(shù)據(jù)庫(kù)應(yīng)用層與中間件連接命令表,數(shù)據(jù)中間件與數(shù)據(jù)庫(kù)集群對(duì)應(yīng)關(guān)系表,數(shù)據(jù)路由配置規(guī)則。
[0011]優(yōu)選地?cái)?shù)據(jù)庫(kù)中間件在對(duì)寫(xiě)入的數(shù)據(jù)分片之前,還包括設(shè)定分片的類(lèi)型,其中,分片的類(lèi)型包括:一庫(kù)一片和庫(kù)內(nèi)分片。
[0012]優(yōu)選地所述數(shù)據(jù)庫(kù)中間件對(duì)寫(xiě)入的數(shù)據(jù)分片之后,數(shù)據(jù)路由根據(jù)分片的類(lèi)型和分片的片名類(lèi)型計(jì)算并給分片數(shù)據(jù)分配片名,將分配了片名的分片數(shù)據(jù)分配到數(shù)據(jù)庫(kù)集群。
[0013]優(yōu)選地所述分片片名類(lèi)型包括:全局片名和集群內(nèi)片名;
[0014]其中全局片名是指所有分片數(shù)據(jù)的片名為唯一的片名;
[0015]集群內(nèi)片名是指數(shù)據(jù)庫(kù)集群內(nèi)的每一個(gè)數(shù)據(jù)庫(kù)的分片數(shù)據(jù)的片名在該數(shù)據(jù)庫(kù)內(nèi)唯一。
[0016]優(yōu)選地所述數(shù)據(jù)路由根據(jù)數(shù)據(jù)路由配置規(guī)則讀取數(shù)據(jù)庫(kù)集群的分片數(shù)據(jù),將分片數(shù)據(jù)集合,并將集合后的數(shù)據(jù)輸出。
[0017]優(yōu)選地解析所述分片對(duì)應(yīng)的SQL語(yǔ)句,并對(duì)解析后的SQL語(yǔ)句進(jìn)行分析,以確定分配了片名的分片數(shù)據(jù)的數(shù)據(jù)路由參數(shù);
[0018]將所述分配了片名的分片數(shù)據(jù)的路由參數(shù)發(fā)送至數(shù)據(jù)路由,根據(jù)所述數(shù)據(jù)路由配置規(guī)則執(zhí)行路由過(guò)程,以得到符合訪問(wèn)要求的數(shù)據(jù)。
[0019]本發(fā)明的另一個(gè)方面提出了一種基于數(shù)據(jù)路由的中間件系統(tǒng),包括:
[0020]數(shù)據(jù)庫(kù)應(yīng)用層連接模塊,用于接收應(yīng)用層的指令、傳遞數(shù)據(jù);
[0021]路由處理模塊,用于通過(guò)數(shù)據(jù)路由將數(shù)據(jù)分片并分配存儲(chǔ)位置;
[0022]數(shù)據(jù)庫(kù)集群連接模塊,用于接收中間件路由層分配的存儲(chǔ)位置信息并將分片數(shù)據(jù)儲(chǔ)存在對(duì)應(yīng)數(shù)據(jù)庫(kù)。
[0023]所述一種基于路由算法的數(shù)據(jù)庫(kù)分片系統(tǒng),包括:
[0024]數(shù)據(jù)庫(kù)應(yīng)用模塊,用于接收應(yīng)用軟件輸入的數(shù)據(jù)、向應(yīng)用軟件輸出數(shù)據(jù);
[0025]數(shù)據(jù)庫(kù)中間件模塊,接收應(yīng)用層的指令、傳遞數(shù)據(jù)、通過(guò)數(shù)據(jù)路由將數(shù)據(jù)分片并分配存儲(chǔ)位置;
[0026]數(shù)據(jù)庫(kù)集群模塊,用于存儲(chǔ)數(shù)據(jù)。
[0027]本發(fā)明的有益效果為:基于數(shù)據(jù)路由的分片方法,對(duì)大量的數(shù)據(jù)進(jìn)行分片,基于分片類(lèi)型和分片的片名類(lèi)型的數(shù)據(jù)路由參數(shù)計(jì)算,能快速訪問(wèn)目標(biāo)分片數(shù)據(jù)。通過(guò)合理的分片方法和直接有效的數(shù)據(jù)查找機(jī)制,提高對(duì)快速擴(kuò)大的數(shù)據(jù)庫(kù)的處理能力和速度。
【附圖說(shuō)明】
[0028]為了能夠更清楚地理解本發(fā)明的上述目的、特征和優(yōu)點(diǎn),下面結(jié)合附圖和【具體實(shí)施方式】對(duì)本發(fā)明進(jìn)行進(jìn)一步的詳細(xì)描述,其中:
[0029]圖1所示為根據(jù)本發(fā)明第一實(shí)施例的全局片名的庫(kù)內(nèi)分片模式的示意圖;
[0030]圖2所示為根據(jù)本發(fā)明第二實(shí)施例的集群內(nèi)片名的庫(kù)內(nèi)分片模式的示意圖;
[0031]圖3所示為根據(jù)本發(fā)明第三實(shí)施例的全局片名的一庫(kù)一片模式的示意圖;
[0032]圖4所示為根據(jù)本發(fā)明第四實(shí)施例的集群內(nèi)片名的一庫(kù)一片模式的示意圖;
[0033]圖5所示為根據(jù)本發(fā)明第五實(shí)施例的中間件系統(tǒng)的架構(gòu)圖。
【具體實(shí)施方式】
[0034]根據(jù)本發(fā)明的第一實(shí)施例,為通過(guò)數(shù)據(jù)庫(kù)中間件進(jìn)行分片的方法,包括以下步驟:
[0035]A、數(shù)據(jù)庫(kù)中間件接收數(shù)據(jù)庫(kù)應(yīng)用層訪問(wèn)請(qǐng)求,所述訪問(wèn)請(qǐng)求包括數(shù)據(jù)讀出、寫(xiě)入、修改、刪除等要求。
[0036]B、數(shù)據(jù)庫(kù)中間件根據(jù)數(shù)據(jù)庫(kù)應(yīng)用層訪問(wèn)請(qǐng)求,對(duì)寫(xiě)入的數(shù)據(jù)進(jìn)行分片處理,即將數(shù)據(jù)分為若干片,同時(shí)根據(jù)分片的類(lèi)型和分片的片名類(lèi)型,由數(shù)據(jù)路由分配一個(gè)對(duì)應(yīng)的位置信息,并將分片數(shù)據(jù)分配傳遞到數(shù)據(jù)庫(kù)集群中,進(jìn)行存儲(chǔ)。
[0037]C、數(shù)據(jù)庫(kù)中間件根據(jù)數(shù)據(jù)庫(kù)應(yīng)用層訪問(wèn)請(qǐng)求,跟據(jù)數(shù)據(jù)庫(kù)應(yīng)用層所要求的數(shù)據(jù)的片名信息,通過(guò)數(shù)據(jù)路由找到數(shù)據(jù),并將分片數(shù)據(jù)從數(shù)據(jù)庫(kù)集群中讀出,并按照順序合并傳輸?shù)綌?shù)據(jù)庫(kù)應(yīng)用層。
[0038]其中數(shù)據(jù)庫(kù)中間件接收數(shù)據(jù)庫(kù)應(yīng)用層訪問(wèn)請(qǐng)求之前,還加載預(yù)設(shè)的配置文件,配置文件包括數(shù)據(jù)庫(kù)應(yīng)用層與中間件連接命令表,數(shù)據(jù)中間件與數(shù)據(jù)庫(kù)集群對(duì)應(yīng)關(guān)系表,數(shù)據(jù)路由配置規(guī)則。
[0039]數(shù)據(jù)庫(kù)中間件對(duì)寫(xiě)入的數(shù)據(jù)分片之后,數(shù)據(jù)路由根據(jù)分片的類(lèi)型和分片的片名類(lèi)型計(jì)算并給分片數(shù)據(jù)分配片名,將分配了片名的分片數(shù)據(jù)分配到數(shù)據(jù)庫(kù)集群。
[0040]其中分片的類(lèi)型包括:一庫(kù)一片和庫(kù)內(nèi)分片;
[0041]分片片名類(lèi)型包括:全局片名和集群內(nèi)片名;
[0042]其中全局片名是指所有分片數(shù)據(jù)的片名為唯一的片名;
[0043]集群內(nèi)片名為數(shù)據(jù)庫(kù)集群內(nèi)的每一個(gè)數(shù)據(jù)庫(kù)的分片數(shù)據(jù)的片名在該數(shù)據(jù)庫(kù)內(nèi)唯
ο
[0044]例如圖1所示,庫(kù)內(nèi)分片模式,可以采用全局片名也可以采用集群內(nèi)片名。如果是全局片名,那么假設(shè)dbSize是32,tbSize是1024,那么每一個(gè)庫(kù)的片數(shù)為1024/32 = 32,而片名是按照0000-1023進(jìn)行分布的,這就意味著片名是全局唯一的,不允許出現(xiàn)重復(fù)。
[0045]根據(jù)本發(fā)明的第二實(shí)施例,例如圖2所示在庫(kù)內(nèi)分片模式中采用集群內(nèi)片名,那么假設(shè)dbSize是