欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

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

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