本發(fā)明涉及通訊領(lǐng)域,尤其涉及一種數(shù)據(jù)庫及其分表裝置和方法。
背景技術(shù):
::MySQL數(shù)據(jù)庫是現(xiàn)在常用的一種數(shù)據(jù)存儲,但是當存儲的數(shù)據(jù)量達到一定數(shù)量后,MySQL的查詢性能將會出現(xiàn)嚴重下降,這時候就需要將數(shù)據(jù)庫中的大表做數(shù)據(jù)拆分?,F(xiàn)有的分表方法是從業(yè)務維度對數(shù)據(jù)進行拆分,比如根據(jù)ID范圍分表,如0~1000數(shù)據(jù)在表1,1001~2000在表2,還可以使用ID求余或者根據(jù)ID進行hash算法后取模來進行分表。然而,使用范圍分表需要固定表數(shù)據(jù)的大??;而使用求余或者hash取模的方式來分表,則在開發(fā)初始就限制了分表的數(shù)量,在數(shù)據(jù)量持續(xù)增加后,會發(fā)生單表數(shù)據(jù)量過大,性能降低的情況,并且對分表的擴展存在一定的難度?,F(xiàn)有方法在對MySQL數(shù)據(jù)庫進行分表時,分表方式較為固定,靈活性較低,每種分表方式都存在較大的限制性,用戶體驗較低。技術(shù)實現(xiàn)要素:本發(fā)明的主要目的在于提出一種數(shù)據(jù)庫及其分表裝置和方法,旨在解決現(xiàn)有技術(shù)在對MySQL數(shù)據(jù)庫進行分表時,分表方式較為固定,只能在已經(jīng)分配好的固定個數(shù)的分表中進行業(yè)務數(shù)據(jù)的存儲,在每個分表的存儲量都較大時,就會導致系統(tǒng)查詢性能較低的問題。為實現(xiàn)上述目的,本發(fā)明提供的一種數(shù)據(jù)庫的分表裝置,包括:第一判斷模塊,用于在接收到業(yè)務請求時,判斷所述業(yè)務請求對應的用戶是否是第一次請求所述業(yè)務;第二判斷模塊,用于在所述用戶是第一次請求所述業(yè)務的情況下,通過分表計數(shù)器將當前的第一分表的存儲量加一,并判斷所述第一分表的存儲量是否達到預設(shè)的數(shù)據(jù)量上限值;執(zhí)行模塊,用于在所述第一分表存儲量達到所述數(shù)據(jù)量上限值的情況下,根據(jù)所述用戶的用戶地址將所述業(yè)務的業(yè)務數(shù)據(jù)保存在預先建立好的第二分表中,通過所述分表計數(shù)器統(tǒng)計所述第二分表的存儲量,并建立第三分表;其中,分表的分表名稱由分表前綴和分表后綴組成,每個業(yè)務對應的分表的分表前綴相同且分表后綴不同。可選的,所述裝置還包括:設(shè)置模塊,用于預先在緩存中設(shè)置每個業(yè)務對應的分表名稱、分表的所述數(shù)據(jù)量上限值和所述分表計數(shù)器。可選的,所述執(zhí)行模塊,還用于在所述第二分表的存儲量達到所述數(shù)據(jù)量上限值的情況下,將新用戶的業(yè)務數(shù)據(jù)保存在預先建立好的第三分表中,通過所述分表計數(shù)器統(tǒng)計所述第三分表的存儲量,并建立第四分表,其中,所述新用戶為第一次請求所述業(yè)務的用戶??蛇x的,所述裝置還包括:查找模塊,用于在所述用戶不是第一次請求所述業(yè)務的情況下,獲取所述用戶的用戶地址,并根據(jù)所述用戶地址在所述業(yè)務對應的分表中查找業(yè)務數(shù)據(jù)的存儲位置;所述執(zhí)行模塊,還用于在查找到所述存儲位置的情況下,將所述業(yè)務的業(yè)務數(shù)據(jù)保存在所述存儲位置。此外,為實現(xiàn)上述目的,本發(fā)明還提出一種數(shù)據(jù)庫,包括:上述的數(shù)據(jù)庫的分表裝置。此外,為實現(xiàn)上述目的,本發(fā)明還提出一種數(shù)據(jù)庫的分表方法,所述方法包括步驟:在接收到業(yè)務請求時,判斷所述業(yè)務請求對應的用戶是否是第一次請求所述業(yè)務;在所述用戶是第一次請求所述業(yè)務的情況下,將當前的第一分表的存儲量加一,并判斷所述第一分表的存儲量是否達到預設(shè)的數(shù)據(jù)量上限值;在所述第一分表存儲量達到所述數(shù)據(jù)量上限值的情況下,根據(jù)所述用戶的用戶地址將所述業(yè)務的業(yè)務數(shù)據(jù)保存在預先建立好的第二分表中,統(tǒng)計所述第二分表的存儲量,并建立第三分表;其中,分表的分表名稱由分表前綴和分表后綴組成,每個業(yè)務對應的分表的分表前綴相同且分表后綴不同??蛇x的,在接收到業(yè)務請求之前,還包括:預先在緩存中設(shè)置每個業(yè)務對應的分表名稱和分表的所述數(shù)據(jù)量上限值,并預先設(shè)置在所述緩存中統(tǒng)計分表的存儲量。可選的,上述分表名稱的分表后綴設(shè)置規(guī)則如下:將分表生成的時間或分表生成的順序作為所述分表后綴??蛇x的,所述方法包括:在所述第二分表的存儲量達到所述數(shù)據(jù)量上限值的情況下,將新用戶的業(yè)務數(shù)據(jù)保存在預先建立好的第三分表中,統(tǒng)計所述第三分表的存儲量,并建立第四分表,其中,所述新用戶為第一次請求所述業(yè)務的用戶??蛇x的,判斷所述業(yè)務請求對應的用戶是否是第一次請求所述業(yè)務之后,還包括:在所述用戶不是第一次請求所述業(yè)務的情況下,獲取所述用戶的用戶地址,并根據(jù)所述用戶地址在所述業(yè)務對應的分表中查找業(yè)務數(shù)據(jù)的存儲位置;在查找到所述存儲位置的情況下,將所述業(yè)務的業(yè)務數(shù)據(jù)保存在所述存儲位置。本發(fā)明在確定發(fā)送業(yè)務申請的用戶是第一次請求該業(yè)務的情況下,會通過分表計數(shù)器來統(tǒng)計該分表的存儲量,并判斷存儲量與預設(shè)的數(shù)據(jù)量上限值的關(guān)系,在存儲量達到數(shù)據(jù)量上限值時,通過一個已建立好的新分表來進行存儲,并使用分表計數(shù)器統(tǒng)計新的分表,該過程中,分表的個數(shù)不是固定的,可以根據(jù)需求無限的建立,并且由于分表計數(shù)器是一個小程序,因此,每個分表中的存儲量也是可以變化的,解決了現(xiàn)有技術(shù)在對MySQL數(shù)據(jù)庫進行分表時,分表方式較為固定,只能在已經(jīng)分配好的固定個數(shù)的分表中進行業(yè)務數(shù)據(jù)的存儲,在每個分表的存儲量都較大時,就會導致系統(tǒng)查詢性能較低的問題。附圖說明圖1為本發(fā)明第一實施例的數(shù)據(jù)庫的分表裝置的結(jié)構(gòu)示意圖;圖2為本發(fā)明第二實施例的數(shù)據(jù)庫的分表裝置的結(jié)構(gòu)示意圖;圖3為本發(fā)明第四實施例的數(shù)據(jù)庫的分表方法的流程圖。本發(fā)明目的的實現(xiàn)、功能特點及優(yōu)點將結(jié)合實施例,參照附圖做進一步說明。具體實施方式應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。本發(fā)明第一實施例提出一種數(shù)據(jù)庫的分表裝置,該裝置的結(jié)構(gòu)示意如圖1所示,包括:第一判斷模塊10,用于在接收到業(yè)務請求時,判斷業(yè)務請求對應的用戶是否是第一次請求業(yè)務;第二判斷模塊11,用于在用戶是第一次請求業(yè)務的情況下,通過分表計數(shù)器將當前的第一分表的存儲量加一,并判斷第一分表的存儲量是否達到預設(shè)的數(shù)據(jù)量上限值;執(zhí)行模塊12,用于在第一分表存儲量達到數(shù)據(jù)量上限值的情況下,根據(jù)用戶的用戶地址將業(yè)務的業(yè)務數(shù)據(jù)保存在預先建立好的第二分表中,通過分表計數(shù)器統(tǒng)計第二分表的存儲量,并建立第三分表;其中,分表的分表名稱由分表前綴和分表后綴組成,每個業(yè)務對應的分表的分表前綴相同且分表后綴不同。在實現(xiàn)時,第一判斷模塊10在接收到業(yè)務請求時,需要對發(fā)送該業(yè)務請求的用戶進行一個判斷,即判斷該用戶是否為第一次請求該業(yè)務。如果用戶是第一次請求該業(yè)務,說明其之前并沒有在該業(yè)務對應的任何分表中有用戶的信息,現(xiàn)在需要建立該用戶對應的信息。然而,在哪個分表中存儲該用戶的業(yè)務數(shù)據(jù)是一個問題,因此,本發(fā)明實施例采用了分表計數(shù)器來解決該問題。分表計數(shù)器在實現(xiàn)時可以以一個小的程序來實現(xiàn),其就是一個循環(huán)計數(shù)的過程,即在每一個分表中,從0開始計數(shù),每當有一個新用戶時,便在分表計數(shù)器中加一,該分表計數(shù)器統(tǒng)計的數(shù)量就是當前第一分表存儲數(shù)據(jù)的存儲量,由于分表計數(shù)器是一個單獨的小程序,因此,其內(nèi)置的存儲量是可以根據(jù)用戶需求而簡單的就能完成修改的。實際上,存儲數(shù)據(jù)是按照用戶ID(地址)來統(tǒng)計的,因此,在上述過程中判斷的也是用戶是否是第一次請求該業(yè)務,并在第一次請求時,才通過分表計數(shù)器來統(tǒng)計。第二判斷模塊11在用戶是第一次請求該業(yè)務的情況下,判斷加一之后的分表計數(shù)器的數(shù)量是否超過預設(shè)的數(shù)據(jù)量上限值。執(zhí)行模塊12在加一之后的分表計數(shù)器的數(shù)量超過預設(shè)的數(shù)據(jù)量上限值的情況下,確定第一分表存儲量達到上限,此時,需要將該用戶對應的業(yè)務數(shù)據(jù)存儲在另一個第二分表中。本發(fā)明實施例為了保證在當前第一分表存儲量達到上限后仍不影響新的業(yè)務數(shù)據(jù)的存儲,因此,第二分表是預先就建立好的,在具體實現(xiàn)時,如果第一分表是該業(yè)務對應的第一個初始分表,則第二分表可以是在建立第一分表的時候就也將其建立好,如果第一分表不是初始分表,而是初始分表后又建立的分表,則第二分表可以是第一分表剛進入使用的同時建立的。執(zhí)行模塊12在將新用戶的業(yè)務數(shù)據(jù)進行存儲時,不知簡單的隨便投入第二分表中,而是需要借助用戶ID的,即根據(jù)用戶ID將該業(yè)務對應的業(yè)務數(shù)據(jù)保存在預先建立好的第二分表中,以便后續(xù)該用戶作為老用戶再申請同樣的業(yè)務時,可以將其存儲在第二分表中對應的位置。此時,第一分表存儲的數(shù)據(jù)已經(jīng)滿了,才將該業(yè)務數(shù)據(jù)存儲在第二分表中,由于第二分表開始使用,分表計數(shù)器也重新從0開始統(tǒng)計,但由于此時已經(jīng)確定要將上述業(yè)務數(shù)據(jù)存儲第二分表中,因此,此時對分表計數(shù)器加一,再判斷將該業(yè)務數(shù)據(jù)保存在第二分表內(nèi)是否會使第二分表的存儲量達到第二分表對應的數(shù)據(jù)量上限值。在統(tǒng)計后,確認第二分表的存儲量不會達到其對應的數(shù)據(jù)量上限值時,將該業(yè)務數(shù)據(jù)存儲在第二分表中。當然,如果只是一個分表內(nèi)的存儲,只判斷一次是否超過該分表對應的數(shù)據(jù)量上限值即可,但由于本實施例涉及的過程是,一個分表滿了、需要存入另一個分表的情況,因此,本發(fā)明實施例從系統(tǒng)嚴謹性考慮,優(yōu)選的讓分表計數(shù)器進行兩次判斷,即在第一分表判斷后,在第二分表中也進行一次判斷。當然,在具體實現(xiàn)時,由于第一份表已滿,第二分表又是空的,則可以省略在第二分表中分表計數(shù)器的第一次判斷過程,即直接將業(yè)務數(shù)據(jù)存儲在第二分表中,并對分表計數(shù)器加一。在有下一個新用戶也要存儲該業(yè)務對應的業(yè)務數(shù)據(jù)時,其應當存儲在第二分表中,此時,才需要分表計數(shù)器先加一,然后再判斷加一后的數(shù)量與數(shù)據(jù)量上限值的關(guān)系。在確認啟用第二分表時或在將業(yè)務數(shù)據(jù)存儲至第二分表后,即刻建立第三分表,以便在第二分表存儲量達到數(shù)據(jù)量上限值時,能有下一個分表來及時存儲業(yè)務數(shù)據(jù)。因此,執(zhí)行模塊12,還可以在第二分表的存儲量達到數(shù)據(jù)量上限值的情況下,將新用戶的業(yè)務數(shù)據(jù)保存在預先建立好的第三分表中,通過分表計數(shù)器統(tǒng)計第三分表的存儲量,并建立第四分表。對于上述的分表,每一個業(yè)務對應的各個分表都需要有不同的名字,然而,由于是相同業(yè)務的各個分表,名字又不能完全不同,所以,本發(fā)明實施例將分表的分表名稱設(shè)置為由分表前綴和分表后綴組成,并在設(shè)置時,每個業(yè)務對應的分表的分表前綴相同且分表后綴不同。分表前綴相同是為了確定是哪些業(yè)務,分表后綴不同是為了區(qū)分是該業(yè)務對應的不同分表,然而,分表后綴也不能是雜亂無序的,本發(fā)明實施例上述分表后綴設(shè)置規(guī)則可以如下,即將分表生成的時間或分表生成的順序作為分表后綴。例如,如果將分表生成的順序作為分表后綴,則分表名稱可以是“分表前綴_1、分表前綴_2、分表前綴_3、……”。在上述方法實現(xiàn)的過程中,其每一個分表存儲滿了,就重新開啟下一個分表進行存儲,因此,本發(fā)明實施例分表的建立過程是邊存儲邊建立的,與現(xiàn)有技術(shù)中預先就建立好多少個分表的過程是完全不同的。本發(fā)明實施例在確定發(fā)送業(yè)務申請的用戶是第一次請求該業(yè)務的情況下,會通過分表計數(shù)器來統(tǒng)計該分表的存儲量,并判斷存儲量與預設(shè)的數(shù)據(jù)量上限值的關(guān)系,在存儲量達到數(shù)據(jù)量上限值時,通過一個已建立好的新分表來進行存儲,并使用分表計數(shù)器統(tǒng)計新的分表,該過程中,分表的個數(shù)不是固定的,可以根據(jù)需求無限的建立,并且由于分表計數(shù)器是一個小程序,因此,每個分表中的存儲量也是可以變化的,解決了現(xiàn)有技術(shù)在對數(shù)據(jù)庫進行分表時,分表方式較為固定,只能在已經(jīng)分配好的固定個數(shù)的分表中進行業(yè)務數(shù)據(jù)的存儲,在每個分表的存儲量都較大時,就會導致系統(tǒng)查詢性能較低的問題。本發(fā)明第二實施例提供一種數(shù)據(jù)庫的分表裝置,該裝置的結(jié)構(gòu)示意如圖2所示,包括:設(shè)置模塊20,用于預先在緩存中設(shè)置每個業(yè)務對應的分表名稱、分表的數(shù)據(jù)量上限值和分表計數(shù)器。第一判斷模塊21,用于在接收到業(yè)務請求時,判斷業(yè)務請求對應的用戶是否是第一次請求業(yè)務;第二判斷模塊22,用于在用戶是第一次請求業(yè)務的情況下,通過分表計數(shù)器將當前的第一分表的存儲量加一,并判斷第一分表的存儲量是否達到預設(shè)的數(shù)據(jù)量上限值;執(zhí)行模塊23,用于在第一分表存儲量達到數(shù)據(jù)量上限值的情況下,根據(jù)用戶的用戶地址將業(yè)務的業(yè)務數(shù)據(jù)保存在預先建立好的第二分表中,通過分表計數(shù)器統(tǒng)計第二分表的存儲量,并建立第三分表;其中,分表的分表名稱由分表前綴和分表后綴組成,每個業(yè)務對應的分表的分表前綴相同且分表后綴不同。在實現(xiàn)時,本發(fā)明實施例先通過設(shè)置模塊20來預先在緩存中設(shè)置每個業(yè)務對應的分表名稱、分表的數(shù)據(jù)量上限值和分表計數(shù)器,該過程就是一個預先設(shè)置的過程。在設(shè)置時,緩存可以是服務器系統(tǒng)內(nèi)部的緩存,當然,也可以是第三方緩存系統(tǒng),例如,Redis緩存。分表名稱可以通過一個小的程序來實現(xiàn),當然,由于分表名稱是由分表前綴和分表后綴組成的,且每一個業(yè)務對應的分表前綴是沒有變化的,而分表后綴是有變化的,因此,也可以通過兩個小程序來實現(xiàn)上述分表名稱的設(shè)置。分表的數(shù)據(jù)量上限值和分表計數(shù)器在設(shè)置時都可以通過小程序來實現(xiàn),進而設(shè)置在緩存中,由于是設(shè)置在緩存中,修改較為方便,如果需要修改數(shù)據(jù)量上限值,直接修改小程序中的代碼就可以輕松的調(diào)整每個分表的容量。在實現(xiàn)時,第一判斷模塊21在接收到業(yè)務請求時,需要對發(fā)送該業(yè)務請求的用戶進行一個判斷,即判斷該用戶是否為第一次請求該業(yè)務。如果用戶是第一次請求該業(yè)務,說明其之前并沒有在該業(yè)務對應的任何分表中有用戶的信息,現(xiàn)在需要建立該用戶對應的信息。然而,在哪個分表中存儲該用戶的業(yè)務數(shù)據(jù)是一個問題,因此,本發(fā)明實施例采用了分表計數(shù)器來解決該問題。對于分表計數(shù)器,其就是一個循環(huán)計數(shù)的過程,即在每一個分表中,從0開始計數(shù),每當有一個新用戶時,便在分表計數(shù)器中加一,該分表計數(shù)器統(tǒng)計的數(shù)量就是當前第一分表存儲數(shù)據(jù)的存儲量,由于分表計數(shù)器是一個單獨的小程序,因此,其內(nèi)置的存儲量是可以根據(jù)用戶需求而簡單的就能完成修改的。實際上,存儲數(shù)據(jù)是按照用戶ID(地址)來統(tǒng)計的,因此,在上述過程中判斷的也是用戶是否是第一次請求該業(yè)務,并在第一次請求時,才通過分表計數(shù)器來統(tǒng)計。第二判斷模塊22在用戶是第一次請求該業(yè)務的情況下,判斷加一之后的分表計數(shù)器的數(shù)量是否超過預設(shè)的數(shù)據(jù)量上限值。執(zhí)行模塊23在加一之后的分表計數(shù)器的數(shù)量超過預設(shè)的數(shù)據(jù)量上限值的情況下,確定第一分表存儲量達到上限,此時,需要將該用戶對應的業(yè)務數(shù)據(jù)存儲在另一個第二分表中。本發(fā)明實施例為了保證在當前第一分表存儲量達到上限后仍不影響新的業(yè)務數(shù)據(jù)的存儲,因此,第二分表是預先就建立好的,在具體實現(xiàn)時,如果第一分表是該業(yè)務對應的第一個初始分表,則第二分表可以是在建立第一分表的時候就也將其建立好,如果第一分表不是初始分表,而是初始分表后又建立的分表,則第二分表可以是第一分表剛進入使用的同時建立的。執(zhí)行模塊23在將新用戶的業(yè)務數(shù)據(jù)進行存儲時,不知簡單的隨便投入第二分表中,而是需要借助用戶ID的,即根據(jù)用戶ID將該業(yè)務對應的業(yè)務數(shù)據(jù)保存在預先建立好的第二分表中,以便后續(xù)該用戶作為老用戶再申請同樣的業(yè)務時,可以將其存儲在第二分表中對應的位置。此時,第一分表存儲的數(shù)據(jù)已經(jīng)滿了,才將該業(yè)務數(shù)據(jù)存儲在第二分表中,由于第二分表開始使用,分表計數(shù)器也重新從0開始統(tǒng)計,但由于此時已經(jīng)確定要將上述業(yè)務數(shù)據(jù)存儲第二分表中,因此,此時對分表計數(shù)器加一,再判斷將該業(yè)務數(shù)據(jù)保存在第二分表內(nèi)是否會使第二分表的存儲量達到第二分表對應的數(shù)據(jù)量上限值。在統(tǒng)計后,確認第二分表的存儲量不會達到其對應的數(shù)據(jù)量上限值時,將該業(yè)務數(shù)據(jù)存儲在第二分表中。當然,如果只是一個分表內(nèi)的存儲,只判斷一次是否超過該分表對應的數(shù)據(jù)量上限值即可,但由于本實施例涉及的過程是,一個分表滿了、需要存入另一個分表的情況,因此,本發(fā)明實施例從系統(tǒng)嚴謹性考慮,優(yōu)選的讓分表計數(shù)器進行兩次判斷,即在第一分表判斷后,在第二分表中也進行一次判斷。當然,在具體實現(xiàn)時,由于第一份表已滿,第二分表又是空的,則可以省略在第二分表中分表計數(shù)器的第一次判斷過程,即直接將業(yè)務數(shù)據(jù)存儲在第二分表中,并對分表計數(shù)器加一。在有下一個新用戶也要存儲該業(yè)務對應的業(yè)務數(shù)據(jù)時,其應當存儲在第二分表中,此時,才需要分表計數(shù)器先加一,然后再判斷加一后的數(shù)量與數(shù)據(jù)量上限值的關(guān)系。在確認啟用第二分表時或在將業(yè)務數(shù)據(jù)存儲至第二分表后,即刻建立第三分表,以便在第二分表存儲量達到數(shù)據(jù)量上限值時,能有下一個分表來及時存儲業(yè)務數(shù)據(jù)。因此,執(zhí)行模塊23,還可以在第二分表的存儲量達到數(shù)據(jù)量上限值的情況下,將新用戶的業(yè)務數(shù)據(jù)保存在預先建立好的第三分表中,通過分表計數(shù)器統(tǒng)計第三分表的存儲量,并建立第四分表。對于上述的分表,每一個業(yè)務對應的各個分表都需要有不同的名字,然而,由于是相同業(yè)務的各個分表,名字又不能完全不同,所以,本發(fā)明實施例將分表的分表名稱設(shè)置為由分表前綴和分表后綴組成,并在設(shè)置時,每個業(yè)務對應的分表的分表前綴相同且分表后綴不同。分表前綴相同是為了確定是哪些業(yè)務,分表后綴不同是為了區(qū)分是該業(yè)務對應的不同分表,然而,分表后綴也不能是雜亂無序的,本發(fā)明實施例上述分表后綴設(shè)置規(guī)則可以如下,即將分表生成的時間或分表生成的順序作為分表后綴。例如,如果將分表生成的時間作為分表后綴,則分表名稱可以是“分表前綴_10:30、分表前綴_11:15、分表前綴_12:22、……”。在上述方法實現(xiàn)的過程中,其每一個分表存儲滿了,就重新開啟下一個分表進行存儲,因此,本發(fā)明實施例分表的建立過程是邊存儲邊建立的,與現(xiàn)有技術(shù)中預先就建立好多少個分表的過程是完全不同的。具體實現(xiàn)時,上述裝置還可以包括查找模塊,在用戶不是第一次請求業(yè)務的情況下,獲取用戶的用戶地址,并根據(jù)用戶地址在業(yè)務對應的分表中查找業(yè)務數(shù)據(jù)的存儲位置;則執(zhí)行模塊23,還用于在查找到存儲位置的情況下,將業(yè)務的業(yè)務數(shù)據(jù)保存在存儲位置。本發(fā)明實施例將需要調(diào)整的參數(shù)在緩存中進行設(shè)置,方便后續(xù)修改調(diào)整,在確定發(fā)送業(yè)務申請的用戶是第一次請求該業(yè)務的情況下,會通過分表計數(shù)器來統(tǒng)計該分表的存儲量,并判斷存儲量與預設(shè)的數(shù)據(jù)量上限值的關(guān)系,在存儲量達到數(shù)據(jù)量上限值時,通過一個已建立好的新分表來進行存儲,并使用分表計數(shù)器統(tǒng)計新的分表,該過程中,分表的個數(shù)不是固定的,可以根據(jù)需求無限的建立,并且由于分表計數(shù)器是一個小程序,因此,每個分表中的存儲量也是可以變化的,用戶體驗較高。本發(fā)明第三實施例提供了一種數(shù)據(jù)庫,該數(shù)據(jù)庫包括第二實施例中陳述的數(shù)據(jù)庫的分表裝置。在設(shè)置時,數(shù)據(jù)庫的分表裝置可以集成在數(shù)據(jù)庫中。對于數(shù)據(jù)庫的分表裝置的每個業(yè)務對應的分表名稱、分表的數(shù)據(jù)量上限值和分表計數(shù)器的設(shè)置,都可以設(shè)置在數(shù)據(jù)庫對應的緩存中,當然,也可以設(shè)置在第三方緩存系統(tǒng)中,例如Redis緩存。對于數(shù)據(jù)庫,其可以是MySQL數(shù)據(jù)庫,關(guān)于數(shù)據(jù)庫的分表裝置的結(jié)構(gòu)此處不再贅述。本發(fā)明第四實施例提供了一種數(shù)據(jù)庫的分表方法,該方法的流程如圖3,包括步驟S302至S306:S302,在接收到業(yè)務請求時,判斷業(yè)務請求對應的用戶是否是第一次請求業(yè)務;S304,在用戶是第一次請求業(yè)務的情況下,將當前的第一分表的存儲量加一,并判斷第一分表的存儲量是否達到預設(shè)的數(shù)據(jù)量上限值;S306,在第一分表存儲量達到數(shù)據(jù)量上限值的情況下,根據(jù)用戶的用戶地址將業(yè)務的業(yè)務數(shù)據(jù)保存在預先建立好的第二分表中,統(tǒng)計第二分表的存儲量,并建立第三分表;其中,分表的分表名稱由分表前綴和分表后綴組成,每個業(yè)務對應的分表的分表前綴相同且分表后綴不同。在實現(xiàn)時,在接收到業(yè)務請求時,需要對發(fā)送該業(yè)務請求的用戶進行一個判斷,即判斷該用戶是否為第一次請求該業(yè)務。如果用戶是第一次請求該業(yè)務,說明其之前并沒有在該業(yè)務對應的任何分表中有用戶的信息,現(xiàn)在需要建立該用戶對應的信息。然而,在哪個分表中存儲該用戶的業(yè)務數(shù)據(jù)是一個問題,因此,本發(fā)明實施例通過統(tǒng)計當前第一分表的存儲量來解決這個問題,具體實現(xiàn)時,可以是采用分表計數(shù)器來實現(xiàn)。分表計數(shù)器在實現(xiàn)時可以以一個小的程序來實現(xiàn),其就是一個循環(huán)計數(shù)的過程,即在每一個分表中,從0開始計數(shù),每當有一個新用戶時,便在分表計數(shù)器中加一,該分表計數(shù)器統(tǒng)計的數(shù)量就是當前第一分表存儲數(shù)據(jù)的存儲量,由于分表計數(shù)器是一個單獨的小程序,因此,其內(nèi)置的存儲量是可以根據(jù)用戶需求而簡單的就能完成修改的。實際上,存儲數(shù)據(jù)是按照用戶ID(地址)來統(tǒng)計的,因此,在上述過程中判斷的也是用戶是否是第一次請求該業(yè)務,并在第一次請求時,才通過分表計數(shù)器來統(tǒng)計。在用戶是第一次請求該業(yè)務的情況下,判斷加一之后的分表計數(shù)器的數(shù)量是否超過預設(shè)的數(shù)據(jù)量上限值。在加一之后的分表計數(shù)器的數(shù)量超過預設(shè)的數(shù)據(jù)量上限值的情況下,確定第一分表存儲量達到上限,此時,需要將該用戶對應的業(yè)務數(shù)據(jù)存儲在另一個第二分表中。本發(fā)明實施例為了保證在當前第一分表存儲量達到上限后仍不影響新的業(yè)務數(shù)據(jù)的存儲,因此,第二分表是預先就建立好的,在具體實現(xiàn)時,如果第一分表是該業(yè)務對應的第一個初始分表,則第二分表可以是在建立第一分表的時候就也將其建立好,如果第一分表不是初始分表,而是初始分表后又建立的分表,則第二分表可以是第一分表剛進入使用的同時建立的。在將新用戶的業(yè)務數(shù)據(jù)進行存儲時,不知簡單的隨便投入第二分表中,而是需要借助用戶ID的,即根據(jù)用戶ID將該業(yè)務對應的業(yè)務數(shù)據(jù)保存在預先建立好的第二分表中,以便后續(xù)該用戶作為老用戶再申請同樣的業(yè)務時,可以將其存儲在第二分表中對應的位置。此時,第一分表存儲的數(shù)據(jù)已經(jīng)滿了,才將該業(yè)務數(shù)據(jù)存儲在第二分表中,由于第二分表開始使用,分表計數(shù)器也重新從0開始統(tǒng)計,但由于此時已經(jīng)確定要將上述業(yè)務數(shù)據(jù)存儲第二分表中,因此,此時對分表計數(shù)器加一,再判斷將該業(yè)務數(shù)據(jù)保存在第二分表內(nèi)是否會使第二分表的存儲量達到第二分表對應的數(shù)據(jù)量上限值。在統(tǒng)計后,確認第二分表的存儲量不會達到其對應的數(shù)據(jù)量上限值時,將該業(yè)務數(shù)據(jù)存儲在第二分表中。當然,如果只是一個分表內(nèi)的存儲,只判斷一次是否超過該分表對應的數(shù)據(jù)量上限值即可,但由于本實施例涉及的過程是,一個分表滿了、需要存入另一個分表的情況,因此,本發(fā)明實施例從系統(tǒng)嚴謹性考慮,優(yōu)選的讓分表計數(shù)器進行兩次判斷,即在第一分表判斷后,在第二分表中也進行一次判斷。當然,在具體實現(xiàn)時,由于第一份表已滿,第二分表又是空的,則可以省略在第二分表中分表計數(shù)器的第一次判斷過程,即直接將業(yè)務數(shù)據(jù)存儲在第二分表中,并對分表計數(shù)器加一。在有下一個新用戶也要存儲該業(yè)務對應的業(yè)務數(shù)據(jù)時,其應當存儲在第二分表中,此時,才需要分表計數(shù)器先加一,然后再判斷加一后的數(shù)量與數(shù)據(jù)量上限值的關(guān)系。在確認啟用第二分表時或在將業(yè)務數(shù)據(jù)存儲至第二分表后,即刻建立第三分表,以便在第二分表存儲量達到數(shù)據(jù)量上限值時,能有下一個分表來及時存儲業(yè)務數(shù)據(jù)。因此,還可以在第二分表的存儲量達到數(shù)據(jù)量上限值的情況下,將新用戶的業(yè)務數(shù)據(jù)保存在預先建立好的第三分表中,通過分表計數(shù)器統(tǒng)計第三分表的存儲量,并建立第四分表。對于上述的分表,每一個業(yè)務對應的各個分表都需要有不同的名字,然而,由于是相同業(yè)務的各個分表,名字又不能完全不同,所以,本發(fā)明實施例將分表的分表名稱設(shè)置為由分表前綴和分表后綴組成,并在設(shè)置時,每個業(yè)務對應的分表的分表前綴相同且分表后綴不同。分表前綴相同是為了確定是哪些業(yè)務,分表后綴不同是為了區(qū)分是該業(yè)務對應的不同分表,然而,分表后綴也不能是雜亂無序的,本發(fā)明實施例上述分表后綴設(shè)置規(guī)則可以如下,即將分表生成的時間或分表生成的順序作為分表后綴。例如,如果將分表生成的順序作為分表后綴,則分表名稱可以是“分表前綴_1、分表前綴_2、分表前綴_3、……”。在上述方法實現(xiàn)的過程中,其每一個分表存儲滿了,就重新開啟下一個分表進行存儲,因此,本發(fā)明實施例分表的建立過程是邊存儲邊建立的,與現(xiàn)有技術(shù)中預先就建立好多少個分表的過程是完全不同的。具體實現(xiàn)時,在接收到業(yè)務請求之前,還包括:預先在緩存中設(shè)置每個業(yè)務對應的分表名稱和分表的數(shù)據(jù)量上限值,并預先設(shè)置在緩存中統(tǒng)計分表的存儲量。在實現(xiàn)時,本發(fā)明實施例先優(yōu)選預先在緩存中設(shè)置每個業(yè)務對應的分表名稱、分表的數(shù)據(jù)量上限值和分表計數(shù)器,該過程就是一個預先設(shè)置的過程。在設(shè)置時,緩存可以是服務器系統(tǒng)內(nèi)部的緩存,當然,也可以是第三方緩存系統(tǒng),例如,Redis緩存。分表名稱可以通過一個小的程序來實現(xiàn),當然,由于分表名稱是由分表前綴和分表后綴組成的,且每一個業(yè)務對應的分表前綴是沒有變化的,而分表后綴是有變化的,因此,也可以通過兩個小程序來實現(xiàn)上述分表名稱的設(shè)置。分表的數(shù)據(jù)量上限值和分表計數(shù)器在設(shè)置時都可以通過小程序來實現(xiàn),進而設(shè)置在緩存中,由于是設(shè)置在緩存中,修改較為方便,如果需要修改數(shù)據(jù)量上限值,直接修改小程序中的代碼就可以輕松的調(diào)整每個分表的容量。本發(fā)明第五實施例提供一種數(shù)據(jù)庫的分表方法,該方法可以使用在云服務項目的MySQL數(shù)據(jù)庫中,具有如下:云服務項目中使用userId(用戶ID)做為分表業(yè)務字段,即根據(jù)userId對數(shù)據(jù)進行分表。本實施例中為了方便理解,就使用userId進行解釋,在其他項目中,根據(jù)用戶參數(shù)的不同,可以使用其他的用戶參數(shù),即可根據(jù)對應業(yè)務替換分表依據(jù)字段。首先,設(shè)置用戶配置表,該表格是設(shè)置在數(shù)據(jù)庫側(cè),其字段說明如表1所示。表1字段名字段類型默認約束備注說明idint(11)NotnullAuto_incrementId號,自增長typeint(11)Notnull業(yè)務類型table_headerVarchar(50)Notnull表名開頭table_sizeInt(11)Notnull分表大小在上述表1中,設(shè)置的是用戶可以配置分表的大小(存儲量)、業(yè)務類型、分表名稱的分表前綴等,可支持多業(yè)務的分表。上述設(shè)置項后續(xù)會加載到分表配置緩存中。其次,在Redis緩存中(第三方的一套緩存系統(tǒng))設(shè)置分表配置緩存、分表計數(shù)器和分表ID緩存。其中,分表配置緩存是用于緩存分表的配置數(shù)據(jù),通過用戶配置表的加載可以獲取相關(guān)數(shù)據(jù),其設(shè)置如表2所示。表2該緩存的有效期可以設(shè)置為12個月;啟動服務器后,可在后臺管理刷新緩存,即完成分表配置緩存的加載;在Key(ID,鍵值)失效后,從數(shù)據(jù)庫重新加載緩存,以完成分表配置緩存的異常處理;具體實現(xiàn)時,其是根據(jù)表2中的key和filed確定value。其中,分表計數(shù)器用于記錄各個類型分表新增用戶數(shù)量,新增用戶業(yè)務類型數(shù)據(jù)后刷新緩存有效期,當達到分表限額時,從1開始計數(shù),其字段說明如表3所示。表3字段名備注說明key以TABLE_COUNT作為KEY值filedtype,業(yè)務類型value存儲該type最新分表中的userid數(shù)據(jù)量緩存有效期可以設(shè)置為6個月;啟動服務器后,可在后臺管理刷新緩存,每次修改數(shù)據(jù)后,刷新緩存有效期;Key失效后,從數(shù)據(jù)庫重新加載緩存,以完成緩存異常處理。其中,分表ID緩存用于記錄各個類型分表的當前記錄數(shù)據(jù)所使用的分表ID,即記錄當前為第幾個分表,其字段說明如表4所示。表4其有效期可以設(shè)置為12個月;啟動服務器后,可在后臺管理刷新緩存,每次修改數(shù)據(jù)后,刷新緩存有效期;Key失效后,從數(shù)據(jù)庫重新加載緩存,以完成緩存異常處理。當分表計數(shù)器達到限額時,進行新增分表操作,并刷新分表ID緩存和有效期。本實施例采用提前建表原則,即預先建立目前使用表的下一個分表。如:當前使用分表ID為5,則分表ID為6的分表已建立好,當分表計數(shù)器達到限額時,建立分表7,數(shù)據(jù)則插入分表6,以保障數(shù)據(jù)插入不會受到影響。具體實現(xiàn)流程如下:根據(jù)不同業(yè)務類型設(shè)置具體分表表名及分表大小,userId為分表判斷,即該分表可容納的userId數(shù)量;并在redis緩存中添加分表計數(shù)器。寫入數(shù)據(jù)時,對于某一個業(yè)務而言,如果是新用戶,去分表計數(shù)器判斷,進行加一,將加一之后的值與分表限額進行比較,如果超過了分表限額,就指向下一個分表,具體指向哪一個表,由分表ID緩存來確定,分表ID加一即可。對于某一個業(yè)務,如果是老用戶,已經(jīng)有業(yè)務A,則有固定的分表存該業(yè)務。根據(jù)用戶ID和業(yè)務ID找到分表中的存儲位置,進而繼續(xù)存儲。例如,業(yè)務類型為同步聯(lián)系人,用戶A為該業(yè)務的新用戶,用戶B為該業(yè)務的老用戶,針對用戶A和用戶B其操作流程分別如下:用戶A:同步聯(lián)系人時,去分表計數(shù)器判斷,將分表計數(shù)器加一,將加一之后的值與分表限額進行比較,如果超過了分表限額,就指向下一個分表,并將要同步的聯(lián)系人信息存儲在下一個分表中,如果沒有超過分表限額,則在當前分表中存儲需要同步的聯(lián)系人信息。用戶B:根據(jù)用戶的userId在同步聯(lián)系人業(yè)務下的各個分表中查找其存儲位置,并在查找到后,將其聯(lián)系人信息存儲在查找到的分表對應的位置下。本發(fā)明實施例可靈活配置分表大小;分表數(shù)量無限制,不存在分表擴展問題;在單表過大后,還可對數(shù)據(jù)庫進行重新分表;將數(shù)據(jù)遷移到新的分表后,修改分表ID緩存,將分表ID緩存對應值增大,可對單表進行重新拆分,容易擴展,不會影響后續(xù)數(shù)據(jù)的分表操作。需要說明的是,在本文中,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者裝置不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者裝置所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括該要素的過程、方法、物品或者裝置中還存在另外的相同要素。上述本發(fā)明實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到上述實施例方法可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當然也可以通過硬件,但很多情況下前者是更佳的實施方式。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)(如ROM/RAM、磁碟、光盤)中,包括若干指令用以使得一臺終端設(shè)備(可以是手機,計算機,服務器,空調(diào)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例的方法。以上僅為本發(fā)明的優(yōu)選實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運用在其他相關(guān)的
技術(shù)領(lǐng)域:
:,均同理包括在本發(fā)明的專利保護范圍內(nèi)。當前第1頁1 2 3 當前第1頁1 2 3