日韩成人黄色,透逼一级毛片,狠狠躁天天躁中文字幕,久久久久久亚洲精品不卡,在线看国产美女毛片2019,黄片www.www,一级黄色毛a视频直播

一種數(shù)據(jù)庫(kù)水平分庫(kù)分表方法及系統(tǒng)、服務(wù)器與流程

文檔序號(hào):11177292閱讀:791來(lái)源:國(guó)知局
一種數(shù)據(jù)庫(kù)水平分庫(kù)分表方法及系統(tǒng)、服務(wù)器與流程
本發(fā)明涉及數(shù)據(jù)庫(kù)的
技術(shù)領(lǐng)域
,特別是涉及一種數(shù)據(jù)庫(kù)水平分庫(kù)分表方法及系統(tǒng)、服務(wù)器。
背景技術(shù)
:數(shù)據(jù)庫(kù)(database)是按照數(shù)據(jù)結(jié)構(gòu)來(lái)組織、存儲(chǔ)和管理數(shù)據(jù)的建立在計(jì)算機(jī)存儲(chǔ)設(shè)備上的倉(cāng)庫(kù)。通常,數(shù)據(jù)庫(kù)是一個(gè)單位或是一個(gè)應(yīng)用領(lǐng)域的通用數(shù)據(jù)處理系統(tǒng),它存儲(chǔ)的是屬于企業(yè)和事業(yè)部門、團(tuán)體和個(gè)人的有關(guān)數(shù)據(jù)的集合。數(shù)據(jù)庫(kù)中的數(shù)據(jù)是從全局觀點(diǎn)出發(fā)建立的,按一定的數(shù)據(jù)模型進(jìn)行組織、描述和存儲(chǔ);其結(jié)構(gòu)基于數(shù)據(jù)間的自然聯(lián)系,從而可提供一切必要的存取路徑,且數(shù)據(jù)不再針對(duì)某一應(yīng)用,而是面向全組織,具有整體的結(jié)構(gòu)化特征。隨著業(yè)務(wù)不斷發(fā)展,應(yīng)用系統(tǒng)的業(yè)務(wù)數(shù)據(jù)也隨著日積月累。相應(yīng)的性能指標(biāo)不斷提升,日漸精細(xì),例如信用審核自動(dòng)化,用戶全維度畫(huà)像信息的掘取。這些業(yè)務(wù)需求上的升級(jí),對(duì)響應(yīng)時(shí)間的要求是越來(lái)越快,導(dǎo)致對(duì)系統(tǒng)性能的要求越來(lái)越高。垂直分庫(kù)按照業(yè)務(wù)領(lǐng)域?qū)⒃瓟?shù)據(jù)庫(kù)劃分為若干分?jǐn)?shù)據(jù)庫(kù),從而解決業(yè)務(wù)系統(tǒng)之間的耦合,也能一定程度提升性能,有利于系統(tǒng)維護(hù)。垂直分表即通常所說(shuō)的大表拆小表,拆分是基于關(guān)系型數(shù)據(jù)庫(kù)中的列進(jìn)行的。當(dāng)某個(gè)表中的字段比較多,可以新建立一張擴(kuò)展表,將不經(jīng)常使用或者長(zhǎng)度較大的字段拆分出去放到擴(kuò)展表。因此,在字段特別多的情況下,垂直分表確實(shí)便于開(kāi)發(fā)和維護(hù),某種意義上可能表面“跨頁(yè)”訪問(wèn)的問(wèn)題。如圖1所示,現(xiàn)有技術(shù)中的垂直分庫(kù)分表后的數(shù)據(jù)庫(kù)架構(gòu)通常采用master-slave模式,只能對(duì)數(shù)據(jù)庫(kù)的讀操作進(jìn)行擴(kuò)展,而對(duì)數(shù)據(jù)庫(kù)寫(xiě)入操作還是集中在master上,單個(gè)master上掛載slave的數(shù)量,也受到master性能的限制。垂直分庫(kù)分表的方式緩解了原來(lái)單集群的壓力,但不能解決秒殺等在線查詢場(chǎng)景。例如需要判斷一個(gè)用戶,在某個(gè)活動(dòng)期間內(nèi),只允許下一單。這樣的場(chǎng)景對(duì)訂單表的查詢,響應(yīng)時(shí)間的要求就非??量獭?duì)訂單這樣的高表來(lái)說(shuō),性能就會(huì)成為查詢瓶頸。關(guān)系型數(shù)據(jù)庫(kù)在大于一定數(shù)據(jù)量的情況下檢索性能會(huì)急劇下降。在面對(duì)互聯(lián)網(wǎng)海量數(shù)據(jù)情況時(shí),所有數(shù)據(jù)都存于一張表,顯然會(huì)輕易超過(guò)數(shù)據(jù)庫(kù)表可承受的數(shù)據(jù)量閥值。對(duì)于互聯(lián)網(wǎng)應(yīng)用來(lái)說(shuō),數(shù)據(jù)庫(kù)單表的記錄行數(shù),可能達(dá)到千萬(wàn)級(jí)別,甚至是以億級(jí)別,故會(huì)對(duì)實(shí)時(shí)業(yè)務(wù)查詢?cè)斐蓢?yán)重影響。因此,對(duì)數(shù)據(jù)庫(kù)進(jìn)行分庫(kù)分表是必須進(jìn)行的。對(duì)于訪問(wèn)極為頻繁、數(shù)據(jù)量巨大的單表來(lái)說(shuō),首要就是減少單表的記錄條數(shù),以減少查詢所需要的響應(yīng)時(shí)間,提高數(shù)據(jù)吞吐。而現(xiàn)有的數(shù)據(jù)庫(kù)垂直分庫(kù)分表方法無(wú)法解決這一問(wèn)題。技術(shù)實(shí)現(xiàn)要素:鑒于以上所述現(xiàn)有技術(shù)的缺點(diǎn),本發(fā)明的目的在于提供一種數(shù)據(jù)庫(kù)水平分庫(kù)分表方法及系統(tǒng)、服務(wù)器,基于單表的行數(shù),將數(shù)據(jù)庫(kù)水平分割為若干分庫(kù),每個(gè)分庫(kù)再分割為若干分表,從而減少單表的記錄數(shù)量,提高查詢所需要的響應(yīng)時(shí)間,且易于擴(kuò)展。為實(shí)現(xiàn)上述目的及其他相關(guān)目的,本發(fā)明提供一種數(shù)據(jù)庫(kù)水平分庫(kù)分表方法,包括以下步驟:設(shè)定集群的個(gè)數(shù)、一個(gè)集群所包含的數(shù)據(jù)庫(kù)個(gè)數(shù)以及一個(gè)數(shù)據(jù)庫(kù)所包含的表格的個(gè)數(shù);基于預(yù)設(shè)數(shù)據(jù)庫(kù)拆分路由規(guī)則,將數(shù)據(jù)記錄分配至各個(gè)集群所包含的各個(gè)數(shù)據(jù)庫(kù)中;基于預(yù)設(shè)表格拆分路由規(guī)則,將各個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)記錄分配至該數(shù)據(jù)庫(kù)所包含的各個(gè)表格中。于本發(fā)明一實(shí)施例中,所述集群所包含的數(shù)據(jù)庫(kù)個(gè)數(shù)與所述數(shù)據(jù)庫(kù)所包含的表格的個(gè)數(shù)的取值相同。于本發(fā)明一實(shí)施例中,基于預(yù)設(shè)數(shù)據(jù)庫(kù)拆分路由規(guī)則,將數(shù)據(jù)記錄分配至各個(gè)集群所包含的各個(gè)數(shù)據(jù)庫(kù)中包括以下步驟:計(jì)算數(shù)據(jù)庫(kù)線性擴(kuò)展倍增因子factor=round(userid/scope),其中,round表示向下取整運(yùn)算,useid表示與數(shù)據(jù)記錄唯一對(duì)應(yīng)且隨數(shù)字記錄逐個(gè)遞增的數(shù)字記錄的用戶編號(hào),scope表示一個(gè)集群的數(shù)據(jù)記錄容量數(shù);計(jì)算hash切分因子remainder=useridmodscope,其中,mod表示取余數(shù)操作;計(jì)算remaindermodn+factorxn,得到數(shù)據(jù)記錄所處數(shù)據(jù)庫(kù)在其所處集群中的編號(hào),以將該數(shù)據(jù)記錄分配至該編號(hào)對(duì)應(yīng)的數(shù)據(jù)庫(kù)中,其中,n為一個(gè)集群所包含的數(shù)據(jù)庫(kù)個(gè)數(shù)。于本發(fā)明一實(shí)施例中,基于預(yù)設(shè)表格拆分路由規(guī)則,將各個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)記錄分配至該數(shù)據(jù)庫(kù)所包含的各個(gè)表格中包括以下步驟:獲取數(shù)據(jù)庫(kù)中的數(shù)據(jù)記錄遵循某一規(guī)則的編號(hào)值;將該編號(hào)值對(duì)數(shù)據(jù)庫(kù)所包含的表格的個(gè)數(shù)進(jìn)行取余操作,得到數(shù)據(jù)記錄所處表格在其所處數(shù)據(jù)庫(kù)中的編號(hào),以將該數(shù)據(jù)記錄分配至該編號(hào)對(duì)應(yīng)的表格中。于本發(fā)明一實(shí)施例中,所述該編號(hào)值采用數(shù)據(jù)記錄的useid值或orderid值;其中,useid表示與數(shù)據(jù)記錄唯一對(duì)應(yīng)且隨數(shù)字記錄逐個(gè)遞增的數(shù)字記錄的用戶編號(hào),orderid表示與數(shù)據(jù)記錄唯一對(duì)應(yīng)且隨數(shù)字記錄逐個(gè)遞增的數(shù)字記錄的訂單編號(hào)。同時(shí),本發(fā)明還提供一種數(shù)據(jù)庫(kù)水平分庫(kù)分表系統(tǒng),包括設(shè)置模塊、數(shù)據(jù)庫(kù)拆分模塊和表格拆分模塊;所述設(shè)置模塊用于設(shè)定集群的個(gè)數(shù)、一個(gè)集群所包含的數(shù)據(jù)庫(kù)個(gè)數(shù)以及一個(gè)數(shù)據(jù)庫(kù)所包含的表格的個(gè)數(shù);所述數(shù)據(jù)庫(kù)拆分模塊用于基于預(yù)設(shè)數(shù)據(jù)庫(kù)拆分路由規(guī)則,將數(shù)據(jù)記錄分配至各個(gè)集群所包含的各個(gè)數(shù)據(jù)庫(kù)中;所述表格拆分模塊用于基于預(yù)設(shè)表格拆分路由規(guī)則,將各個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)記錄分配至該數(shù)據(jù)庫(kù)所包含的各個(gè)表格中。于本發(fā)明一實(shí)施例中,所述設(shè)置模塊設(shè)定所述集群所包含的數(shù)據(jù)庫(kù)個(gè)數(shù)與所述數(shù)據(jù)庫(kù)所包含的表格的個(gè)數(shù)的取值相同。于本發(fā)明一實(shí)施例中,所述數(shù)據(jù)庫(kù)拆分模塊執(zhí)行以下操作::計(jì)算數(shù)據(jù)庫(kù)線性擴(kuò)展倍增因子factor=round(userid/scope),其中,round表示向下取整運(yùn)算,useid表示與數(shù)據(jù)記錄唯一對(duì)應(yīng)且隨數(shù)字記錄逐個(gè)遞增的數(shù)字記錄的用戶編號(hào),scope表示一個(gè)集群的數(shù)據(jù)記錄容量數(shù);計(jì)算hash切分因子remainder=useridmodscope,其中,mod表示取余數(shù)操作;計(jì)算remaindermodn+factorxn,得到數(shù)據(jù)記錄所處數(shù)據(jù)庫(kù)在其所處集群中的編號(hào),以將該數(shù)據(jù)記錄分配至該編號(hào)對(duì)應(yīng)的數(shù)據(jù)庫(kù)中,其中,n為一個(gè)集群所包含的數(shù)據(jù)庫(kù)個(gè)數(shù)。于本發(fā)明一實(shí)施例中,所述表格拆分模塊執(zhí)行以下操作:獲取數(shù)據(jù)庫(kù)中的數(shù)據(jù)記錄遵循某一規(guī)則的編號(hào)值;將該編號(hào)值對(duì)數(shù)據(jù)庫(kù)所包含的表格的個(gè)數(shù)進(jìn)行取余操作,得到數(shù)據(jù)記錄所處表格在其所處數(shù)據(jù)庫(kù)中的編號(hào),以將該數(shù)據(jù)記錄分配至該編號(hào)對(duì)應(yīng)的表格中。另外,本發(fā)明還提供一種服務(wù)器,包括上述任一所述的數(shù)據(jù)庫(kù)水平分庫(kù)分表系統(tǒng)。如上所述,本發(fā)明的數(shù)據(jù)庫(kù)水平分庫(kù)分表方法及系統(tǒng)、服務(wù)器,具有以下有益效果:(1)基于單表的行數(shù),將數(shù)據(jù)庫(kù)水平分割為若干分庫(kù),每個(gè)分庫(kù)再分割為若干分表,從而減少單表的記錄數(shù)量,提高查詢所需要的響應(yīng)時(shí)間;(2)部署方便、開(kāi)發(fā)集成等成本低、無(wú)代碼侵入性;(3)支持?jǐn)?shù)據(jù)庫(kù)線性擴(kuò)展,無(wú)數(shù)據(jù)遷移痛苦,擴(kuò)容成本低;(4)能夠根據(jù)設(shè)定的存儲(chǔ)量的大小主動(dòng)擴(kuò)容,而不是在數(shù)據(jù)庫(kù)出現(xiàn)瓶頸時(shí)才實(shí)施,保證了數(shù)據(jù)庫(kù)的安全可靠性;(5)只需遷移一次數(shù)據(jù),即可實(shí)現(xiàn)原數(shù)據(jù)庫(kù)到水平分庫(kù)分表后的數(shù)據(jù)庫(kù)的更新。附圖說(shuō)明圖1顯示為現(xiàn)有技術(shù)中數(shù)據(jù)庫(kù)垂直分庫(kù)的示意圖;圖2顯示為本發(fā)明的數(shù)據(jù)庫(kù)水平分庫(kù)分表方法的流程圖;圖3顯示為本發(fā)明的數(shù)據(jù)庫(kù)水平分庫(kù)分表系統(tǒng)的結(jié)構(gòu)示意圖;圖4顯示為本發(fā)明的服務(wù)器的結(jié)構(gòu)示意圖。元件標(biāo)號(hào)說(shuō)明1設(shè)置模塊2數(shù)據(jù)庫(kù)拆分模塊3表格拆分模塊具體實(shí)施方式以下通過(guò)特定的具體實(shí)例說(shuō)明本發(fā)明的實(shí)施方式,本領(lǐng)域技術(shù)人員可由本說(shuō)明書(shū)所揭露的內(nèi)容輕易地了解本發(fā)明的其他優(yōu)點(diǎn)與功效。本發(fā)明還可以通過(guò)另外不同的具體實(shí)施方式加以實(shí)施或應(yīng)用,本說(shuō)明書(shū)中的各項(xiàng)細(xì)節(jié)也可以基于不同觀點(diǎn)與應(yīng)用,在沒(méi)有背離本發(fā)明的精神下進(jìn)行各種修飾或改變。需要說(shuō)明的是,本實(shí)施例中所提供的圖示僅以示意方式說(shuō)明本發(fā)明的基本構(gòu)想,遂圖式中僅顯示與本發(fā)明中有關(guān)的組件而非按照實(shí)際實(shí)施時(shí)的組件數(shù)目、形狀及尺寸繪制,其實(shí)際實(shí)施時(shí)各組件的型態(tài)、數(shù)量及比例可為一種隨意的改變,且其組件布局型態(tài)也可能更為復(fù)雜。本發(fā)明的數(shù)據(jù)庫(kù)水平分庫(kù)分表方法及系統(tǒng)、服務(wù)器基于單表的行數(shù),將數(shù)據(jù)庫(kù)水平分割為若干分庫(kù),每個(gè)分庫(kù)再分割為若干分表,從而減少單表的記錄數(shù)量,提高查詢所需要的響應(yīng)時(shí)間,且支持?jǐn)?shù)據(jù)庫(kù)線性擴(kuò)展,無(wú)數(shù)據(jù)遷移痛苦,擴(kuò)容成本低。參照?qǐng)D2,本發(fā)明的數(shù)據(jù)庫(kù)水平分庫(kù)分表方法包括以下步驟:步驟s1、設(shè)定集群的個(gè)數(shù)、一個(gè)集群所包含的數(shù)據(jù)庫(kù)個(gè)數(shù)以及一個(gè)數(shù)據(jù)庫(kù)所包含的表格的個(gè)數(shù)。具體地,根據(jù)實(shí)際產(chǎn)生的數(shù)據(jù)記錄的條數(shù),確定集群的個(gè)數(shù)、一個(gè)集群所包含的數(shù)據(jù)庫(kù)個(gè)數(shù)以及一個(gè)數(shù)據(jù)庫(kù)所包含的表格的個(gè)數(shù)。在實(shí)際使用中,可根據(jù)實(shí)際的數(shù)據(jù)記錄的條數(shù)進(jìn)行數(shù)據(jù)庫(kù)的線性擴(kuò)展。需要說(shuō)明的是,線性擴(kuò)展的原則是保障單表響應(yīng)性能的前提下,同時(shí)兼顧效益。以訂單數(shù)據(jù)記錄為例,假定目前訂單表包括700萬(wàn)條記錄。如表1所示,采用4x4拆分的集群時(shí),單表存放記錄為625萬(wàn)。表1、不同庫(kù)維度和不同表維度下對(duì)應(yīng)的單表存放容量總?cè)萘?億)庫(kù)維度表維度集群內(nèi)表數(shù)量單表存放記錄數(shù)(萬(wàn))100,000,00044166,250,0001,000,000,000886415,625,00010,000,000,000161625639,062,500100,000,000,0003232102497,656,250按每月200萬(wàn)訂單計(jì)算(目前月平均70萬(wàn)),十年訂單可達(dá)到2.47億條記錄。散列到8x8個(gè)表存放,每張表存放的記錄數(shù)為386萬(wàn)條記錄不到,則單表的性能應(yīng)該處在年輕狀態(tài),可滿足實(shí)際查詢等應(yīng)用的需求。對(duì)于十年后的2.47億條記錄,如表2所示,十年中間擴(kuò)容二次即可,即從4x4擴(kuò)容至8x8,再擴(kuò)容至16x16。表2、不同庫(kù)維度和不同表維度下對(duì)應(yīng)的單表存放容量總?cè)萘?億)庫(kù)維度表維度集群內(nèi)表數(shù)量單表存放記錄數(shù)(萬(wàn))500,000,000441631,250,000500,000,00088647,812,500500,000,00016162561,953,125500,000,00032321024488,281優(yōu)選地,集群所包含的數(shù)據(jù)庫(kù)個(gè)數(shù)與數(shù)據(jù)庫(kù)所包含的表格的個(gè)數(shù)的取值相同。步驟s2、基于預(yù)設(shè)數(shù)據(jù)庫(kù)拆分路由規(guī)則,將數(shù)據(jù)記錄分配至各個(gè)集群所包含的各個(gè)數(shù)據(jù)庫(kù)中。具體地,基于預(yù)設(shè)數(shù)據(jù)庫(kù)拆分路由規(guī)則,將數(shù)據(jù)記錄分配至各個(gè)集群所包含的各個(gè)數(shù)據(jù)庫(kù)中包括以下步驟:21)計(jì)算數(shù)據(jù)庫(kù)線性擴(kuò)展倍增因子factor=round(userid/scope),其中,round表示向下取整運(yùn)算,useid表示與數(shù)據(jù)記錄唯一對(duì)應(yīng)且隨數(shù)字記錄逐個(gè)遞增的數(shù)字記錄的用戶編號(hào),scope表示一個(gè)集群的數(shù)據(jù)記錄容量數(shù)。其中,數(shù)據(jù)庫(kù)線性擴(kuò)展倍增因子factor也就是數(shù)據(jù)記錄所處集群的編號(hào)。集群的編號(hào)從0開(kāi)始,依次遞增1。22)計(jì)算hash切分因子remainder=useridmodscope,其中,mod表示取余數(shù)操作。其中,remainder作為useid的hash值,用于后續(xù)的hash切分。23)計(jì)算remaindermodn+factorxn,得到數(shù)據(jù)記錄所處數(shù)據(jù)庫(kù)在其所處集群中的編號(hào)以將該數(shù)據(jù)記錄分配至該編號(hào)對(duì)應(yīng)的數(shù)據(jù)庫(kù)中,其中,n為一個(gè)集群所包含的數(shù)據(jù)庫(kù)個(gè)數(shù)。例如,需要將一個(gè)集群切分成4個(gè)數(shù)據(jù)庫(kù)時(shí),就用4這個(gè)數(shù)字對(duì)useid的hash值remainder進(jìn)行取余數(shù)運(yùn)算,也就是remaindermod4。這樣的話每次運(yùn)算就有四種可能:結(jié)果為0的時(shí)候,對(duì)應(yīng)db1;結(jié)果為1的時(shí)候?qū)?yīng)db2;結(jié)果為2的時(shí)候?qū)?yīng)db3;結(jié)果為3的時(shí)候?qū)?yīng)db4。這樣一來(lái)就非常均勻的將數(shù)據(jù)分配到4個(gè)數(shù)據(jù)庫(kù)中,有利于后續(xù)的數(shù)據(jù)檢索。需要說(shuō)明的是,數(shù)據(jù)庫(kù)編號(hào)在各個(gè)集群中線性擴(kuò)展,具有連續(xù)性。因此,通過(guò)上述步驟,實(shí)現(xiàn)了數(shù)據(jù)庫(kù)的線性擴(kuò)展,集群的線性擴(kuò)容。同時(shí),由于在集群內(nèi)采用hash切分算法,使得分配至各個(gè)數(shù)據(jù)庫(kù)的記錄非常均勻。步驟s3、基于預(yù)設(shè)表格拆分路由規(guī)則,將各個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)記錄分配至該數(shù)據(jù)庫(kù)所包含的各個(gè)表格中。具體地,基于預(yù)設(shè)表格拆分路由規(guī)則,將各個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)記錄分配至該數(shù)據(jù)庫(kù)所包含的各個(gè)表格中包括以下步驟:31)獲取數(shù)據(jù)庫(kù)中的數(shù)據(jù)記錄遵循某一規(guī)則的編號(hào)值。具體地,該編號(hào)值可以為上述的useid值,也可以是數(shù)據(jù)記錄的orderid值。其中,orderid表示與數(shù)據(jù)記錄唯一對(duì)應(yīng)且隨數(shù)字記錄逐個(gè)遞增的數(shù)字記錄的訂單編號(hào)。需要說(shuō)明的是,表格拆分路由規(guī)則和數(shù)據(jù)庫(kù)拆分路由規(guī)則并不相關(guān),故表格拆分路由可以采用orderid等參數(shù)。這是因?yàn)椋趯?shí)際應(yīng)用中,訂單查詢是常見(jiàn)的場(chǎng)景。按orderid查詢的場(chǎng)景頻率也很高。當(dāng)然,也可以繼續(xù)用userid值做hash切分。32)將該編號(hào)值對(duì)數(shù)據(jù)庫(kù)所包含的表格的個(gè)數(shù)進(jìn)行取余操作,得到數(shù)據(jù)記錄所處表格在其所處數(shù)據(jù)庫(kù)中的編號(hào),以將該數(shù)據(jù)記錄分配至該編號(hào)對(duì)應(yīng)的表格中。在表格拆分路由規(guī)則中,仍然采用hash切分,從而保證了與數(shù)據(jù)庫(kù)拆分路由規(guī)則的一致性。這使得數(shù)據(jù)記錄水平切分后,易于進(jìn)行水平擴(kuò)展,同時(shí)還能兼顧按照orderid查詢的性能,故極大地提升了用戶體驗(yàn)。下面通過(guò)具體實(shí)施例來(lái)進(jìn)一步闡述本發(fā)明的數(shù)據(jù)庫(kù)水平分庫(kù)分表方法。設(shè)定包括兩個(gè)集群,每個(gè)集群包括四個(gè)數(shù)據(jù)庫(kù),每個(gè)數(shù)據(jù)庫(kù)包括四個(gè)表格。每個(gè)集群所包含的數(shù)據(jù)記錄的容量為10000。在該實(shí)施例中,具體的數(shù)據(jù)庫(kù)水平分庫(kù)分表方法如表3所示。表3、數(shù)據(jù)庫(kù)水平分庫(kù)分表方法的特定實(shí)施例當(dāng)useid分別為9900、9901、19900和19901時(shí),對(duì)應(yīng)的數(shù)據(jù)記錄分配結(jié)果如表4所示。表4、數(shù)據(jù)記錄分配結(jié)果因此,通過(guò)本發(fā)明的數(shù)據(jù)庫(kù)水平分庫(kù)分表方法能夠?qū)⒏鱾€(gè)數(shù)據(jù)記錄對(duì)應(yīng)地分配至各個(gè)具體的表格,實(shí)現(xiàn)了對(duì)原始數(shù)據(jù)庫(kù)的數(shù)據(jù)記錄的水平分庫(kù)分表,且數(shù)據(jù)庫(kù)線性擴(kuò)展,無(wú)數(shù)據(jù)遷移痛苦,擴(kuò)容成本低。另外,對(duì)于現(xiàn)有的數(shù)據(jù)庫(kù),需要通過(guò)數(shù)據(jù)遷移的方式將數(shù)據(jù)記錄存儲(chǔ)至水平分庫(kù)分表后的數(shù)據(jù)庫(kù)。該數(shù)據(jù)遷移只需進(jìn)行一次,具體包括以下步驟:階段一確定訂單號(hào)等編碼規(guī)則,在新老數(shù)據(jù)庫(kù)插入時(shí),判斷新老數(shù)據(jù)庫(kù)的訂單號(hào)生成規(guī)則是否一致,若不一致就不能作為數(shù)據(jù)遷移截點(diǎn),可以以時(shí)間為截點(diǎn)。在原有業(yè)務(wù)代碼中,添加新分片的數(shù)據(jù)源寫(xiě)入,實(shí)現(xiàn)數(shù)據(jù)雙落地。查詢讀取保持走老數(shù)據(jù)庫(kù)源。事務(wù)成功判斷以老數(shù)據(jù)庫(kù)為準(zhǔn)。確定遷移數(shù)據(jù)截點(diǎn),原則上使得雙落地和遷移這個(gè)時(shí)間窗口造成的數(shù)據(jù)差異性越小越好。比如拿雙落功能上線時(shí)間點(diǎn)2016.12.3123.59.59,作為遷移歷史數(shù)據(jù)的截點(diǎn),這個(gè)時(shí)間點(diǎn)之前的數(shù)據(jù),需要遷移。階段二數(shù)據(jù)遷移結(jié)束,補(bǔ)償時(shí)間窗口內(nèi)新訂單(還有出錯(cuò)補(bǔ)償),插入前需要檢查是否存在。運(yùn)行一段時(shí)間,定時(shí)檢查新老數(shù)據(jù)源中的數(shù)據(jù)一致性,及時(shí)發(fā)現(xiàn)原因,進(jìn)行處理,以及補(bǔ)償。歷時(shí)一段時(shí)間,確定無(wú)差異性后切換讀數(shù)據(jù)源變更,變更到分片數(shù)據(jù)源。事務(wù)成功以新數(shù)據(jù)庫(kù)為準(zhǔn)。階段三切換對(duì)老數(shù)據(jù)源依賴的應(yīng)用,關(guān)閉老數(shù)據(jù)源寫(xiě),變成單落,只落分片的新數(shù)據(jù)庫(kù)。老數(shù)據(jù)庫(kù)可以作廢。需要說(shuō)明的是,進(jìn)行數(shù)據(jù)遷移的工作需要滿足以下要求:(1)需要對(duì)接老數(shù)據(jù)庫(kù)和分片的新數(shù)據(jù)庫(kù);(2)能支持按輸入sql語(yǔ)句遷移,即支持按時(shí)間或者id分段遷移;(3)導(dǎo)入出錯(cuò)時(shí),記錄orderid,以便補(bǔ)償;(4)補(bǔ)償遷移,需要在插入前做exists檢查。剛開(kāi)始大批量遷移,不需要做exists檢查,否則會(huì)很影響效率。通過(guò)增加配置參數(shù)判斷是否要判斷。參照?qǐng)D3,本發(fā)明的數(shù)據(jù)庫(kù)水平分庫(kù)分表系統(tǒng)包括依次相連的設(shè)置模塊1、數(shù)據(jù)庫(kù)拆分模塊2和表格拆分模塊3。設(shè)置模塊1用于設(shè)定集群的個(gè)數(shù)、一個(gè)集群所包含的數(shù)據(jù)庫(kù)個(gè)數(shù)以及一個(gè)數(shù)據(jù)庫(kù)所包含的表格的個(gè)數(shù)。具體地,根據(jù)實(shí)際產(chǎn)生的數(shù)據(jù)記錄的條數(shù),確定集群的個(gè)數(shù)、一個(gè)集群所包含的數(shù)據(jù)庫(kù)個(gè)數(shù)以及一個(gè)數(shù)據(jù)庫(kù)所包含的表格的個(gè)數(shù)。在實(shí)際使用中,可根據(jù)實(shí)際的數(shù)據(jù)記錄的條數(shù)進(jìn)行數(shù)據(jù)庫(kù)的線性擴(kuò)展。需要說(shuō)明的是,線性擴(kuò)展的原則是保障單表響應(yīng)性能的前提下,同時(shí)兼顧效益。以訂單數(shù)據(jù)記錄為例,假定目前訂單表包括700萬(wàn)條記錄。如表1所示,采用4x4拆分的集群時(shí),單表存放記錄為625萬(wàn)。表1、不同庫(kù)維度和不同表維度下對(duì)應(yīng)的單表存放容量總?cè)萘?億)庫(kù)維度表維度集群內(nèi)表數(shù)量單表存放記錄數(shù)(萬(wàn))100,000,00044166,250,0001,000,000,000886415,625,00010,000,000,000161625639,062,500100,000,000,0003232102497,656,250按每月200萬(wàn)訂單計(jì)算(目前月平均70萬(wàn)),十年訂單可達(dá)到2.47億條記錄。散列到8x8個(gè)表存放,每張表存放的記錄數(shù)為386萬(wàn)條記錄不到,則單表的性能應(yīng)該處在年輕狀態(tài),可滿足實(shí)際查詢等應(yīng)用的需求。對(duì)于十年后的2.47億條記錄,如表2所示,十年中間擴(kuò)容二次即可,即從4x4擴(kuò)容至8x8,再擴(kuò)容至16x16。表2、不同庫(kù)維度和不同表維度下對(duì)應(yīng)的單表存放容量總?cè)萘?億)庫(kù)維度表維度集群內(nèi)表數(shù)量單表存放記錄數(shù)(萬(wàn))500,000,000441631,250,000500,000,00088647,812,500500,000,00016162561,953,125500,000,00032321024488,281優(yōu)選地,集群所包含的數(shù)據(jù)庫(kù)個(gè)數(shù)與數(shù)據(jù)庫(kù)所包含的表格的個(gè)數(shù)的取值相同。數(shù)據(jù)庫(kù)拆分模塊2用于基于預(yù)設(shè)數(shù)據(jù)庫(kù)拆分路由規(guī)則,將數(shù)據(jù)記錄分配至各個(gè)集群所包含的各個(gè)數(shù)據(jù)庫(kù)中。具體地,數(shù)據(jù)庫(kù)拆分模塊2執(zhí)行以下操作:21)計(jì)算數(shù)據(jù)庫(kù)線性擴(kuò)展倍增因子factor=round(userid/scope),其中,round表示向下取整運(yùn)算,useid表示與數(shù)據(jù)記錄唯一對(duì)應(yīng)且隨數(shù)字記錄逐個(gè)遞增的數(shù)字記錄的用戶編號(hào),scope表示一個(gè)集群的數(shù)據(jù)記錄容量數(shù)。其中,數(shù)據(jù)庫(kù)線性擴(kuò)展倍增因子factor也就是數(shù)據(jù)記錄所處集群的編號(hào)。集群的編號(hào)從0開(kāi)始,依次遞增1。22)計(jì)算hash切分因子remainder=useridmodscope,其中,mod表示取余數(shù)操作。其中,remainder作為useid的hash值,用于后續(xù)的hash切分。23)計(jì)算remaindermodn+factorxn,得到數(shù)據(jù)記錄所處數(shù)據(jù)庫(kù)在其所處集群中的編號(hào)以將該數(shù)據(jù)記錄分配至該編號(hào)對(duì)應(yīng)的數(shù)據(jù)庫(kù)中,其中,n為一個(gè)集群所包含的數(shù)據(jù)庫(kù)個(gè)數(shù)。例如,需要將一個(gè)集群切分成4個(gè)數(shù)據(jù)庫(kù)時(shí),就用4這個(gè)數(shù)字對(duì)useid的hash值remainder進(jìn)行取余數(shù)運(yùn)算,也就是remaindermod4。這樣的話每次運(yùn)算就有四種可能:結(jié)果為0的時(shí)候,對(duì)應(yīng)db1;結(jié)果為1的時(shí)候?qū)?yīng)db2;結(jié)果為2的時(shí)候?qū)?yīng)db3;結(jié)果為3的時(shí)候?qū)?yīng)db4。這樣一來(lái)就非常均勻的將數(shù)據(jù)分配到4個(gè)數(shù)據(jù)庫(kù)中,有利于后續(xù)的數(shù)據(jù)檢索。需要說(shuō)明的是,數(shù)據(jù)庫(kù)編號(hào)在各個(gè)集群中線性擴(kuò)展,具有連續(xù)性。因此,通過(guò)上述步驟,實(shí)現(xiàn)了數(shù)據(jù)庫(kù)的線性擴(kuò)展,集群的線性擴(kuò)容。同時(shí),由于在集群內(nèi)采用hash切分算法,使得分配至各個(gè)數(shù)據(jù)庫(kù)的記錄非常均勻。表格拆分模塊3用于基于預(yù)設(shè)表格拆分路由規(guī)則,將各個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)記錄分配至該數(shù)據(jù)庫(kù)所包含的各個(gè)表格中。具體地,表格拆分模塊執(zhí)行以下操作:31)獲取數(shù)據(jù)庫(kù)中的數(shù)據(jù)記錄遵循某一規(guī)則的編號(hào)值。具體地,該編號(hào)值可以為上述的useid值,也可以是數(shù)據(jù)記錄的orderid值。其中,orderid表示與數(shù)據(jù)記錄唯一對(duì)應(yīng)且隨數(shù)字記錄逐個(gè)遞增的數(shù)字記錄的訂單編號(hào)。需要說(shuō)明的是,表格拆分路由規(guī)則和數(shù)據(jù)庫(kù)拆分路由規(guī)則并不相關(guān),故表格拆分路由可以采用orderid等參數(shù)。這是因?yàn)?,在?shí)際應(yīng)用中,訂單查詢是常見(jiàn)的場(chǎng)景。按orderid查詢的場(chǎng)景頻率也很高。當(dāng)然,也可以繼續(xù)用userid值做hash切分。32)將該編號(hào)值對(duì)數(shù)據(jù)庫(kù)所包含的表格的個(gè)數(shù)進(jìn)行取余操作,得到數(shù)據(jù)記錄所處表格在其所處數(shù)據(jù)庫(kù)中的編號(hào),以將該數(shù)據(jù)記錄分配至該編號(hào)對(duì)應(yīng)的表格中。在表格拆分路由規(guī)則中,仍然采用hash切分,從而保證了與數(shù)據(jù)庫(kù)拆分路由規(guī)則的一致性。這使得數(shù)據(jù)記錄水平切分后,易于進(jìn)行水平擴(kuò)展,同時(shí)還能兼顧按照orderid查詢的性能,故極大地提升了用戶體驗(yàn)。如圖4所示,本發(fā)明還提供一種服務(wù)器,包括上述的數(shù)據(jù)庫(kù)水平分庫(kù)分表系統(tǒng)。綜上所述,本發(fā)明的數(shù)據(jù)庫(kù)水平分庫(kù)分表方法及系統(tǒng)、服務(wù)器基于單表的行數(shù),將數(shù)據(jù)庫(kù)水平分割為若干分庫(kù),每個(gè)分庫(kù)再分割為若干分表,從而減少單表的記錄數(shù)量,提高查詢所需要的響應(yīng)時(shí)間;部署方便、開(kāi)發(fā)集成等成本低、無(wú)代碼侵入性;支持?jǐn)?shù)據(jù)庫(kù)線性擴(kuò)展,無(wú)數(shù)據(jù)遷移痛苦,擴(kuò)容成本低;能夠根據(jù)設(shè)定的存儲(chǔ)量的大小主動(dòng)擴(kuò)容,而不是在數(shù)據(jù)庫(kù)出現(xiàn)瓶頸時(shí)才實(shí)施,保證了數(shù)據(jù)庫(kù)的安全可靠性;只需遷移一次數(shù)據(jù),即可實(shí)現(xiàn)原數(shù)據(jù)庫(kù)到水平分庫(kù)分表后的數(shù)據(jù)庫(kù)的更新。所以,本發(fā)明有效克服了現(xiàn)有技術(shù)中的種種缺點(diǎn)而具高度產(chǎn)業(yè)利用價(jià)值。上述實(shí)施例僅例示性說(shuō)明本發(fā)明的原理及其功效,而非用于限制本發(fā)明。任何熟悉此技術(shù)的人士皆可在不違背本發(fā)明的精神及范疇下,對(duì)上述實(shí)施例進(jìn)行修飾或改變。因此,舉凡所屬
技術(shù)領(lǐng)域
中具有通常知識(shí)者在未脫離本發(fā)明所揭示的精神與技術(shù)思想下所完成的一切等效修飾或改變,仍應(yīng)由本發(fā)明的權(quán)利要求所涵蓋。當(dāng)前第1頁(yè)12
當(dāng)前第1頁(yè)1 2 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1