本申請涉及數(shù)據(jù)庫技術(shù)領(lǐng)域,尤其涉及用于分頁查詢的方法、裝置及設(shè)備。
背景技術(shù):
一方面,隨著互聯(lián)網(wǎng)技術(shù)與大數(shù)據(jù)分析技術(shù)的不斷發(fā)展,數(shù)據(jù)庫中的數(shù)據(jù)量越來越大。為了減小對海量數(shù)據(jù)的增刪修改和查詢的開銷,提高數(shù)據(jù)處理能力,通常會將數(shù)據(jù)量過大的原始數(shù)據(jù)庫及原始數(shù)據(jù)表進(jìn)行拆分,按照關(guān)鍵字段存儲到多個數(shù)據(jù)庫以及多個數(shù)據(jù)表中,稱為分庫分表。因此,采用分庫分表管理的數(shù)據(jù)量一般比較巨大。另一方面,目前在數(shù)據(jù)庫中查詢數(shù)據(jù)時,一般采用分頁查詢的方法進(jìn)行查詢。
現(xiàn)有技術(shù)中,在基于分庫分表對多個數(shù)據(jù)庫以及多個數(shù)據(jù)表進(jìn)行分頁查詢時,通常是將符合查詢條件的所有記錄取出后,放在內(nèi)存中,然后,從內(nèi)存中查找出目標(biāo)分頁對應(yīng)的查詢記錄。然而,當(dāng)數(shù)據(jù)量過大時,分頁查詢的過程會占用過多的內(nèi)存以及網(wǎng)絡(luò)資源,從而導(dǎo)致了基于分庫分表進(jìn)行分頁查詢的效率低下的問題。
技術(shù)實(shí)現(xiàn)要素:
為了解決上述技術(shù)問題,本申請?zhí)峁┝艘环N用于分頁查詢的方法、裝置及設(shè)備。
根據(jù)本申請實(shí)施例的第一方面,提供一種用于分頁查詢的方法,所述方法包括:
響應(yīng)于接收到分頁查詢的請求,分別對每個待查詢數(shù)據(jù)庫中的每張數(shù)據(jù)表進(jìn)行查詢統(tǒng)計,其中,所述請求包括查詢條件及每個分頁容納的記錄條數(shù);
確定目標(biāo)分頁的分頁號;
基于所述目標(biāo)分頁的分頁號以及每個分頁容納的記錄條數(shù),確定所述目標(biāo)分頁的起始行號以及結(jié)束行號;
根據(jù)所述查詢統(tǒng)計的結(jié)果以及所述目標(biāo)分頁的起始行號和結(jié)束行號,確定所述目標(biāo)分頁的分頁記錄對應(yīng)的數(shù)據(jù)表;
從所述對應(yīng)的數(shù)據(jù)表中獲取所述目標(biāo)分頁的分頁記錄;并且
返回所述目標(biāo)分頁的分頁記錄。
根據(jù)本申請實(shí)施例的第二方面,提供一種用于分頁查詢的裝置,所述裝置包括:
查詢單元,用于響應(yīng)于接收到分頁查詢的請求,分別對每個待查詢數(shù)據(jù)庫中的每張數(shù)據(jù)表進(jìn)行查詢統(tǒng)計,其中,所述請求包括查詢條件及每個分頁容納的記錄條數(shù);
第一確定單元,用于確定目標(biāo)分頁的分頁號;
第二確定單元,用于基于所述目標(biāo)分頁的分頁號以及每個分頁容納的記錄條數(shù),確定所述目標(biāo)分頁的起始行號以及結(jié)束行號;
第三確定單元,用于根據(jù)所述查詢統(tǒng)計的結(jié)果以及所述目標(biāo)分頁的起始行號和結(jié)束行號,確定所述目標(biāo)分頁的分頁記錄對應(yīng)的數(shù)據(jù)表;
獲取單元,用于從所述對應(yīng)的數(shù)據(jù)表中獲取所述目標(biāo)分頁的分頁記錄;
返回單元,用于返回所述目標(biāo)分頁的分頁記錄。
根據(jù)本申請實(shí)施例的第三方面,提供一種設(shè)備,包括:
處理器;用于存儲所述處理器可執(zhí)行指令的存儲器;
其中,所述處理器被配置為:
響應(yīng)于接收到分頁查詢的請求,分別對每個待查詢數(shù)據(jù)庫中的每張數(shù)據(jù)表進(jìn)行查詢統(tǒng)計,其中,所述請求包括查詢條件及每個分頁容納的記錄條數(shù);
確定目標(biāo)分頁的分頁號;
基于所述目標(biāo)分頁的分頁號以及每個分頁容納的記錄條數(shù),確定所述目標(biāo)分頁的起始行號以及結(jié)束行號;
根據(jù)所述查詢統(tǒng)計的結(jié)果以及所述目標(biāo)分頁的起始行號和結(jié)束行號,確定所述目標(biāo)分頁的分頁記錄對應(yīng)的數(shù)據(jù)表;
從所述對應(yīng)的數(shù)據(jù)表中獲取所述目標(biāo)分頁的分頁記錄;并且
返回所述目標(biāo)分頁的分頁記錄。
應(yīng)用本申請實(shí)施例,在接收到分頁查詢的請求時,分別對每個待查詢數(shù)據(jù)庫中的每張數(shù)據(jù)表進(jìn)行查詢統(tǒng)計,確定目標(biāo)分頁的分頁號,根據(jù)查詢統(tǒng)計的結(jié)果確定目標(biāo)分頁的起始行號以及結(jié)束行號,進(jìn)一步確定目標(biāo)分頁的分頁記錄對應(yīng)的數(shù)據(jù)表,從上述對應(yīng)的數(shù)據(jù)表中獲取目標(biāo)分頁的分頁記錄,并返回目標(biāo)分頁的分頁記錄。因此,無需將所有待查詢數(shù)據(jù)庫中符合查詢條件的所有記錄取出放在內(nèi)存中,從而提高了基于分庫分表進(jìn)行分頁查詢的效率。
應(yīng)當(dāng)理解的是,以上的一般描述和后文的細(xì)節(jié)描述僅是示例性和解釋性的,并不能限制本申請。
附圖說明
此處的附圖被并入說明書中并構(gòu)成本說明書的一部分,示出了符合本申請的實(shí)施例,并與說明書一起用于解釋本申請的原理。
圖1為應(yīng)用本申請實(shí)施例的示例性系統(tǒng)架構(gòu)示意圖;
圖2為本申請用于分頁查詢的方法的一個實(shí)施例流程圖;
圖3a為本申請用于分頁查詢的方法的另一個實(shí)施例流程圖;
圖3b為本申請目標(biāo)分頁的分頁記錄與對應(yīng)的數(shù)據(jù)表的一種對應(yīng)關(guān)系的示意圖;
圖3c為本申請目標(biāo)分頁的分頁記錄與對應(yīng)的數(shù)據(jù)表的另一種對應(yīng)關(guān)系的示意圖;
圖4為本申請用于分頁查詢的裝置所在設(shè)備的一種硬件結(jié)構(gòu)圖;
圖5為本申請用于分頁查詢的裝置的一個實(shí)施例框圖。
具體實(shí)施方式
這里將詳細(xì)地對示例性實(shí)施例進(jìn)行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實(shí)施例中所描述的實(shí)施方式并不代表與本申請相一致的所有實(shí)施方式。相反,它們僅是與如所附權(quán)利要求書中所詳述的、本申請的一些方面相一致的裝置和方法的例子。
在本申請使用的術(shù)語是僅僅出于描述特定實(shí)施例的目的,而非旨在限制本申請。在本申請和所附權(quán)利要求書中所使用的單數(shù)形式的“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其他含義。還應(yīng)當(dāng)理解,本文中使用的術(shù)語“和/或”是指并包含一個或多個相關(guān)聯(lián)的列出項(xiàng)目的任何或所有可能組合。
應(yīng)當(dāng)理解,盡管在本申請可能采用術(shù)語第一、第二、第三等來描述各種信息,但這些信息不應(yīng)限于這些術(shù)語。這些術(shù)語僅用來將同一類型的信息彼此區(qū)分開。例如,在不脫離本申請范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第一信息。取決于語境,如在此所使用的詞語“如果”可以被解釋成為“在……時”或“當(dāng)……時”或“響應(yīng)于確定”。
參見圖1,為應(yīng)用本申請實(shí)施例的示例性系統(tǒng)架構(gòu)示意圖:
如圖1所示,系統(tǒng)架構(gòu)100可以包括終端設(shè)備101、102、網(wǎng)絡(luò)103和服務(wù)器104。網(wǎng)絡(luò)103用于在終端設(shè)備101、102和服務(wù)器104之間提供通信鏈路的介質(zhì)。網(wǎng)絡(luò)103可以包括各種連接類型,例如有線、無線通信鏈路或者光纖電纜等等。
終端設(shè)備101、102可以通過網(wǎng)絡(luò)103與服務(wù)器104交互,以接收或發(fā)送請求或信息等。終端設(shè)備101、102可以是各種電子設(shè)備,包括但不限于智能手機(jī)、平板電腦、膝上型便攜計算機(jī)以及臺式電腦等等。服務(wù)器104可以是提供各種服務(wù)的服務(wù)器。服務(wù)器可以對接收到的數(shù)據(jù)進(jìn)行存儲、分析等處理, 并將處理結(jié)果反饋給終端設(shè)備。服務(wù)器可以響應(yīng)于用戶的服務(wù)請求而提供服務(wù)??梢岳斫?,一個服務(wù)器可以提供一種或多種服務(wù),同一種服務(wù)也可以由多個服務(wù)器來提供。
應(yīng)該理解,圖1中的終端設(shè)備、網(wǎng)絡(luò)和服務(wù)器的數(shù)目僅僅是示意性的。根據(jù)實(shí)現(xiàn)需要,可以具有任意數(shù)目的終端設(shè)備、網(wǎng)絡(luò)和服務(wù)器。
基于圖1示出的系統(tǒng)架構(gòu),本申請實(shí)施例中,終端設(shè)備101或終端設(shè)備102可以通過網(wǎng)絡(luò)103向服務(wù)器104發(fā)送分頁查詢的請求,服務(wù)器104響應(yīng)于接收到分頁查詢的請求,執(zhí)行查詢操作,以獲得查詢結(jié)果。然后,服務(wù)器104可以通過網(wǎng)絡(luò)103向終端設(shè)備101或終端設(shè)備102返回查詢結(jié)果,以供終端設(shè)備101或終端設(shè)備102將查詢結(jié)果顯示出來。下面將結(jié)合具體的實(shí)施例對本申請進(jìn)行詳細(xì)描述。
參見圖2,為本申請用于分頁查詢的方法的一個實(shí)施例流程圖,該實(shí)施例可以應(yīng)用在服務(wù)器端,包括如下步驟:
在步驟201中,響應(yīng)于接收到分頁查詢的請求,分別對每個待查詢數(shù)據(jù)庫中的每張數(shù)據(jù)表進(jìn)行查詢統(tǒng)計。
一般來說,一方面,如果數(shù)據(jù)庫中的數(shù)據(jù)量特別巨大,則不適于將所有數(shù)據(jù)存放在一個數(shù)據(jù)庫中的一張數(shù)據(jù)表中??梢詫?shù)據(jù)按照關(guān)鍵字段存儲到多個數(shù)據(jù)庫的多張數(shù)據(jù)表中,稱為分庫分表。其中,分庫是指將海量數(shù)據(jù)由一個數(shù)據(jù)庫存儲管理拆分為多個數(shù)據(jù)庫存儲管理,分表是指將海量數(shù)據(jù)由一個數(shù)據(jù)表存儲管理拆分為多個數(shù)據(jù)表存儲管理。另一方面,當(dāng)采用某個查詢條件對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行查詢時,可能存在大量符合條件的記錄。如果將這些符合條件的記錄全部顯示于一頁,可能會導(dǎo)致服務(wù)器間傳輸超時,內(nèi)存和網(wǎng)絡(luò)資源耗盡等問題。所以,可以進(jìn)行分頁查詢,分多頁顯示查詢結(jié)果,每頁為一個分頁,每分頁只顯示部分查詢出的記錄。
在本實(shí)施例中,基于分庫分表查詢數(shù)據(jù),需要查詢的數(shù)據(jù)記錄在多個數(shù)據(jù)庫的多張數(shù)據(jù)表中,一般數(shù)據(jù)量比較巨大。當(dāng)接收到終端發(fā)送的分頁查詢的請求時,可以根據(jù)該請求分別對每個待查詢數(shù)據(jù)庫中的每張數(shù)據(jù)表進(jìn)行查 詢統(tǒng)計,以確定每個待查詢數(shù)據(jù)庫中的每張數(shù)據(jù)表中符合查詢條件的記錄。其中,分頁查詢的請求可以包括查詢條件及每個分頁容納的記錄條數(shù)等。
在步驟202中,確定目標(biāo)分頁的分頁號。
在本實(shí)施例中,目標(biāo)分頁為用戶需進(jìn)行瀏覽的目標(biāo)頁,分頁號是指每個分頁的頁號。例如,用戶需要查看第3頁的查詢結(jié)果,則查詢結(jié)果的第3頁為目標(biāo)分頁,3為目標(biāo)分頁的分頁號。
在本實(shí)施例中,在對每個待查詢數(shù)據(jù)庫中的每張數(shù)據(jù)表進(jìn)行查詢統(tǒng)計后,進(jìn)一步需要確定目標(biāo)分頁的分頁號。具體來說,目標(biāo)分頁的分頁號可以是默認(rèn)的,也可以是根據(jù)用戶的操作或輸入的信息確定的。例如,當(dāng)用戶第一次進(jìn)行查詢時,目標(biāo)分頁的分頁號可以默認(rèn)為1,因?yàn)椋话氵M(jìn)行首次查詢時,通常顯示查詢結(jié)果的第1頁。又例如,若已經(jīng)顯示某個分頁的查詢結(jié)果后,用戶可以通過點(diǎn)擊上一頁或者下一頁進(jìn)行翻頁,則可以確定目標(biāo)分頁的分頁號為當(dāng)前顯示的分頁的分頁號減一(點(diǎn)擊上一頁往前翻頁)或者加一(點(diǎn)擊下一頁往后翻頁)。再例如,用戶還可以通過直接輸入目標(biāo)分頁的分頁號從而直接跳轉(zhuǎn)到目標(biāo)分頁。因此,可以根據(jù)用戶輸入的翻頁信息確定目標(biāo)分頁的分頁號??梢岳斫猓€可以有其它確定目標(biāo)分頁的分頁號的方式,本申請對確定目標(biāo)分頁的分頁號的具體方式方面不限定。
在步驟203中,基于目標(biāo)分頁的分頁號以及每個分頁容納的記錄條數(shù),確定目標(biāo)分頁的起始行號以及結(jié)束行號。
一般來說,每個分頁能夠容納預(yù)定數(shù)量的記錄條數(shù),每條記錄占一行,對分頁查詢的記錄進(jìn)行編號,每條記錄對應(yīng)的編號可以用行號表示。在本實(shí)施例中,可以基于目標(biāo)分頁的分頁號以及每個分頁容納的記錄條數(shù),確定目標(biāo)分頁的起始行號以及結(jié)束行號。其中,目標(biāo)分頁的起始行號既為目標(biāo)分頁中第一條記錄對應(yīng)的行號,目標(biāo)分頁的結(jié)束行號既為目標(biāo)分頁中最后一條記錄對應(yīng)的行號。例如,假設(shè)目標(biāo)分頁的第一條記錄對應(yīng)的行號為m,則該目標(biāo)分頁的起始行號為m。目標(biāo)分頁的最后一條記錄對應(yīng)的行號為n,則該目標(biāo)分頁的結(jié)束行號為n。
在步驟204中,根據(jù)上述查詢統(tǒng)計的結(jié)果以及目標(biāo)分頁的起始行號和結(jié)束行號,確定目標(biāo)分頁的分頁記錄對應(yīng)的數(shù)據(jù)表。
在本實(shí)施例中,目標(biāo)分頁的分頁記錄對應(yīng)的數(shù)據(jù)表為包含目標(biāo)分頁的分頁記錄的數(shù)據(jù)表。一般來說,每個數(shù)據(jù)庫、每張數(shù)據(jù)表以及數(shù)據(jù)表中的每條記錄均分別對應(yīng)一個的編號,在分頁顯示查詢結(jié)果時,并不是按照隨機(jī)的順序顯示查詢記錄,而是按照記錄對應(yīng)的編號順序顯示查詢記錄。因此,來自相同的數(shù)據(jù)表的查詢記錄在分頁顯示時,是連續(xù)排列的。在本實(shí)施例中,當(dāng)分別確定了目標(biāo)分頁的起始行以及結(jié)束行的分頁記錄對應(yīng)的數(shù)據(jù)表后,則可以容易的確定該目標(biāo)分頁中所有的分頁記錄對應(yīng)的數(shù)據(jù)表。
在步驟205中,從上述對應(yīng)的數(shù)據(jù)表中獲取該目標(biāo)分頁的分頁記錄。
在步驟206中,返回該目標(biāo)分頁的分頁記錄。
在本實(shí)施例中,可以將上述目標(biāo)分頁的分頁記錄對應(yīng)的數(shù)據(jù)表里符合查詢條件的所有記錄提取出來,按行號的順序放在內(nèi)存中。然后,進(jìn)一步根據(jù)目標(biāo)分頁的起始行號以及結(jié)束行號,從上述放在內(nèi)存中的記錄里查找出該目標(biāo)分頁的分頁記錄。最后,將查找出的上述記錄返回給發(fā)送分頁查詢請求的終端,以供該終端在目標(biāo)分頁中顯示上述查詢結(jié)果。
應(yīng)用上述實(shí)施例,在接收到分頁查詢的請求時,分別對每個待查詢數(shù)據(jù)庫中的每張數(shù)據(jù)表進(jìn)行查詢統(tǒng)計,確定目標(biāo)分頁的分頁號,確定目標(biāo)分頁的起始行號以及結(jié)束行號,根據(jù)查詢統(tǒng)計的結(jié)果進(jìn)一步確定目標(biāo)分頁的分頁記錄對應(yīng)的數(shù)據(jù)表,從上述對應(yīng)的數(shù)據(jù)表中獲取目標(biāo)分頁的分頁記錄,并且返回目標(biāo)分頁的分頁記錄。因此,無需將所有待查詢數(shù)據(jù)庫中符合查詢條件的所有記錄取出放在內(nèi)存中,從而提高了基于分庫分表進(jìn)行分頁查詢的效率。
參見圖3a,為本申請用于分頁查詢的方法的另一個實(shí)施例流程圖,該實(shí)施例結(jié)合具體的例子對用于分頁查詢的過程進(jìn)行詳細(xì)描述:
在步驟301中,響應(yīng)于接收到分頁查詢的請求,從待查詢數(shù)據(jù)庫中查找出包含命中記錄的數(shù)據(jù)表,作為目標(biāo)數(shù)據(jù)表。
在本實(shí)施例中,上述請求包括查詢條件及每個分頁容納的記錄條數(shù)??? 以將符合查詢條件的記錄作為命中記錄,從待查詢數(shù)據(jù)庫中查找出包含命中記錄的數(shù)據(jù)表,作為目標(biāo)數(shù)據(jù)表。具體來說,在每個待查詢數(shù)據(jù)庫中,可以包含多張數(shù)據(jù)表,對于任意一個查詢條件,并不一定每張數(shù)據(jù)表中均包含符合該查詢條件的命中記錄??赡懿糠?jǐn)?shù)據(jù)表中包含命中記錄,其它數(shù)據(jù)表中不包含命中記錄。因此,可以先根據(jù)請求中包含的查詢條件對每個待查詢數(shù)據(jù)庫中的每張數(shù)據(jù)表進(jìn)行查詢,將所有包含命中記錄的數(shù)據(jù)表查找出來作為目標(biāo)數(shù)據(jù)表,可以將查找出的目標(biāo)數(shù)據(jù)表的標(biāo)識信息記錄下來。
在步驟302中,統(tǒng)計每張目標(biāo)數(shù)據(jù)表中的命中記錄的條數(shù)。
在本實(shí)施例中,查找出包含命中記錄的數(shù)據(jù)表后,進(jìn)一步統(tǒng)計每張目標(biāo)數(shù)據(jù)表中包含的命中記錄的條數(shù)。并可以將每張目標(biāo)數(shù)據(jù)表中包含的命中記錄的條數(shù)與對應(yīng)的目標(biāo)數(shù)據(jù)表的標(biāo)識信息進(jìn)行關(guān)聯(lián)地存儲。
在步驟303中,確定每張目標(biāo)數(shù)據(jù)表中包含的命中記錄的行號范圍。
在本實(shí)施例中,由于每條查詢記錄對應(yīng)一個行號,因此,可以確定每張目標(biāo)數(shù)據(jù)表中包含的命中記錄的行號范圍。每個數(shù)據(jù)庫、每張數(shù)據(jù)表以及數(shù)據(jù)表中的每條記錄均分別對應(yīng)一個的編號,在分頁顯示查詢結(jié)果時,是按照記錄對應(yīng)的編號順序顯示查詢記錄。
具體來說,首先,按數(shù)據(jù)庫編號以及數(shù)據(jù)表編號的順序?qū)⑺心繕?biāo)數(shù)據(jù)表進(jìn)行排序。然后,將排序中的第一張數(shù)據(jù)表的行號范圍的起始行號設(shè)定為1,結(jié)束行號設(shè)定為與該數(shù)據(jù)表中包含的命中記錄的條數(shù)相等的數(shù)值。對于排序中的第n張數(shù)據(jù)表,計算前n-1張數(shù)據(jù)表中命中記錄的條數(shù)之和再加1,得到第一數(shù)值,將第一數(shù)值作為該第n張數(shù)據(jù)表行號范圍的起始行號,并計算前n張數(shù)據(jù)表中命中記錄的條數(shù)之和,得到第二數(shù)值,將第二數(shù)值作為該第n張數(shù)據(jù)表行號范圍的結(jié)束行號,其中,n不等于1。
例如,假設(shè)有三個待查詢數(shù)據(jù)庫,這三個數(shù)據(jù)庫的編號分別為a1,a2,a3。a1包含三張數(shù)據(jù)表,編號分別為001,002,003;a2也包含三張數(shù)據(jù)表,編號分別為004,005,006;a3也包含三張數(shù)據(jù)表,編號分別為007,008,009。其中,包含命中記錄的目標(biāo)數(shù)據(jù)表有001,002,005,006,008, 009六張表。這六張表包含的命中記錄的條數(shù)分別為3,5,2,5,3,2。
首先,按數(shù)據(jù)庫編號以及數(shù)據(jù)表編號的順序可以將所有目標(biāo)數(shù)據(jù)表進(jìn)行如下排序:001,002,005,006,008,009??芍?,排序中的第一張數(shù)據(jù)表為001,其行號范圍的起始行號設(shè)定為1,結(jié)束行號設(shè)定為3。排序中的第二張數(shù)據(jù)表為002,其行號范圍的起始行號為前1張數(shù)據(jù)表中命中記錄的條數(shù)之和再加1,即為4,結(jié)束行號為前2張數(shù)據(jù)表中命中記錄的條數(shù)之和8。同理,排序中的第三張數(shù)據(jù)表為005,其行號范圍的起始行號為前2張數(shù)據(jù)表中命中記錄的條數(shù)之和再加1,即為9,結(jié)束行號為前3張數(shù)據(jù)表中命中記錄的條數(shù)之和10。
以此類推,排序中的第四張數(shù)據(jù)表為006,其行號范圍的起始行號為11,結(jié)束行號為15。排序中的第五張數(shù)據(jù)表為008,其行號范圍的起始行號16,結(jié)束行號為18。排序中的第六張數(shù)據(jù)表為009,其行號范圍的起始行號19,結(jié)束行號為20。
在步驟304中,確定目標(biāo)分頁的分頁號。
在本實(shí)施例中,還可以計算出命中記錄的總條數(shù),并可以根據(jù)每個分頁容納的記錄條數(shù)確定查詢結(jié)果的總頁數(shù)??梢詫⒖傢摂?shù)返回給請求查詢的終端,以供用戶在總頁數(shù)的范圍內(nèi)選擇目標(biāo)分頁??梢愿鶕?jù)默認(rèn)的信息確定目標(biāo)分頁的分頁號,也可以是根據(jù)用戶的選擇操作或輸入的信息確定目標(biāo)分頁的分頁號。
在步驟305中,基于目標(biāo)分頁的分頁號以及每個分頁容納的記錄條數(shù),確定該目標(biāo)分頁的起始行號以及結(jié)束行號。
在本實(shí)施例中,可以基于目標(biāo)分頁的分頁號以及每個分頁容納的記錄條數(shù)確定該目標(biāo)分頁的起始行號以及結(jié)束行號。具體來說,計算目標(biāo)分頁的分頁號與每個分頁容納的記錄條數(shù)的乘積,作為目標(biāo)分頁的結(jié)束行號。計算目標(biāo)分頁的結(jié)束行號減每個分頁容納的記錄條數(shù)的差,再加1,作為目標(biāo)分頁的起始行號。例如,假設(shè)目標(biāo)分頁的分頁號為s,每個分頁容納的記錄條數(shù)為v,目標(biāo)分頁的結(jié)束行號為x,則x=s*v,目標(biāo)分頁的起始行號為y,則 y=x-v+1。
在步驟306中,根據(jù)上述查詢統(tǒng)計的結(jié)果以及目標(biāo)分頁的起始行號和結(jié)束行號,確定目標(biāo)分頁的分頁記錄對應(yīng)的數(shù)據(jù)表。
在本實(shí)施例中,可以根據(jù)上述查詢統(tǒng)計的結(jié)果以及目標(biāo)分頁的起始行號和結(jié)束行號,確定目標(biāo)分頁的分頁記錄對應(yīng)的數(shù)據(jù)表。其中,目標(biāo)分頁的分頁記錄對應(yīng)的數(shù)據(jù)表即為任意包含目標(biāo)分頁的分頁記錄的數(shù)據(jù)表。具體來說,首先可以確定目標(biāo)分頁的起始行對應(yīng)的目標(biāo)數(shù)據(jù)表(包含目標(biāo)分頁的起始行的分頁記錄的數(shù)據(jù)表)作為起始行數(shù)據(jù)表,以及目標(biāo)分頁的結(jié)束行對應(yīng)的目標(biāo)數(shù)據(jù)表(包含目標(biāo)分頁的結(jié)束行的分頁記錄的數(shù)據(jù)表)作為結(jié)束行數(shù)據(jù)表。使得目標(biāo)分頁的起始行號落在起始行數(shù)據(jù)表包含的命中記錄的行號范圍內(nèi),目標(biāo)分頁的結(jié)束行號落在結(jié)束行數(shù)據(jù)表包含的命中記錄的行號范圍內(nèi)。
接著,判斷起始行數(shù)據(jù)表與結(jié)束行數(shù)據(jù)表是否為同一張數(shù)據(jù)表。若起始行數(shù)據(jù)表與結(jié)束行數(shù)據(jù)表為同一張數(shù)據(jù)表,則該數(shù)據(jù)表為目標(biāo)分頁的分頁記錄對應(yīng)的數(shù)據(jù)表。例如,參見圖3b,為一種目標(biāo)分頁的分頁記錄與對應(yīng)的數(shù)據(jù)表的對應(yīng)關(guān)系的示意圖。當(dāng)目標(biāo)分頁的分頁記錄全部包含在一張目標(biāo)數(shù)據(jù)表中時,則可以判斷出起始行數(shù)據(jù)表與結(jié)束行數(shù)據(jù)表為同一張數(shù)據(jù)表。此時,該包含全部目標(biāo)分頁的分頁記錄的數(shù)據(jù)表為目標(biāo)分頁的分頁記錄對應(yīng)的數(shù)據(jù)表。
若起始行數(shù)據(jù)表與結(jié)束行數(shù)據(jù)表為不同數(shù)據(jù)表,則按數(shù)據(jù)庫編號以及數(shù)據(jù)表編號的順序,找出目標(biāo)數(shù)據(jù)表(包含命中記錄的數(shù)據(jù)表)中從起始行數(shù)據(jù)表到結(jié)束行數(shù)據(jù)表的目標(biāo)數(shù)據(jù)表,作為目標(biāo)分頁的分頁記錄對應(yīng)的數(shù)據(jù)表。例如,參見圖3c,為另一種目標(biāo)分頁的分頁記錄與對應(yīng)的數(shù)據(jù)表的對應(yīng)關(guān)系的示意圖。當(dāng)目標(biāo)分頁的分頁記錄分別包含在不同的目標(biāo)數(shù)據(jù)表中時,則可以判斷出起始行數(shù)據(jù)表與結(jié)束行數(shù)據(jù)表為不同的數(shù)據(jù)表。如果按數(shù)據(jù)庫編號以及數(shù)據(jù)表編號的順序,在起始行數(shù)據(jù)表與結(jié)束行數(shù)據(jù)表之間不存在其它包含命中記錄的目標(biāo)數(shù)據(jù)表(起始行數(shù)據(jù)表與結(jié)束行數(shù)據(jù)表相鄰),則該起始行數(shù)據(jù)表與結(jié)束行數(shù)據(jù)表為目標(biāo)分頁的分頁記錄對應(yīng)的數(shù)據(jù)表。如果按數(shù)據(jù)庫 編號以及數(shù)據(jù)表編號的順序,在起始行數(shù)據(jù)表與結(jié)束行數(shù)據(jù)表之間存在其它包含命中記錄的目標(biāo)數(shù)據(jù)表,則該起始行數(shù)據(jù)表與結(jié)束行數(shù)據(jù)表,以及起始行數(shù)據(jù)表與結(jié)束行數(shù)據(jù)表之間的目標(biāo)數(shù)據(jù)表均為目標(biāo)分頁的分頁記錄對應(yīng)的數(shù)據(jù)表。
例如,結(jié)合步驟303的例子,假設(shè)有三個待查詢數(shù)據(jù)庫,這三個數(shù)據(jù)庫的編號分別為a1,a2,a3。a1包含三張數(shù)據(jù)表,編號分別為001,002,003;a2也包含三張數(shù)據(jù)表,編號分別為004,005,006;a3也包含三張數(shù)據(jù)表,編號分別為007,008,009。其中,包含命中記錄的目標(biāo)數(shù)據(jù)表有001,002,005,006,008,009六張表。設(shè)001的行號范圍為[1,3],002的行號范圍為[4,8],005的行號范圍為[9,10],006的行號范圍為[11,15],008的行號范圍為[16,18],009的行號范圍為[19,20]。若目標(biāo)分頁的起始行的行號為12,結(jié)束行的行號為19。則可知,目標(biāo)分頁的起始行的行號12落在006數(shù)據(jù)表的行號范圍[11,15]內(nèi),因此,目標(biāo)分頁的起始行對應(yīng)的數(shù)據(jù)表為006(006數(shù)據(jù)表中包含目標(biāo)分頁的起始行的分頁記錄)。目標(biāo)分頁的結(jié)束行的行號19落在009數(shù)據(jù)表的行號范圍[19,20]內(nèi),因此,目標(biāo)分頁的結(jié)束行對應(yīng)的數(shù)據(jù)表為009(009數(shù)據(jù)表中包含目標(biāo)分頁的結(jié)束行的分頁記錄)。接著,按數(shù)據(jù)庫編號以及數(shù)據(jù)表編號的順序?qū)λ心繕?biāo)數(shù)據(jù)表進(jìn)行排序,006、009以及排在006和009之間的數(shù)據(jù)表008為目標(biāo)分頁的分頁記錄對應(yīng)的數(shù)據(jù)表。
在步驟307中,從上述對應(yīng)的數(shù)據(jù)表中獲取該目標(biāo)分頁的分頁記錄。
在本實(shí)施例中,可以從上述對應(yīng)的數(shù)據(jù)表中獲取該目標(biāo)分頁的分頁記錄。具體來說,從上述對應(yīng)的數(shù)據(jù)表中獲取所有命中記錄,將這些命中記錄與對應(yīng)的行號關(guān)聯(lián)地存放在內(nèi)存中,按照目標(biāo)分頁的起始行號以及結(jié)束行號從內(nèi)存中取出行號對應(yīng)的命中記錄,作為目標(biāo)分頁的分頁記錄。
例如,結(jié)合步驟305中的例子,從上述數(shù)據(jù)表006,008,009中獲取所有命中記錄,這些命中記錄的行號范圍為[11,20],將這些命中記錄與對應(yīng)的行號關(guān)聯(lián)地存放在內(nèi)存中。另外,目標(biāo)分頁的起始行號以及結(jié)束行號分別 為12和19。根據(jù)目標(biāo)分頁的起始行號以及結(jié)束行號從內(nèi)存中取出行號從12到19的命中記錄,作為目標(biāo)分頁的分頁記錄。
在步驟308中,返回該目標(biāo)分頁的分頁記錄。
應(yīng)用上述實(shí)施例,在接收到分頁查詢的請求時,將符合查詢條件的記錄作為命中記錄,從待查詢數(shù)據(jù)庫中查找出包含命中記錄的數(shù)據(jù)表,作為目標(biāo)數(shù)據(jù)表,統(tǒng)計每張目標(biāo)數(shù)據(jù)表中的命中記錄的條數(shù),確定每張目標(biāo)數(shù)據(jù)表中包含的命中記錄的行號范圍,以確定目標(biāo)分頁的起始行號以及結(jié)束行號,確定目標(biāo)分頁的分頁號,并進(jìn)一步確定目標(biāo)分頁的分頁記錄對應(yīng)的數(shù)據(jù)表,從上述對應(yīng)的數(shù)據(jù)表中獲取目標(biāo)分頁的分頁記錄,并返回目標(biāo)分頁的分頁記錄。無需將所有待查詢數(shù)據(jù)庫中符合查詢條件的所有記錄取出放在內(nèi)存中,從而有助于提高基于分庫分表進(jìn)行分頁查詢的效率。
應(yīng)當(dāng)注意,盡管在附圖中以特定順序描述了本發(fā)明方法的操作,但是,這并非要求或者暗示必須按照該特定順序來執(zhí)行這些操作,或是必須執(zhí)行全部所示的操作才能實(shí)現(xiàn)期望的結(jié)果。相反,流程圖中描繪的步驟可以改變執(zhí)行順序。附加地或備選地,可以省略某些步驟,將多個步驟合并為一個步驟執(zhí)行,和/或?qū)⒁粋€步驟分解為多個步驟執(zhí)行。
與本申請用于分頁查詢的方法的實(shí)施例相對應(yīng),本申請還提供了用于分頁查詢的裝置及設(shè)備的實(shí)施例。
本申請用于分頁查詢的裝置的實(shí)施例可以應(yīng)用在設(shè)備上。裝置實(shí)施例可以通過軟件實(shí)現(xiàn),也可以通過硬件或者軟硬件結(jié)合的方式實(shí)現(xiàn)。以軟件實(shí)現(xiàn)為例,作為一個邏輯意義上的裝置,是通過其所在設(shè)備的處理器將非易失性存儲器中對應(yīng)的計算機(jī)程序指令讀取到內(nèi)存中運(yùn)行形成的。從硬件層面而言,如圖4所示,為本申請用于分頁查詢的裝置所在設(shè)備的一種硬件結(jié)構(gòu)圖,除了圖4所示的處理器、內(nèi)存、網(wǎng)絡(luò)接口、以及非易失性存儲器之外,實(shí)施例中裝置所在的設(shè)備通常根據(jù)該設(shè)備的實(shí)際功能,還可以包括其他硬件,圖4中不再一一示出。
參見圖5,為本申請用于分頁查詢的裝置的一個實(shí)施例框圖。
該裝置包括:查詢單元510、第一確定單元520、第二確定單元530、第三確定單元540、獲取單元550和返回單元560。
其中,查詢單元510,用于響應(yīng)于接收到分頁查詢的請求,分別對每個待查詢數(shù)據(jù)庫中的每張數(shù)據(jù)表進(jìn)行查詢統(tǒng)計,其中,所述請求包括查詢條件及每個分頁容納的記錄條數(shù);
第一確定單元520,用于確定目標(biāo)分頁的分頁號;
第二確定單元530,用于基于所述目標(biāo)分頁的分頁號以及每個分頁容納的記錄條數(shù)確定所述目標(biāo)分頁的起始行號以及結(jié)束行號;
第三確定單元540,用于根據(jù)所述查詢統(tǒng)計的結(jié)果以及所述目標(biāo)分頁的起始行號和結(jié)束行號確定所述目標(biāo)分頁的分頁記錄對應(yīng)的數(shù)據(jù)表;
獲取單元550,用于從所述對應(yīng)的數(shù)據(jù)表中獲取所述目標(biāo)分頁的分頁記錄;
返回單元560,用于返回所述目標(biāo)分頁的分頁記錄。
在一個可選的實(shí)現(xiàn)方式中,所述查詢單元510可以包括(圖5中未示出):
查找子單元,用于從所述待查詢數(shù)據(jù)庫中查找出包含命中記錄的數(shù)據(jù)表,作為目標(biāo)數(shù)據(jù)表,其中,所述命中記錄為符合所述查詢條件的記錄;
統(tǒng)計子單元,用于統(tǒng)計每張所述目標(biāo)數(shù)據(jù)表中命中記錄的條數(shù);
確定子單元,用于確定每張所述目標(biāo)數(shù)據(jù)表中包含的命中記錄的行號范圍。
在另一個可選的實(shí)現(xiàn)方式中,所述確定子單元可以包括(圖5中未示出):
排序模塊,用于按數(shù)據(jù)庫編號以及數(shù)據(jù)表編號的順序?qū)⑺瞿繕?biāo)數(shù)據(jù)表進(jìn)行排序;
設(shè)定模塊,用于將所述排序中的第一張數(shù)據(jù)表行號范圍的起始行號設(shè)定為1,結(jié)束行號設(shè)定為與該數(shù)據(jù)表中包含的命中記錄的條數(shù)相等的數(shù)值;
計算模塊,用于計算前n-1張數(shù)據(jù)表中命中記錄的條數(shù)之和再加1,得到第一數(shù)值,將所述第一數(shù)值作為所述第n張數(shù)據(jù)表行號范圍的起始行號,并計算前n張數(shù)據(jù)表中命中記錄的條數(shù)之和,得到第二數(shù)值,將所述第二數(shù) 值作為所述第n張數(shù)據(jù)表行號范圍的結(jié)束行號,其中,n不等于1。
在另一個可選的實(shí)現(xiàn)方式中,所述第二確定單元530可以包括(圖5中未示出):
第一計算子單元,用于計算所述目標(biāo)分頁的分頁號與每個分頁容納的記錄條數(shù)的乘積,作為所述目標(biāo)分頁的結(jié)束行號;
第二計算子單元,用于計算所述目標(biāo)分頁的結(jié)束行號減每個分頁容納的記錄條數(shù)的差,再加1,作為所述目標(biāo)分頁的起始行號。
在另一個可選的實(shí)現(xiàn)方式中,所述第三確定單元540配置用于:確定目標(biāo)分頁的起始行對應(yīng)的目標(biāo)數(shù)據(jù)表作為起始行數(shù)據(jù)表,以及目標(biāo)分頁的結(jié)束行對應(yīng)的目標(biāo)數(shù)據(jù)表作為結(jié)束行數(shù)據(jù)表,使得目標(biāo)分頁的起始行號落在起始行數(shù)據(jù)表包含的命中記錄的行號范圍內(nèi),目標(biāo)分頁的結(jié)束行號落在結(jié)束行數(shù)據(jù)表包含的命中記錄的行號范圍內(nèi);
判斷所述起始行數(shù)據(jù)表與所述結(jié)束行數(shù)據(jù)表是否為同一張數(shù)據(jù)表;若是,則該數(shù)據(jù)表為目標(biāo)分頁的分頁記錄對應(yīng)的數(shù)據(jù)表;
若否,則按數(shù)據(jù)庫編號以及數(shù)據(jù)表編號的順序,找出目標(biāo)數(shù)據(jù)表中從所述起始行數(shù)據(jù)表到所述結(jié)束行數(shù)據(jù)表的目標(biāo)數(shù)據(jù)表,作為目標(biāo)分頁的分頁記錄對應(yīng)的數(shù)據(jù)表。
在另一個可選的實(shí)現(xiàn)方式中,所述獲取單元550可以包括(圖5中未示出):
獲取子單元,用于從所述對應(yīng)的數(shù)據(jù)表中獲取命中記錄;
存放子單元,用于將所述命中記錄與對應(yīng)的行號關(guān)聯(lián)地存放在內(nèi)存中;
提取子單元,用于按照目標(biāo)分頁的起始行號以及結(jié)束行號從內(nèi)存中取出行號對應(yīng)的命中記錄,作為所述目標(biāo)分頁的分頁記錄。
上述裝置中各個單元的功能和作用的實(shí)現(xiàn)過程具體詳見上述方法中對應(yīng)步驟的實(shí)現(xiàn)過程,在此不再贅述。
應(yīng)當(dāng)理解,上述裝置可以預(yù)先設(shè)置在服務(wù)器中,也可以通過下載等方式而加載到服務(wù)器中。上述裝置中的相應(yīng)模塊單元可以與服務(wù)器中的模塊單元 相互配合以實(shí)現(xiàn)用于分頁查詢的方案。
對于裝置實(shí)施例而言,由于其基本對應(yīng)于方法實(shí)施例,所以相關(guān)之處參見方法實(shí)施例的部分說明即可。以上所描述的裝置實(shí)施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部模塊來實(shí)現(xiàn)本申請方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實(shí)施。
本領(lǐng)域技術(shù)人員在考慮說明書及實(shí)踐這里公開的發(fā)明后,將容易想到本申請的其它實(shí)施方案。本申請旨在涵蓋本申請的任何變型、用途或者適應(yīng)性變化,這些變型、用途或者適應(yīng)性變化遵循本申請的一般性原理并包括本申請未公開的本技術(shù)領(lǐng)域中的公知常識或慣用技術(shù)手段。說明書和實(shí)施例僅被視為示例性的,本申請的真正范圍和精神由下面的權(quán)利要求指出。
應(yīng)當(dāng)理解的是,本申請并不局限于上面已經(jīng)描述并在附圖中示出的精確結(jié)構(gòu),并且可以在不脫離其范圍進(jìn)行各種修改和改變。本申請的范圍僅由所附的權(quán)利要求來限制。