專(zhuān)利名稱(chēng):一種數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)庫(kù)領(lǐng)域,尤其涉及一種數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的方法及裝置。
背景技術(shù):
數(shù)據(jù)庫(kù)(Database)是按照數(shù)據(jù)結(jié)構(gòu)來(lái)組織、存儲(chǔ)和管理數(shù)據(jù)的倉(cāng)庫(kù)。數(shù)據(jù)庫(kù)產(chǎn)生于距今五十年前,隨著信息技術(shù)和市場(chǎng)的發(fā)展,數(shù)據(jù)管理不再僅僅是存儲(chǔ)和管理數(shù)據(jù),而轉(zhuǎn)變成用戶(hù)所需要的各種數(shù)據(jù)管理的方式。數(shù)據(jù)庫(kù)有很多種類(lèi)型,從最簡(jiǎn)單的存儲(chǔ)有各種數(shù)據(jù)的表格到能夠進(jìn)行海量數(shù)據(jù)存儲(chǔ)的大型數(shù)據(jù)庫(kù)系統(tǒng)都在各個(gè)方面得到了廣泛的應(yīng)用。在互聯(lián)網(wǎng)行業(yè)中,企業(yè)面對(duì)的是龐大的數(shù)據(jù)以及海量的數(shù)據(jù)訪(fǎng)問(wèn),因此數(shù)據(jù)庫(kù)在互聯(lián)網(wǎng)企業(yè)中的作用越來(lái)越重要。傳統(tǒng)的數(shù)據(jù)庫(kù)系統(tǒng)基于單臺(tái)數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)進(jìn)行管理,但是隨著企業(yè)的高速發(fā)展,使得業(yè)務(wù)應(yīng)用對(duì)數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn)壓力成幾何級(jí)增長(zhǎng),單臺(tái)數(shù)據(jù)庫(kù)所帶來(lái)的數(shù)據(jù)量和訪(fǎng)問(wèn)量瓶頸問(wèn)題日益嚴(yán)重,基于單臺(tái)數(shù)據(jù)庫(kù)系統(tǒng)對(duì)數(shù)據(jù)進(jìn)行管理的方式已經(jīng)不能夠適應(yīng)飛速發(fā)展中的互聯(lián)網(wǎng)產(chǎn)業(yè)的需求。為了解決單臺(tái)數(shù)據(jù)庫(kù)所帶來(lái)的數(shù)據(jù)量和訪(fǎng)問(wèn)量瓶頸問(wèn)題,必須將原來(lái)構(gòu)建于單臺(tái)數(shù)據(jù)庫(kù)的業(yè)務(wù)邏輯進(jìn)行切分,構(gòu)建包括多臺(tái)數(shù)據(jù)庫(kù)的業(yè)務(wù)邏輯。一般的切分方法是按照邏輯表進(jìn)行一些垂直的切分,即將一些大的表切分出來(lái)放在單獨(dú)的數(shù)據(jù)庫(kù)存儲(chǔ)設(shè)備中,例如原單臺(tái)數(shù)據(jù)庫(kù)中存放10類(lèi)業(yè)務(wù)的數(shù)據(jù),其中第1類(lèi)業(yè)務(wù)的數(shù)據(jù)量非常大,則將該第1類(lèi)業(yè)務(wù)對(duì)應(yīng)的數(shù)據(jù)存放到其他數(shù)據(jù)庫(kù),并相應(yīng)的切分邏輯數(shù)據(jù)表。但是當(dāng)一張邏輯數(shù)據(jù)表的數(shù)據(jù)量繼續(xù)增長(zhǎng),到達(dá)單個(gè)數(shù)據(jù)庫(kù)的瓶頸時(shí),這種簡(jiǎn)單的切分方法依然面臨數(shù)據(jù)量和訪(fǎng)問(wèn)量瓶頸問(wèn)題。將一張邏輯表分為多個(gè)子庫(kù)和子表,即分庫(kù)和分表的核心目的是減少業(yè)務(wù)系統(tǒng)對(duì)單臺(tái)數(shù)據(jù)庫(kù)的依賴(lài)。但在整個(gè)存儲(chǔ)業(yè)務(wù)系統(tǒng)中,一般分為前端負(fù)載均衡、應(yīng)用存儲(chǔ)設(shè)備和后端存儲(chǔ)等幾個(gè)主要部分。在這種比較普遍的結(jié)構(gòu)中,應(yīng)用存儲(chǔ)設(shè)備和負(fù)載均衡都有比較成熟的技術(shù)和理論可以實(shí)現(xiàn)比較平滑的擴(kuò)展,但由于數(shù)據(jù)本身是有狀態(tài)的,因此數(shù)據(jù)庫(kù)的擴(kuò)展相對(duì)比較困難?,F(xiàn)有技術(shù)中提供的數(shù)據(jù)庫(kù)分庫(kù)解決方案,可以將單個(gè)數(shù)據(jù)庫(kù)切分為多個(gè)數(shù)據(jù)庫(kù), 在一定程度上解決了數(shù)據(jù)庫(kù)擴(kuò)展的問(wèn)題。這種方案通常是按照一個(gè)查詢(xún)量最高的字段進(jìn)行取模操作。例如通常用戶(hù)標(biāo)識(shí)(uSer_id)為查詢(xún)量最高的字段,根據(jù)User_id取模后的值, 決定這條數(shù)據(jù)最終應(yīng)該寫(xiě)到哪個(gè)數(shù)據(jù)庫(kù)中。例如將單個(gè)數(shù)據(jù)庫(kù)內(nèi)的數(shù)據(jù)分到16個(gè)數(shù)據(jù)庫(kù)時(shí),根據(jù)其uSer_id mod 16后的值,決定這條數(shù)據(jù)最終應(yīng)該寫(xiě)到哪個(gè)數(shù)據(jù)庫(kù)中。在對(duì)數(shù)據(jù)庫(kù)進(jìn)一步擴(kuò)展時(shí),這種簡(jiǎn)單的數(shù)據(jù)庫(kù)分庫(kù)方案將導(dǎo)致大批量的數(shù)據(jù)的rehash(重新哈希運(yùn)算)。rehash就是對(duì)一組數(shù)據(jù)按照另外的值進(jìn)行取模并分配的過(guò)程,例如,對(duì)1至100這100 個(gè)數(shù),如果每個(gè)數(shù)都對(duì)10取模,那么100個(gè)數(shù)就可以根據(jù)計(jì)算的結(jié)果0 9,平均的分配到 10個(gè)虛擬的組里面去。但如果這個(gè)值要變大,如變到20,那么從1 100的所有數(shù)字對(duì)20 取模以后的值有很大一部分都和對(duì)10取模的結(jié)果不同,這100個(gè)數(shù)字也自然會(huì)被分配到和對(duì)10取模后不同的虛擬組里面去,這一過(guò)程就是rehash。對(duì)應(yīng)于實(shí)際場(chǎng)景,如果原來(lái)有10個(gè)數(shù)據(jù)庫(kù),那么可以對(duì)某個(gè)值(例如userjd)對(duì)10取模,這樣就可以將數(shù)據(jù)比較均衡的分配到10個(gè)數(shù)據(jù)庫(kù)中。假設(shè)數(shù)據(jù)量繼續(xù)增大,10個(gè)數(shù)據(jù)庫(kù)已經(jīng)不能夠滿(mǎn)足業(yè)務(wù)發(fā)展的需要, 需要再增加10個(gè)數(shù)據(jù)庫(kù),那么如果還希望平均的分配數(shù)據(jù),就需要對(duì)以前已經(jīng)分配到10個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)根據(jù)當(dāng)前數(shù)據(jù)庫(kù)的數(shù)量20,進(jìn)行重新分配。經(jīng)過(guò)rehash后,大批量的數(shù)據(jù)都需要重新分配數(shù)據(jù)庫(kù)。但是,這種大范圍的數(shù)據(jù)遷移,即大量數(shù)據(jù)在數(shù)據(jù)庫(kù)中的位置更新會(huì)導(dǎo)致存儲(chǔ)設(shè)備負(fù)擔(dān)加重、數(shù)據(jù)遷移復(fù)雜,并且在遷移過(guò)程中容易導(dǎo)致數(shù)據(jù)丟失。
發(fā)明內(nèi)容
本申請(qǐng)?zhí)峁┝艘环N數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的方法,以解決現(xiàn)有數(shù)據(jù)庫(kù)擴(kuò)展過(guò)程中,存儲(chǔ)設(shè)備負(fù)擔(dān)加重、數(shù)據(jù)遷移復(fù)雜,容易導(dǎo)致數(shù)據(jù)丟失的問(wèn)題。本申請(qǐng)還提供了一種存儲(chǔ)裝置,以解決現(xiàn)有數(shù)據(jù)庫(kù)擴(kuò)展過(guò)程中,存儲(chǔ)設(shè)備負(fù)擔(dān)加重、數(shù)據(jù)遷移復(fù)雜,容易導(dǎo)致數(shù)據(jù)丟失的問(wèn)題。本申請(qǐng)?zhí)峁┮环N數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的方法,包括將待存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)第一預(yù)設(shè)值進(jìn)行第一次取模處理;根據(jù)第一次取模處理得到的值進(jìn)行第一次求商處理;根據(jù)第一次求商處理得到的第一商值,在多個(gè)數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)所述待存儲(chǔ)的數(shù)據(jù), 所述第一預(yù)設(shè)值大于所述數(shù)據(jù)庫(kù)的個(gè)數(shù)。本申請(qǐng)還提供一種存儲(chǔ)裝置,包括取模模塊,用于將待存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)第一預(yù)設(shè)值進(jìn)行第一次取模處理;求商模塊,用于根據(jù)所述第一次取模處理得到的值進(jìn)行第一次求商處理;存儲(chǔ)模塊,用于根據(jù)所述第一次求商處理得到的第一商值,在多個(gè)數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)所述待存儲(chǔ)的數(shù)據(jù),所述第一預(yù)設(shè)值大于所述數(shù)據(jù)庫(kù)的個(gè)數(shù)。與現(xiàn)有技術(shù)相比,本申請(qǐng)至少具有以下優(yōu)點(diǎn)本申請(qǐng)將待存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)預(yù)設(shè)值進(jìn)行取模處理,并對(duì)取模處理得到的值進(jìn)行求商處理,然后根據(jù)求商處理的結(jié)果將數(shù)據(jù)存儲(chǔ)在不同數(shù)據(jù)庫(kù),由于數(shù)據(jù)庫(kù)的個(gè)數(shù)小于預(yù)設(shè)值,通過(guò)這種方式可以使存儲(chǔ)設(shè)備在取模處理時(shí)選擇一個(gè)較大的預(yù)設(shè)值,然后再根據(jù)數(shù)據(jù)庫(kù)的個(gè)數(shù)選擇較小值對(duì)取模結(jié)果進(jìn)行求商,根據(jù)求商的值將數(shù)據(jù)存儲(chǔ)到多個(gè)數(shù)據(jù)庫(kù)中,這種存儲(chǔ)方式,在數(shù)據(jù)庫(kù)的擴(kuò)展過(guò)程中,只需對(duì)需要切分的數(shù)據(jù)庫(kù)再次進(jìn)行取模等步驟,根據(jù)計(jì)算出的值進(jìn)行數(shù)據(jù)存儲(chǔ),對(duì)其他數(shù)據(jù)庫(kù)無(wú)影響,避免了可能的rehash操作,存儲(chǔ)設(shè)備負(fù)擔(dān)小、數(shù)據(jù)遷移簡(jiǎn)單并且遷移過(guò)程中數(shù)據(jù)不易丟失,有效地實(shí)現(xiàn)了數(shù)據(jù)庫(kù)的平滑擴(kuò)展。
為了更清楚地說(shuō)明本申請(qǐng)或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)本申請(qǐng)或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單的介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本申請(qǐng)的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其它的附圖。圖1是本申請(qǐng)實(shí)施例一提供的數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的方法流程示意圖2是現(xiàn)有技術(shù)的分庫(kù)方式示意圖;圖3是本申請(qǐng)實(shí)施例一中具體實(shí)現(xiàn)場(chǎng)景下數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的方法的流程示意圖;圖4是本申請(qǐng)實(shí)施例一提供的分庫(kù)方式示意圖;圖5是本申請(qǐng)實(shí)施例二提供的數(shù)據(jù)庫(kù)切分的方法的流程示意圖;圖6是本申請(qǐng)實(shí)施例三提供的數(shù)據(jù)庫(kù)切分的方法的流程示意圖;圖7是本申請(qǐng)實(shí)施例三中分庫(kù)方式示意圖;圖8是本申請(qǐng)實(shí)施例五提供的數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的方法的流程示意圖;圖9是本申請(qǐng)實(shí)施例中分庫(kù)分表方法的示意圖;圖10-13是本申請(qǐng)實(shí)施例六提供的存儲(chǔ)裝置的結(jié)構(gòu)示意圖。
具體實(shí)施例方式下面將結(jié)合本申請(qǐng)中的附圖,對(duì)本申請(qǐng)中的技術(shù)方案進(jìn)行清楚、完整的描述,顯然,所描述的實(shí)施例是本申請(qǐng)的一部分實(shí)施例,而不是全部的實(shí)施例?;诒旧暾?qǐng)中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)的前提下所獲得的所有其它實(shí)施例,都屬于本申請(qǐng)保護(hù)的范圍。此處需要說(shuō)明的是,本申請(qǐng)實(shí)施例中的各步驟可以由單獨(dú)一個(gè)具備計(jì)算存儲(chǔ)能力的設(shè)備完成,如服務(wù)器或存儲(chǔ)設(shè)備等執(zhí)行,也可以由多個(gè)設(shè)備共同執(zhí)行完成,例如由服務(wù)器與存儲(chǔ)設(shè)備組合執(zhí)行完成,即本申請(qǐng)實(shí)施例中利用服務(wù)器或存儲(chǔ)設(shè)備等相同或者不同的存儲(chǔ)裝置,進(jìn)行數(shù)據(jù)存儲(chǔ)的過(guò)程僅僅是一個(gè)實(shí)現(xiàn)發(fā)明目的的具體實(shí)例,并不用于限制本申請(qǐng)的范圍,可以根據(jù)實(shí)際需要靈活采用相同或者不同的設(shè)備完成本發(fā)明實(shí)施例的發(fā)明目的。實(shí)施例一本申請(qǐng)實(shí)施例一提供了一種數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的方法,如圖1所示,包括步驟101,將待存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)第一預(yù)設(shè)值進(jìn)行第一次取模處理;步驟102,根據(jù)第一次取模處理得到的值進(jìn)行第一次求商處理;步驟103,根據(jù)第一次求商處理得到的第一商值在多個(gè)數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)所述待存儲(chǔ)的數(shù)據(jù),所述第一預(yù)設(shè)值大于所述數(shù)據(jù)庫(kù)的個(gè)數(shù)。優(yōu)選地,所述第一次求商處理的第一除數(shù)為所述數(shù)據(jù)庫(kù)的個(gè)數(shù)。優(yōu)選地,所述第一預(yù)設(shè)值為所述數(shù)據(jù)庫(kù)的個(gè)數(shù)的整數(shù)倍數(shù)。優(yōu)選地,根據(jù)所述第一次求商處理得到的第一商值在多個(gè)數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)所述待存儲(chǔ)的數(shù)據(jù),具體可包括獲取所述第一次求商處理得到的值的整數(shù)部分;根據(jù)所述第一次求商處理得到的值的整數(shù)部分,將待存儲(chǔ)的數(shù)據(jù)存儲(chǔ)于不同的數(shù)據(jù)庫(kù)中。為了更清楚地闡述實(shí)施例一中數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的方法,即數(shù)據(jù)庫(kù)的分庫(kù)方法,下面結(jié)合具體實(shí)現(xiàn)場(chǎng)景進(jìn)行進(jìn)一步詳細(xì)介紹。首先介紹現(xiàn)有技術(shù)中的分庫(kù)方式?,F(xiàn)有技術(shù)的分庫(kù)方式采用對(duì)標(biāo)識(shí)(id)簡(jiǎn)單取模的分庫(kù)方式。如圖2所示,假設(shè)將數(shù)據(jù)劃分到4個(gè)數(shù)據(jù)庫(kù)中,則分庫(kù)規(guī)則為id mod 4,其中的id為數(shù)據(jù)的標(biāo)識(shí)信息,例如 User_id(用戶(hù)標(biāo)識(shí))。對(duì)于0 20這21個(gè)值來(lái)說(shuō),數(shù)據(jù)在數(shù)據(jù)庫(kù)內(nèi)的分布如圖2所示。其中,槽0 (id mod 4 = 0對(duì)應(yīng)的數(shù)據(jù)庫(kù))中存儲(chǔ)的數(shù)據(jù)遵循規(guī)則id mod 4 = 0,槽1中存儲(chǔ)的數(shù)據(jù)遵循規(guī)則id mod 4 = 1,槽2中存儲(chǔ)的數(shù)據(jù)遵循規(guī)則id mod 4 = 2,槽3中存儲(chǔ)的數(shù)據(jù)遵循規(guī)則id mod 4 = 3。其中,槽是hash以后的結(jié)果值中的一個(gè),如id mod 4,那么如果id為自然數(shù),這個(gè)計(jì)算式最終只會(huì)有4個(gè)結(jié)果,也就是0、1、2、3,這四個(gè)結(jié)果的每一個(gè)都是一個(gè)槽。槽0中存儲(chǔ)0、4、8、12、16、20六個(gè)數(shù)值,槽1中存儲(chǔ)1、5、9、13、17五個(gè)數(shù)值,槽2中存儲(chǔ)2、6、10、14、 18五個(gè)數(shù)值,槽3中存儲(chǔ)3、7、11、15、19五個(gè)數(shù)值。在這種結(jié)構(gòu)下,如果4個(gè)庫(kù)變?yōu)?個(gè)庫(kù)的時(shí)候,因?yàn)閿?shù)據(jù)從對(duì)4取模變?yōu)閷?duì)8取模, 所以大批量的數(shù)據(jù)都需要重新分配數(shù)據(jù)庫(kù),這會(huì)使遷移成本成倍增加。本申請(qǐng)實(shí)施例一提供的數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的方法,如圖3所示,其中,執(zhí)行數(shù)據(jù)存儲(chǔ)的設(shè)備以服務(wù)器為例,包括以下步驟步驟301,服務(wù)器對(duì)待存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息進(jìn)行取模處理。具體的,本申請(qǐng)實(shí)施例中數(shù)據(jù)庫(kù)以設(shè)置在服務(wù)器中為例進(jìn)行說(shuō)明,即存儲(chǔ)設(shè)備以服務(wù)器為例。本申請(qǐng)實(shí)施例中,待存儲(chǔ)的數(shù)據(jù)包括服務(wù)器中原數(shù)據(jù)庫(kù)內(nèi)的數(shù)據(jù),該原數(shù)據(jù)庫(kù)需要切分為多個(gè)數(shù)據(jù)庫(kù),即進(jìn)行分庫(kù)處理。需要說(shuō)明的是,待存儲(chǔ)的數(shù)據(jù)并不限于原數(shù)據(jù)庫(kù)內(nèi)的數(shù)據(jù),也可以是服務(wù)器新接收的需要存儲(chǔ)的數(shù)據(jù)。下面以及后續(xù)實(shí)施例中待存儲(chǔ)的數(shù)據(jù)均以原數(shù)據(jù)庫(kù)內(nèi)的數(shù)據(jù)為例進(jìn)行說(shuō)明,當(dāng)然如果替換為服務(wù)器新接收的需要存儲(chǔ)的數(shù)據(jù), 則對(duì)應(yīng)的實(shí)施方式仍然可以執(zhí)行。服務(wù)器對(duì)原數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息進(jìn)行取模處理之前,需要設(shè)置取模所需的預(yù)設(shè)值,服務(wù)器對(duì)數(shù)據(jù)的標(biāo)識(shí)信息進(jìn)行取模處理具體為將數(shù)據(jù)的標(biāo)識(shí)信息對(duì)預(yù)設(shè)值進(jìn)行取模,該預(yù)設(shè)值大于分庫(kù)后得到的新的數(shù)據(jù)庫(kù)的個(gè)數(shù),例如為分庫(kù)后得到的數(shù)據(jù)庫(kù)的個(gè)數(shù)的整數(shù)倍數(shù)。與上述圖2對(duì)應(yīng),本申請(qǐng)實(shí)施例中以0-32這33個(gè)數(shù)劃分到4個(gè)數(shù)據(jù)庫(kù)內(nèi)為例,則分庫(kù)后得到的數(shù)據(jù)庫(kù)的個(gè)數(shù)為4,預(yù)設(shè)的值為4的整數(shù)倍,以16為例。需要說(shuō)明的是,該預(yù)設(shè)值還可以是8、32或者其他值,此處僅以16作為一具體實(shí)現(xiàn)方式進(jìn)行介紹。服務(wù)器將0-32這33個(gè)數(shù)進(jìn)行取模處理后得到0_15這16個(gè)值。步驟302,服務(wù)器根據(jù)取模處理得到的值進(jìn)行求商處理。具體的,本申請(qǐng)實(shí)施例中,服務(wù)器對(duì)取模處理得到的值進(jìn)行求商處理時(shí)所使用的除數(shù),為分庫(kù)后得到的數(shù)據(jù)庫(kù)的個(gè)數(shù)。本申請(qǐng)實(shí)施例中該個(gè)數(shù)具體為4。服務(wù)器根據(jù)取模處理得到的值進(jìn)行求商處理具體為將0-15這16個(gè)值分別除以4 得到整數(shù)部分為0-3的值,即圖4中所示的(id Mod 16)/4得到的值的整數(shù)部分為0-3,為方便描述,在以下內(nèi)容中直接寫(xiě)為(id Mod 16)/4 = 0-3。步驟303,服務(wù)器根據(jù)求商處理得到的值在分庫(kù)后的數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)數(shù)據(jù)。具體的,服務(wù)器存儲(chǔ)步驟302中求商處理得到的值與原始數(shù)據(jù)的對(duì)應(yīng)關(guān)系,本步驟中根據(jù)該對(duì)應(yīng)關(guān)系在4個(gè)數(shù)據(jù)庫(kù)內(nèi)分別存儲(chǔ)對(duì)應(yīng)的0-32這33個(gè)數(shù)。如圖4所示,其中槽 0中存儲(chǔ)的數(shù)據(jù)遵循規(guī)則(id mod 16)/4 = 0,槽1中存儲(chǔ)的數(shù)據(jù)遵循規(guī)則(id mod 16)/4 =1,槽2中存儲(chǔ)的數(shù)據(jù)遵循規(guī)則(id mod 16)/4 = 2,槽3中存儲(chǔ)的數(shù)據(jù)遵循規(guī)則(id mod 16) /4 = 3。其中,槽0中存儲(chǔ)0 3、16 20共9個(gè)數(shù)值,槽1中存儲(chǔ)4 7、21 24共8 個(gè)數(shù)值,槽2中存儲(chǔ)8 11、25 28共8個(gè)數(shù)值,槽3中存儲(chǔ)12 15、29 32共8個(gè)數(shù)
本申請(qǐng)實(shí)施例中,將待存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)預(yù)設(shè)值進(jìn)行取模處理,并對(duì)取模處理得到的值進(jìn)行求商處理,然后根據(jù)求商處理的結(jié)果將數(shù)據(jù)存儲(chǔ)在小于預(yù)設(shè)值的個(gè)數(shù)的數(shù)據(jù)庫(kù)中。由于數(shù)據(jù)庫(kù)的個(gè)數(shù)小于預(yù)設(shè)值,通過(guò)這種方式可以使存儲(chǔ)設(shè)備在取模處理時(shí)選擇一個(gè)較大的預(yù)設(shè)值,然后再根據(jù)數(shù)據(jù)庫(kù)的個(gè)數(shù)選擇較小值對(duì)取模結(jié)果進(jìn)行求商,從而將待存儲(chǔ)的數(shù)據(jù)存儲(chǔ)到多個(gè)數(shù)據(jù)庫(kù)中,這種存儲(chǔ)方式在進(jìn)行數(shù)據(jù)庫(kù)的擴(kuò)展時(shí),只需對(duì)由被切分的數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息進(jìn)行計(jì)算處理即可,并根據(jù)計(jì)算出的值進(jìn)行存儲(chǔ),對(duì)其他數(shù)據(jù)庫(kù)并無(wú)影響,避免了對(duì)其他數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)的rehash操作,存儲(chǔ)設(shè)備負(fù)擔(dān)小、 數(shù)據(jù)遷移簡(jiǎn)單并且遷移過(guò)程中數(shù)據(jù)不易丟失,有效地實(shí)現(xiàn)了數(shù)據(jù)庫(kù)的平滑擴(kuò)展。實(shí)施例二如圖5所示,本申請(qǐng)實(shí)施例二是在實(shí)施例一的基礎(chǔ)上,對(duì)實(shí)施例一中的其所述多個(gè)數(shù)據(jù)庫(kù)中的任一數(shù)據(jù)庫(kù)進(jìn)行的一種切分操作,即將所述多個(gè)數(shù)據(jù)庫(kù)中的任一數(shù)據(jù)庫(kù)切分為多個(gè)子數(shù)據(jù)庫(kù),具體包括以下步驟步驟104,將被切分的數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)第二預(yù)設(shè)值進(jìn)行第二次取模處理;該第二預(yù)設(shè)值可以與第一預(yù)設(shè)值可以相同或者不同。步驟105,根據(jù)第二次取模處理得到的值,在多個(gè)子數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)由被切分的數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù)。為了更清楚地闡述實(shí)施例二中數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的方法,下面結(jié)合具體實(shí)現(xiàn)場(chǎng)景進(jìn)行進(jìn)一步詳細(xì)介紹,其中,執(zhí)行數(shù)據(jù)存儲(chǔ)的設(shè)備以服務(wù)器為例。結(jié)合圖4中所示的數(shù)據(jù)存儲(chǔ),假定此時(shí)槽0的數(shù)據(jù)容量不足,則本申請(qǐng)實(shí)施例中服務(wù)器可以只對(duì)該槽0進(jìn)行分庫(kù)處理。具體地,服務(wù)器對(duì)槽0中的數(shù)據(jù)的標(biāo)識(shí)信息進(jìn)行第二次取模處理,該第二次取模處理使用第二預(yù)設(shè)值,例如槽0中的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)2進(jìn)行取模處理,根據(jù)取模結(jié)果將槽 0中的數(shù)據(jù)分配到兩個(gè)子數(shù)據(jù)庫(kù)內(nèi),當(dāng)然還可以根據(jù)實(shí)際需要將槽0中的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)3、4或者其他數(shù)值取模,根據(jù)取模結(jié)果將槽0中的數(shù)據(jù)分配到多個(gè)子數(shù)據(jù)庫(kù)內(nèi)。本實(shí)施例二中,由被切分的數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù)包括由被切分的數(shù)據(jù)庫(kù)已經(jīng)存儲(chǔ)的數(shù)據(jù)以及之前由實(shí)施例一計(jì)算出的由被切分的數(shù)據(jù)庫(kù)存儲(chǔ)的待存儲(chǔ)的數(shù)據(jù)。即切分后,實(shí)施例一中確定的由被切分的數(shù)據(jù)庫(kù)存儲(chǔ)的待存儲(chǔ)的數(shù)據(jù),經(jīng)過(guò)實(shí)施例二中的步驟后,被分別存儲(chǔ)于對(duì)應(yīng)的子數(shù)據(jù)庫(kù)中。在此過(guò)程中,不需要對(duì)其他數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)進(jìn)行處理,因此避免了對(duì)其他數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)的rehash操作。所述第二預(yù)設(shè)值可根據(jù)被切分的數(shù)據(jù)庫(kù)所存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息情況進(jìn)行選擇, 優(yōu)選地,選擇的第二預(yù)設(shè)值能夠使得多個(gè)子數(shù)據(jù)庫(kù)能夠平均分配由被切分的數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù)。實(shí)施例三本申請(qǐng)實(shí)施例三同樣是在實(shí)施例一的基礎(chǔ)上,對(duì)實(shí)施例一中的其所述多個(gè)數(shù)據(jù)庫(kù)中的任一數(shù)據(jù)庫(kù)進(jìn)行的一種切分操作,即將所述多個(gè)數(shù)據(jù)庫(kù)中的任一數(shù)據(jù)庫(kù)切分為多個(gè)子數(shù)據(jù)庫(kù),如圖6所示,具體包括以下步驟步驟106,將由被切分的數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)第三預(yù)設(shè)值進(jìn)行第三次取模處理;
步驟107,對(duì)所述第三次取模處理的結(jié)果進(jìn)行第二次求商處理;步驟108,根據(jù)第二次求商處理得到的第二商值,在多個(gè)子數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)由被切分的數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù)。本實(shí)施例三中,由于實(shí)施例一在進(jìn)行第一次取模處理時(shí)的第一預(yù)設(shè)值大于數(shù)據(jù)庫(kù)個(gè)數(shù),當(dāng)實(shí)施例一中的任一數(shù)據(jù)庫(kù)根據(jù)本實(shí)施例三切分時(shí),通過(guò)第二次求商處理使該被切分的數(shù)據(jù)庫(kù)內(nèi)的數(shù)據(jù)重新存儲(chǔ),而其他數(shù)據(jù)庫(kù)內(nèi)的數(shù)據(jù)則可以不變。優(yōu)選地,所述第三預(yù)設(shè)值與第一預(yù)設(shè)值相同。優(yōu)選地,所述第二次求商處理的第二除數(shù)為所述第一除數(shù)除自身及1以外的約數(shù)。為了更清楚地闡述實(shí)施例三中數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的方法,下面結(jié)合具體實(shí)現(xiàn)場(chǎng)景進(jìn)行進(jìn)一步詳細(xì)介紹,其中,執(zhí)行數(shù)據(jù)存儲(chǔ)的設(shè)備以服務(wù)器為例。結(jié)合圖4中所示的數(shù)據(jù)存儲(chǔ),假定此時(shí)槽0的數(shù)據(jù)容量不足,則本申請(qǐng)實(shí)施例中服務(wù)器可以只對(duì)該槽0進(jìn)行分庫(kù)處理。服務(wù)器將槽0中的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)第三預(yù)設(shè)值進(jìn)行第三次取模處理,優(yōu)選地, 該第三次取模處理的第三預(yù)設(shè)值同步驟301中取模處理的預(yù)設(shè)值相同。然后,對(duì)第三次取模的結(jié)果進(jìn)行第二次求商處理,此處第二次求商處理的第二除數(shù)為步驟302中求商處理的除數(shù)的除其自身及1之外的約數(shù),4的約數(shù)包括1、2和4,除自身及1之外后為2。即本實(shí)施例中該第二除數(shù)為2,根據(jù)該第二除數(shù)將槽0劃分為2個(gè)子數(shù)據(jù)庫(kù)。服務(wù)器進(jìn)一步根據(jù)第二次求商處理得到的第二商值在2個(gè)子數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)槽0內(nèi)的數(shù)據(jù)。如圖7所示,對(duì)槽0進(jìn)行劃分后,原槽0內(nèi)的數(shù)據(jù)被分配到槽0_0和0_1中。本實(shí)施例三同樣具備實(shí)施例二的優(yōu)點(diǎn),即在此過(guò)程中,不需要對(duì)其他數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)進(jìn)行處理,避免了對(duì)其他數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)的rehash操作。并且經(jīng)過(guò)本實(shí)施例三切分后的各子數(shù)據(jù)庫(kù),還可以根據(jù)實(shí)施例二或本實(shí)施例三中的方式進(jìn)行進(jìn)一步的切分, 采用本實(shí)施例三中的方式進(jìn)行進(jìn)一步的切分時(shí),只要該第二除數(shù)還具備除自身及1之外后約數(shù)即可,并且在此過(guò)程中,同樣地不需要對(duì)其他子數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)進(jìn)行處理,避免了對(duì)其他子數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)的rehash操作,依此類(lèi)推,可有效地實(shí)現(xiàn)數(shù)據(jù)庫(kù)的平滑擴(kuò)展。實(shí)施例四本實(shí)施例四是在實(shí)施例二和/或?qū)嵤├幕A(chǔ)上,在對(duì)所述多個(gè)數(shù)據(jù)庫(kù)中的任一數(shù)據(jù)庫(kù)進(jìn)行切分操作后,增加一判斷過(guò)程,即判斷待存儲(chǔ)的數(shù)據(jù)是否為屬于被切分的數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù),該判斷過(guò)程具體包括將待存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)所述第一預(yù)設(shè)值進(jìn)行第一次取模處理,根據(jù)第一次取模處理得到的值進(jìn)行第一次求商處理;根據(jù)第一次求商處理的結(jié)果判斷該待存儲(chǔ)的數(shù)據(jù)是否屬于所述被切分的數(shù)據(jù)庫(kù)。 如果是,則執(zhí)行實(shí)施例二或?qū)嵤├牟襟E,將該待存儲(chǔ)的數(shù)據(jù)存入對(duì)應(yīng)的子數(shù)據(jù)庫(kù)中。實(shí)施例四中,多個(gè)數(shù)據(jù)庫(kù)內(nèi)的某一個(gè)數(shù)據(jù)庫(kù)需要進(jìn)行切分時(shí),通過(guò)預(yù)設(shè)條件的設(shè)置獲知該某一個(gè)數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)的數(shù)據(jù),進(jìn)而僅對(duì)該數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)的數(shù)據(jù)進(jìn)行遷移處理,即遷移到該數(shù)據(jù)庫(kù)切分得到的多個(gè)子數(shù)據(jù)庫(kù)內(nèi)。具體的,以圖4中槽0的擴(kuò)展為例進(jìn)行說(shuō)明,則其預(yù)設(shè)條件為(id mod 16)/4 = 0,即首先判斷數(shù)據(jù)是否為槽0內(nèi)的數(shù)據(jù),然后根據(jù)判斷結(jié)果進(jìn)行數(shù)據(jù)存儲(chǔ)。具體可以表示為 如果落到(id mod 16)/4 = 0的槽內(nèi)的這組數(shù)據(jù)被分配到多個(gè)子槽中,僅將槽0中存儲(chǔ)的數(shù)據(jù)再進(jìn)行切分,這樣就可以解決rehash的問(wèn)題。具體步驟如下首先,判斷(id mod 16)/4的值是否等于0,如果是,計(jì)算(id mod 16)/2的值,根據(jù)(id mod 16)/2計(jì)算出的值,將對(duì)應(yīng)id的待存儲(chǔ)數(shù)據(jù)存儲(chǔ)于對(duì)應(yīng)的子槽中。這樣就等于將原來(lái)在第0個(gè)槽內(nèi)的數(shù)據(jù),重新進(jìn)行了切分,其中,只是槽0內(nèi)的數(shù)據(jù)進(jìn)行rehash,其余槽內(nèi)的數(shù)據(jù)不受影響。在數(shù)據(jù)庫(kù)內(nèi)的數(shù)據(jù)持續(xù)的增長(zhǎng)時(shí),這種方法可以保證數(shù)據(jù)庫(kù)的平滑擴(kuò)展,并且在數(shù)據(jù)庫(kù)切分時(shí),只需要變動(dòng)被由切分的數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù)即可。這種模式可以使用小型的服務(wù)器或存儲(chǔ)設(shè)備來(lái)解決大型服務(wù)器或存儲(chǔ)設(shè)備才能解決的問(wèn)題。例如首先使用小型存儲(chǔ)設(shè)備存儲(chǔ)數(shù)據(jù),隨著存儲(chǔ)數(shù)據(jù)的增多而需要進(jìn)行數(shù)據(jù)庫(kù)切分時(shí),將由切分的數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù)存儲(chǔ)于新增的服務(wù)器或存儲(chǔ)設(shè)備中。這種方式,使得服務(wù)器或存儲(chǔ)設(shè)備可以按當(dāng)前需要設(shè)計(jì),而不需要在一開(kāi)始就預(yù)先采用大型服務(wù)器或存儲(chǔ)設(shè)備,這大大降低了數(shù)據(jù)的存儲(chǔ)成本。實(shí)施例五本申請(qǐng)實(shí)施例五中,根據(jù)數(shù)據(jù)庫(kù)id生成的特點(diǎn)可以很清晰的得知,數(shù)據(jù)的增長(zhǎng)是沿著時(shí)間線(xiàn)逐漸增長(zhǎng)的,在上述實(shí)施例一至四的分庫(kù)分表的基礎(chǔ)上,還可以根據(jù)id的范圍進(jìn)行再一次的切分。如果id小于設(shè)定的閾值時(shí),那么執(zhí)行實(shí)施例一至四中任一實(shí)施例步驟;當(dāng)id大于等于設(shè)定的閾值,可以執(zhí)行新的存儲(chǔ)方法。通過(guò)這樣的模式,可以實(shí)現(xiàn)對(duì)舊數(shù)據(jù)存儲(chǔ)模型的兼容,進(jìn)一步增強(qiáng)了數(shù)據(jù)庫(kù)的平滑擴(kuò)展性。例如,假設(shè)實(shí)施例一至四中設(shè)定的第一預(yù)設(shè)值為16,即最大可以在不需要進(jìn)行rehash的情況下,將數(shù)據(jù)存儲(chǔ)于16個(gè)數(shù)據(jù)庫(kù)中,當(dāng)需要對(duì)16個(gè)數(shù)據(jù)庫(kù)中的任何一個(gè)進(jìn)行切分時(shí),就需要使用rehash的方式了。為解決該問(wèn)題,本實(shí)施例五在實(shí)施例一至四的基礎(chǔ)上,提供如下技術(shù)方案。如圖8所示,在將待存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)第一預(yù)設(shè)值進(jìn)行第一次取模處理之前,執(zhí)行以下步驟步驟100,判斷所述待存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息是否大于設(shè)定閾值;如果否,執(zhí)行實(shí)施例一中的所述步驟101 ;如果是,執(zhí)行步驟109 ;步驟109,存儲(chǔ)該待存儲(chǔ)的數(shù)據(jù)。所述步驟109中,對(duì)該待存儲(chǔ)數(shù)據(jù)的存儲(chǔ)可以采用現(xiàn)有技術(shù)實(shí)現(xiàn)。本實(shí)施例五中, 優(yōu)選地,采用本實(shí)施例一至實(shí)施例四中一任一方法進(jìn)行,只需要根據(jù)需要設(shè)定其相應(yīng)的第一預(yù)設(shè)值、第一除數(shù)、第二預(yù)設(shè)值、第二除數(shù)等值即可。進(jìn)一步優(yōu)選地,所述相應(yīng)的第一預(yù)設(shè)值為實(shí)施例一中所述第一預(yù)設(shè)值的倍數(shù)。。這樣可保證數(shù)據(jù)存儲(chǔ)方式的一致性,方便存儲(chǔ)此部分標(biāo)識(shí)信息大于設(shè)定閾值的數(shù)據(jù)的數(shù)據(jù)庫(kù)的平滑擴(kuò)展。例如,同樣以數(shù)據(jù)的標(biāo)識(shí)信息userjd為例,設(shè)定第一預(yù)設(shè)值為16,第一預(yù)設(shè)值的倍數(shù)以2為例,當(dāng)然還可以根據(jù)需要設(shè)置為其他倍數(shù)。第一預(yù)設(shè)值的2倍數(shù)為32,假設(shè)id 是逐漸自增的,即隨著時(shí)間的變化,id逐漸增大。設(shè)定閾值為10000000000,需要說(shuō)明的是, 該第一預(yù)設(shè)值、閾值可以根據(jù)實(shí)際需要靈活設(shè)置,本實(shí)施例中設(shè)置的值僅為實(shí)現(xiàn)本實(shí)施例中的方法所使用的一種具體實(shí)現(xiàn)方式。具體步驟如下步驟1001,判斷user_id的值是否小于等于10000000000,如果是,執(zhí)行步驟1002 ; 否則執(zhí)行步驟1003 ;
步驟1002,將原數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)第一預(yù)設(shè)值進(jìn)行第一次取模處理,取模方式為id mod 16,即對(duì)應(yīng)實(shí)施一中的步驟101,并執(zhí)行其后的步驟;步驟1003,將原數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)預(yù)設(shè)值的倍數(shù)32進(jìn)行取模處理,此時(shí),取模方式為id mod 32,根據(jù)取模處理的結(jié)果進(jìn)行數(shù)據(jù)存儲(chǔ)。所述步驟1003中可以根據(jù)實(shí)施例一至實(shí)施例四中任一實(shí)施例描述的方式對(duì)取模后的結(jié)果進(jìn)行處理,并進(jìn)行數(shù)據(jù)存儲(chǔ);還可以直接根據(jù)取模處理的結(jié)果進(jìn)行數(shù)據(jù)存儲(chǔ),即將取模處理的結(jié)果與數(shù)據(jù)對(duì)應(yīng),根據(jù)取模處理的結(jié)果將數(shù)據(jù)存儲(chǔ)到不同的數(shù)據(jù)庫(kù)內(nèi)。例如當(dāng)取模方式為id mod 32時(shí),取模結(jié)果為0-31,服務(wù)器將數(shù)據(jù)存儲(chǔ)到32個(gè)劃分后的數(shù)據(jù)庫(kù)內(nèi)。實(shí)施例六本申請(qǐng)實(shí)施例中提供的分庫(kù)方法同時(shí)還可以輔以分表方法,該分表方法的具體實(shí)現(xiàn)與實(shí)施例一至實(shí)施例五中的分庫(kù)方法相似,即根據(jù)數(shù)據(jù)標(biāo)識(shí)信息進(jìn)行取模處理以及求商處理,根據(jù)求商處理的結(jié)果將不同的數(shù)據(jù)標(biāo)識(shí)信息存儲(chǔ)到不同的目標(biāo)表中,如圖9所示,其中第一次計(jì)算得到的下標(biāo)對(duì)應(yīng)的標(biāo)志為數(shù)據(jù)庫(kù)的標(biāo)志,第二次計(jì)算得到的下標(biāo)所對(duì)應(yīng)的標(biāo)志為數(shù)據(jù)庫(kù)內(nèi)的目標(biāo)表。其中的鍵(key)和值(val)對(duì)應(yīng)于本申請(qǐng)實(shí)施例六中的數(shù)據(jù)標(biāo)識(shí)信息和求商處理后的結(jié)果,分庫(kù)規(guī)則和分表規(guī)則為實(shí)施例一至實(shí)施例五中任一實(shí)施例描述的方式,即目標(biāo)表可以采用與數(shù)據(jù)庫(kù)切分相同的方式進(jìn)行切分。例如,實(shí)施例一中在多個(gè)數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)待存儲(chǔ)的數(shù)據(jù)時(shí),對(duì)于向任一數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)的數(shù)據(jù)進(jìn)行第四次取模處理,根據(jù)第四次取模處理得到的值進(jìn)行第三次求商處理,根據(jù)第三次求商處理的值將數(shù)據(jù)存儲(chǔ)到不同的目標(biāo)表。優(yōu)選的,第四次取模處理和第三次求商處理分別與第一次取模處理和第一次求商處理相同。當(dāng)目標(biāo)表需要切分時(shí),則可以根據(jù)實(shí)施例二或三中所述的方法進(jìn)行切分,例如根據(jù)實(shí)施例二中所述的方法對(duì)目標(biāo)表內(nèi)存儲(chǔ)的數(shù)據(jù)進(jìn)行第二次取模處理后,根據(jù)取模處理的結(jié)果切分目標(biāo)表;或者根據(jù)實(shí)施例三中所述的方法對(duì)目標(biāo)表內(nèi)存儲(chǔ)的數(shù)據(jù)進(jìn)行第三次取模處理和第二次求商處理,根據(jù)第二次求商處理的結(jié)果切分目標(biāo)表。實(shí)施例七本申請(qǐng)實(shí)施例六提供一種存儲(chǔ)裝置,如圖10所示,包括取模模塊11,用于將待存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)第一預(yù)設(shè)值進(jìn)行第一次取模處理;求商模塊12,用于根據(jù)所述第一次取模處理得到的值進(jìn)行第一次求商處理;存儲(chǔ)模塊13,用于根據(jù)所述第一次求商處理得到的第一商值,在多個(gè)數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)所述待存儲(chǔ)的數(shù)據(jù),所述第一預(yù)設(shè)值大于所述數(shù)據(jù)庫(kù)的個(gè)數(shù)。優(yōu)選地,所述第一次求商處理的第一除數(shù)為所述數(shù)據(jù)庫(kù)的個(gè)數(shù);所述第一預(yù)設(shè)值為所述數(shù)據(jù)庫(kù)的個(gè)數(shù)的整數(shù)倍數(shù)。進(jìn)一步地,所述取模模塊11還用于當(dāng)對(duì)所述多個(gè)數(shù)據(jù)庫(kù)中的任一數(shù)據(jù)庫(kù)進(jìn)行切分操作時(shí),將由被切分的數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)第二預(yù)設(shè)值進(jìn)行第二次取模處理;相應(yīng)的,所述存儲(chǔ)模塊12還用于根據(jù)第二次取模處理得到的值,在多個(gè)子數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)由被切分的數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù)。所述取模模塊11還用于當(dāng)對(duì)所述多個(gè)數(shù)據(jù)庫(kù)中的任一數(shù)據(jù)庫(kù)進(jìn)行切分操作時(shí), 將由被切分的數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)第三預(yù)設(shè)值進(jìn)行第三次取模處理;
相應(yīng)的,所述求商模塊12還用于對(duì)所述第三次取模處理的結(jié)果進(jìn)行第二次求商處理,所述第二次求商處理的第二除數(shù)為所述第一除數(shù)除自身及1以外的約數(shù);相應(yīng)的,所述存儲(chǔ)模塊13還用于根據(jù)第二次求商處理得到的第二商值,在多個(gè)子數(shù)據(jù)庫(kù)內(nèi)被切分的數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù)。如圖11所示,該裝置還包括判斷模塊14,用于在對(duì)所述多個(gè)數(shù)據(jù)庫(kù)中的任一數(shù)據(jù)庫(kù)進(jìn)行切分操作后,通過(guò)所述取模模塊將待存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)所述第一預(yù)設(shè)值進(jìn)行所述第一次取模處理,通過(guò)所述求商模塊根據(jù)第一次取模處理得到的值進(jìn)行第一次求商處理,并根據(jù)第一次求商處理的結(jié)果判斷該數(shù)據(jù)是否屬于由所述被切分的數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù)。如圖12所示,所述存儲(chǔ)模塊13包括獲取子模塊131,用于獲取所述第一次求商處理得到的值的整數(shù)部分;存儲(chǔ)子模塊132,用于根據(jù)所述第一次求商處理得到的值的整數(shù)部分將待存儲(chǔ)的數(shù)據(jù)存儲(chǔ)到不同的數(shù)據(jù)庫(kù)。如圖13所示,該設(shè)備還包括判斷模塊14,用于判斷所述待存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息是否大于閾值;所述取模模塊11還用于當(dāng)所述判斷結(jié)果為否時(shí),將所述待存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)所述第一預(yù)設(shè)值進(jìn)行第一次取模;當(dāng)所述判斷結(jié)果為是時(shí),將所述待存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)所述第一預(yù)設(shè)值的倍數(shù)進(jìn)行第一次取模處理。所述取模模塊11還用于對(duì)于向任一數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)的數(shù)據(jù)進(jìn)行第四次取模處理; 相應(yīng)的,所述求商模塊12還用于根據(jù)所述第四次取模處理得到的值進(jìn)行第三次求商處理;所述存儲(chǔ)模塊13還用于根據(jù)所述第三次求商處理的值將數(shù)據(jù)存儲(chǔ)到不同的目標(biāo)表。本申請(qǐng)實(shí)施例中,通過(guò)存儲(chǔ)裝置對(duì)待存儲(chǔ)的數(shù)據(jù)進(jìn)行取模處理,并將取模后的結(jié)果進(jìn)行求商處理,根據(jù)求商處理得到的值在分庫(kù)后的數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)原數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)的數(shù)據(jù),實(shí)現(xiàn)了數(shù)據(jù)庫(kù)的切分處理,解決數(shù)據(jù)庫(kù)的平滑擴(kuò)展問(wèn)題。通過(guò)以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā)明可借助軟件加必需的通用硬件平臺(tái)的方式來(lái)實(shí)現(xiàn),當(dāng)然也可以通過(guò)硬件,但很多情況下前者是更佳的實(shí)施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述的方法。本領(lǐng)域技術(shù)人員可以理解附圖只是一個(gè)優(yōu)選實(shí)施例的示意圖,附圖中的模塊或流程并不一定是實(shí)施本發(fā)明所必須的。本領(lǐng)域技術(shù)人員可以理解實(shí)施例中的裝置中的模塊可以按照實(shí)施例描述進(jìn)行分布于實(shí)施例的裝置中,也可以進(jìn)行相應(yīng)變化位于不同于本實(shí)施例的一個(gè)或多個(gè)裝置中。上述實(shí)施例的模塊可以合并為一個(gè)模塊,也可以進(jìn)一步拆分成多個(gè)子模塊。上述本發(fā)明實(shí)施例序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。以上公開(kāi)的僅為本發(fā)明的幾個(gè)具體實(shí)施例,但是,本發(fā)明并非局限于此,任何本領(lǐng)域的技術(shù)人員能思之的變化都應(yīng)落入本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的方法,其特征在于,包括將待存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)第一預(yù)設(shè)值進(jìn)行第一次取模處理; 根據(jù)第一次取模處理得到的值進(jìn)行第一次求商處理;根據(jù)第一次求商處理得到的第一商值,在多個(gè)數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)所述待存儲(chǔ)的數(shù)據(jù),所述第一預(yù)設(shè)值大于所述數(shù)據(jù)庫(kù)的個(gè)數(shù)。
2.如權(quán)利要求1所述的方法,其特征在于,所述第一次求商處理的第一除數(shù)為所述數(shù)據(jù)庫(kù)的個(gè)數(shù); 所述第一預(yù)設(shè)值為所述數(shù)據(jù)庫(kù)的個(gè)數(shù)的整數(shù)倍數(shù)。
3.如權(quán)利要求1所述的方法,其特征在于,還包括將所述多個(gè)數(shù)據(jù)庫(kù)中的任一數(shù)據(jù)庫(kù)切分為多個(gè)子數(shù)據(jù)庫(kù)的步驟,將由被切分的數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)第二預(yù)設(shè)值進(jìn)行第二次取模處理;根據(jù)第二次取模處理得到的值,在多個(gè)子數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)由被切分的數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù)。
4.如權(quán)利要求1所述的方法,其特征在于,還包括將所述多個(gè)數(shù)據(jù)庫(kù)中的任一數(shù)據(jù)庫(kù)切分為多個(gè)子數(shù)據(jù)庫(kù)的步驟,將由被切分的數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)第三預(yù)設(shè)值進(jìn)行第三次取模處理;對(duì)所述第三次取模處理的結(jié)果進(jìn)行第二次求商處理,所述第二次求商處理的第二除數(shù)為所述第一除數(shù)除自身及1以外的約數(shù);根據(jù)第二次求商處理得到的第二商值,在多個(gè)子數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)由被切分的數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù)。
5.如權(quán)利要求3或4所述的方法,其特征在于,所述將所述多個(gè)數(shù)據(jù)庫(kù)中的任一數(shù)據(jù)庫(kù)切分為多個(gè)子數(shù)據(jù)庫(kù)的步驟之后,還包括將待存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)所述第一預(yù)設(shè)值進(jìn)行所述第一次取模處理,并根據(jù)第一次取模處理得到的值進(jìn)行第一次求商處理;根據(jù)第一次求商處理的結(jié)果判斷該待存儲(chǔ)的數(shù)據(jù)是否屬于所述被切分的數(shù)據(jù)庫(kù)。
6.如權(quán)利要求1-4中任一項(xiàng)所述的方法,其特征在于,根據(jù)所述第一次求商處理得到的第一商值在多個(gè)數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)所述待存儲(chǔ)的數(shù)據(jù),包括獲取所述第一次求商處理得到的值的整數(shù)部分;根據(jù)所述第一次求商處理得到的值的整數(shù)部分,將待存儲(chǔ)的數(shù)據(jù)存儲(chǔ)于不同的數(shù)據(jù)庫(kù)中。
7.如權(quán)利要求1-4中任一項(xiàng)所述的方法,其特征在于,將待存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)預(yù)設(shè)值進(jìn)行第一次取模處理之前,還包括判斷所述待存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息是否大于閾值;當(dāng)所述判斷結(jié)果為否時(shí),執(zhí)行將待存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)所述第一預(yù)設(shè)值進(jìn)行第一次取模處理的步驟;當(dāng)所述判斷結(jié)果為是時(shí),將所述待存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)所述第一預(yù)設(shè)值的倍數(shù)進(jìn)行第一次取模處理。
8.如權(quán)利要求1-4中任一項(xiàng)所述的方法,其特征在于,所述在多個(gè)數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)所述待存儲(chǔ)的數(shù)據(jù)包括對(duì)于向任一數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)的數(shù)據(jù)進(jìn)行第四次取模處理,根據(jù)所述第四次取模處理得到的值進(jìn)行第三次求商處理,根據(jù)所述第三次求商處理的值將數(shù)據(jù)存儲(chǔ)到不同的目標(biāo)表。
9.一種存儲(chǔ)裝置,其特征在于,包括取模模塊,用于將待存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)第一預(yù)設(shè)值進(jìn)行第一次取模處理; 求商模塊,用于根據(jù)所述第一次取模處理得到的值進(jìn)行第一次求商處理; 存儲(chǔ)模塊,用于根據(jù)所述第一次求商處理得到的第一商值,在多個(gè)數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)所述待存儲(chǔ)的數(shù)據(jù),所述第一預(yù)設(shè)值大于所述數(shù)據(jù)庫(kù)的個(gè)數(shù)。
10.如權(quán)利要求9所述的存儲(chǔ)裝置,其特征在于,所述第一次求商處理的第一除數(shù)為所述數(shù)據(jù)庫(kù)的個(gè)數(shù); 所述第一預(yù)設(shè)值為所述數(shù)據(jù)庫(kù)的個(gè)數(shù)的整數(shù)倍數(shù)。
11.如權(quán)利要求9所述的存儲(chǔ)裝置,其特征在于,所述取模模塊還用于當(dāng)對(duì)所述多個(gè)數(shù)據(jù)庫(kù)中的任一數(shù)據(jù)庫(kù)進(jìn)行切分操作時(shí),將由被切分的數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)第二預(yù)設(shè)值進(jìn)行第二次取模處理;所述存儲(chǔ)模塊還用于根據(jù)第二次取模處理得到的值,在多個(gè)子數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)由被切分的數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù)。
12.如權(quán)利要求9所述的存儲(chǔ)裝置,其特征在于,所述取模模塊還用于當(dāng)對(duì)所述多個(gè)數(shù)據(jù)庫(kù)中的任一數(shù)據(jù)庫(kù)進(jìn)行切分操作時(shí),將由被切分的數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)第三預(yù)設(shè)值進(jìn)行第三次取模處理;所述求商模塊還用于對(duì)所述第三次取模處理的結(jié)果進(jìn)行第二次求商處理,所述第二次求商處理的第二除數(shù)為所述第一除數(shù)除自身及1以外的約數(shù);所述存儲(chǔ)模塊還用于根據(jù)第二次求商處理得到的第二商值,在多個(gè)子數(shù)據(jù)庫(kù)內(nèi)被切分的數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù)。
13.如權(quán)利要求11或12所述的存儲(chǔ)裝置,其特征在于,還包括判斷模塊,用于在對(duì)所述多個(gè)數(shù)據(jù)庫(kù)中的任一數(shù)據(jù)庫(kù)進(jìn)行切分操作后,通過(guò)所述取模模塊將待存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)所述第一預(yù)設(shè)值進(jìn)行所述第一次取模處理,通過(guò)所述求商模塊根據(jù)第一次取模處理得到的值進(jìn)行第一次求商處理,并根據(jù)第一次求商處理的結(jié)果判斷該數(shù)據(jù)是否屬于由所述被切分的數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù)。
14.如權(quán)利要求9-12中任一項(xiàng)所述的存儲(chǔ)裝置,其特征在于,所述存儲(chǔ)模塊包括 獲取子模塊,用于獲取所述第一次求商處理得到的值的整數(shù)部分;存儲(chǔ)子模塊,用于根據(jù)所述第一次求商處理得到的值的整數(shù)部分將待存儲(chǔ)的數(shù)據(jù)存儲(chǔ)到不同的數(shù)據(jù)庫(kù)。
15.如權(quán)利要求9-12所述的存儲(chǔ)裝置,其特征在于,還包括 判斷模塊,用于判斷所述待存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息是否大于閾值;所述取模模塊還用于當(dāng)所述判斷結(jié)果為否時(shí),將所述待存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)所述第一預(yù)設(shè)值進(jìn)行第一次取模;當(dāng)所述判斷結(jié)果為是時(shí),將所述待存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)所述第一預(yù)設(shè)值的倍數(shù)進(jìn)行第一次取模處理。
16.如權(quán)利要求9-12所述的存儲(chǔ)裝置,其特征在于,所述取模模塊還用于對(duì)于向任一數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)的數(shù)據(jù)進(jìn)行第四次取模處理; 所述求商模塊還用于根據(jù)所述第四次取模處理得到的值進(jìn)行第三次求商處理;所述存儲(chǔ)模塊還用于根據(jù)所述第三次求商處理的值將數(shù)據(jù)存儲(chǔ)到不同的目標(biāo)表。
全文摘要
本申請(qǐng)公開(kāi)了一種數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的方法和裝置。本申請(qǐng)中,將待存儲(chǔ)的數(shù)據(jù)的標(biāo)識(shí)信息對(duì)預(yù)設(shè)值進(jìn)行取模處理,并對(duì)取模處理得到的值進(jìn)行求商處理,然后根據(jù)求商處理的結(jié)果將數(shù)據(jù)存儲(chǔ)在不同數(shù)據(jù)庫(kù),由于數(shù)據(jù)庫(kù)的個(gè)數(shù)小于預(yù)設(shè)值,通過(guò)這種方式可以使存儲(chǔ)設(shè)備在取模處理時(shí)選擇一個(gè)較大的預(yù)設(shè)值,然后再根據(jù)數(shù)據(jù)庫(kù)的個(gè)數(shù)選擇較小值對(duì)取模結(jié)果進(jìn)行求商,根據(jù)求商的值將數(shù)據(jù)存儲(chǔ)到多個(gè)數(shù)據(jù)庫(kù)中,這種存儲(chǔ)方式,在數(shù)據(jù)庫(kù)的擴(kuò)展過(guò)程中,只需對(duì)需要切分的數(shù)據(jù)庫(kù)再次進(jìn)行取模等步驟,根據(jù)計(jì)算出的值進(jìn)行數(shù)據(jù)存儲(chǔ),對(duì)其他數(shù)據(jù)庫(kù)無(wú)影響,避免了可能的rehash操作,存儲(chǔ)設(shè)備負(fù)擔(dān)小、數(shù)據(jù)遷移簡(jiǎn)單并且遷移過(guò)程中數(shù)據(jù)不易丟失,有效地實(shí)現(xiàn)了數(shù)據(jù)庫(kù)的平滑擴(kuò)展。
文檔編號(hào)G06F17/30GK102262626SQ20101018036
公開(kāi)日2011年11月30日 申請(qǐng)日期2010年5月24日 優(yōu)先權(quán)日2010年5月24日
發(fā)明者王晶昱 申請(qǐng)人:阿里巴巴集團(tuán)控股有限公司