處理數(shù)據(jù)庫查詢結果集的方法和設備的制作方法
【專利摘要】本發(fā)明的實施方式提供一種處理數(shù)據(jù)庫查詢結果集的方法。該方法包括讀取所述數(shù)據(jù)庫查詢結果集的所有原始數(shù)據(jù);生成多個事件,其中所述多個事件中的每個事件包括至少指示該事件序號的標頭信息以及主體信息,所述主體信息包括對應于所述數(shù)據(jù)庫查詢結果集的至少部分原始數(shù)據(jù);對所述多個事件進行并行處理以返回各個事件的處理結果;以及按照所述事件標頭信息對返回的事件處理結果進行排序。本發(fā)明的其它實施方式還提供相應的數(shù)據(jù)庫客戶端和計算機程序產(chǎn)品。
【專利說明】處理數(shù)據(jù)庫查詢結果集的方法和設備
【技術領域】
[0001]本發(fā)明涉及數(shù)據(jù)庫技術,更具體地,涉及處理數(shù)據(jù)庫查詢結果集的方法和設備。
【背景技術】
[0002]在現(xiàn)代企業(yè)應用系統(tǒng)中,數(shù)據(jù)庫管理系統(tǒng)(DBMS)占據(jù)了非常重要的位置,大多數(shù)應用需要向數(shù)據(jù)庫存儲持久化數(shù)據(jù)。對于這些應用,應用自身和數(shù)據(jù)庫的設計及運行時環(huán)境均是關乎系統(tǒng)性能的重要因素。但是,在某些情形下,應用和數(shù)據(jù)庫之間的連接方式和操作機制,特別是對于數(shù)據(jù)庫查詢結果集的處理方法,也是影響系統(tǒng)性能至關重要的因素。
[0003]每一種編程語言均具有其數(shù)據(jù)庫訪問接口或者標準。例如,在Java EE技術中,Java Database Connectivity (JDBC)被設計為用于向數(shù)據(jù)庫添加、修改、去除以及查詢數(shù)據(jù)的標準應用編程接口(API);由微軟(Microsoft? )公司提出的Open DatabaseConnectivity(ODBC)是另一種提供連接性的標準。這些接口和組件已經(jīng)被廣泛地用于實踐中,并且它們在與數(shù)據(jù)庫的交互和處理方式上具有大致相同的機制。
[0004]圖1示意性描述了使用現(xiàn)有技術(例如JDBC)的數(shù)據(jù)庫客戶端對數(shù)據(jù)庫執(zhí)行查詢操作的處理流程。
[0005]如圖1所示,在步驟S110,數(shù)據(jù)庫客戶端打開到數(shù)據(jù)庫服務器的連接。接著在步驟S120,由數(shù)據(jù)庫服務器執(zhí)行請求的查詢操作。在步驟S130,返回表示查詢結果的查詢結果集。
[0006]步驟S140示出了在現(xiàn)有技術中在數(shù)據(jù)庫客戶端中處理數(shù)據(jù)庫查詢結果集的流程。在現(xiàn)有技術方案中,對于查詢結果集的處理是串行執(zhí)行的。只有在當前行已經(jīng)被解析和讀取后,用戶才能移動光標到下一行接著處理。在步驟S141中,以串行方式逐行加載原始數(shù)據(jù)流,解析從數(shù)據(jù)庫服務器返回的數(shù)據(jù)庫查詢結果集。在步驟S142-S144中示意性地示出了逐行讀取查詢結果集數(shù)據(jù)進行處理的串行過程。
[0007]在步驟S150中,數(shù)據(jù)庫客戶端讀取完畢后關閉與數(shù)據(jù)庫服務器的連接。
[0008]許多查詢操作需要一次性返回大量的數(shù)據(jù)記錄,例如業(yè)務報表、數(shù)據(jù)分析、商業(yè)智能以及業(yè)務要求的一次性查詢顯示大量數(shù)據(jù)。這時,現(xiàn)有的串行處理過程所耗費的時間會隨著返回的數(shù)據(jù)量成線性增長。特別地,當應用需要從數(shù)據(jù)庫查詢大量數(shù)據(jù),且要求很小的響應時間時,現(xiàn)有的串行處理機制將無法滿足需要。而且,現(xiàn)有的處理機制雖然簡單易行,但是其單線程的運行方式無法充分利用現(xiàn)代多核處理器所帶來的處理性能的擴展。
[0009]在現(xiàn)有技術中沒有提供解決上述技術問題的解決方案。
【發(fā)明內(nèi)容】
[0010]為了解決現(xiàn)有技術中存在的問題,本發(fā)明的實施方式提供一種用于處理數(shù)據(jù)庫查詢結果集的解決方案,其中通過事件驅動來執(zhí)行對于數(shù)據(jù)庫查詢結果集的并行處理。
[0011]根據(jù)本發(fā)明的一個方面,提供了一種用于處理數(shù)據(jù)庫查詢結果集的方法。該方法包括讀取數(shù)據(jù)庫查詢結果集的所有原始數(shù)據(jù);生成多個事件,其中多個事件中的每個事件包括至少指示該事件序號的標頭信息以及主體信息,該主體信息包括對應于數(shù)據(jù)庫查詢結果集的至少部分原始數(shù)據(jù);對多個事件進行并行處理以返回各個事件的處理結果;以及按照標頭信息對返回的事件處理結果進行排序。
[0012]根據(jù)本發(fā)明的另一個方面,提供了一種數(shù)據(jù)庫客戶端。該數(shù)據(jù)庫客戶端包括執(zhí)行結果管理器,被配置用于讀取數(shù)據(jù)庫查詢結果集的所有原始數(shù)據(jù),并且被配置用于生成多個事件,其中多個事件中的每個事件包括至少指示該事件序號的標頭信息以及主體信息,該主體信息包括對應于數(shù)據(jù)庫查詢結果集的至少部分原始數(shù)據(jù);事件處理管理器,被配置用于對多個事件進行并行處理以向執(zhí)行結果管理器返回各個事件的處理結果,其中執(zhí)行結果管理器還被配置用于按照標頭信息對返回的事件處理結果進行排序。
[0013]根據(jù)本發(fā)明的另一個方面,提供了一種用于處理數(shù)據(jù)庫查詢結果集的裝置。該用于處理數(shù)據(jù)庫查詢結果集的裝置包括用于讀取數(shù)據(jù)庫查詢結果集的所有原始數(shù)據(jù)的裝置;用于生成多個事件的裝置,其中多個事件中的每個事件包括至少指示該事件序號的標頭信息以及主體信息,主體信息包括對應于數(shù)據(jù)庫查詢結果集的至少部分原始數(shù)據(jù);用于對多個事件進行并行處理以返回各個事件的處理結果的裝置;以及用于按照標頭信息對返回的事件處理結果進行排序的裝置。
[0014]根據(jù)本發(fā)明的另一個方面,提供了一種計算機程序產(chǎn)品。該計算機程序產(chǎn)品包括可由處理器執(zhí)行的計算機程序代碼,當通過處理器運行計算機程序代碼時能夠執(zhí)行根據(jù)本發(fā)明實施方式的用于處理數(shù)據(jù)庫查詢結果集的方法。
【專利附圖】
【附圖說明】
[0015]通過結合附圖對本公開示例性實施方式進行更詳細的描述,本公開的上述以及其它目的、特征和優(yōu)勢將變得更加明顯,其中,在本公開示例性實施方式中,相同的參考標號通常代表相同部件。
[0016]圖1示意性描述了使用現(xiàn)有技術(例如JDBC)的數(shù)據(jù)庫客戶端對數(shù)據(jù)庫執(zhí)行查詢操作的處理流程。
[0017]圖2示出了適于用來實現(xiàn)本發(fā)明實施方式的示例性計算機系統(tǒng)/服務器12的框圖。
[0018]圖3示出了根據(jù)本發(fā)明一個實施方式的用于處理數(shù)據(jù)庫查詢結果集的方法的流程圖。
[0019]圖4示出了根據(jù)本發(fā)明一個實施方式的事件實例的數(shù)據(jù)結構。
[0020]圖5示出了根據(jù)本發(fā)明一個實施方式的數(shù)據(jù)庫客戶端的架構的框圖。
【具體實施方式】
[0021]下面將參照附圖更詳細地描述本公開的優(yōu)選實施方式。雖然附圖中顯示了本公開的優(yōu)選實施方式,然而應該理解,可以以各種形式實現(xiàn)本公開而不應被這里闡述的實施方式所限制。相反,提供這些實施方式是為了使本公開更加透徹和完整,并且能夠將本公開的范圍完整地傳達給本領域的技術人員。
[0022]所屬【技術領域】的技術人員知道,本發(fā)明可以實現(xiàn)為系統(tǒng)、方法或計算機程序產(chǎn)品。因此,本公開可以具體實現(xiàn)為以下形式,即:可以是完全的硬件、也可以是完全的軟件(包括固件、駐留軟件、微代碼等),還可以是硬件和軟件結合的形式,本文一般稱為“電路”、“模塊”或“系統(tǒng)”。此外,在一些實施例中,本發(fā)明還可以實現(xiàn)為在一個或多個計算機可讀介質中的計算機程序產(chǎn)品的形式,該計算機可讀介質中包含計算機可讀的程序代碼。
[0023]可以采用一個或多個計算機可讀的介質的任意組合。計算機可讀介質可以是計算機可讀信號介質或者計算機可讀存儲介質。計算機可讀存儲介質例如可以是一但不限于——電、磁、光、電磁、紅外線、或半導體的系統(tǒng)、裝置或器件,或者任意以上的組合。計算機可讀存儲介質的更具體的例子(非窮舉的列表)包括:具有一個或多個導線的電連接、便攜式計算機磁盤、硬盤、隨機存取存儲器(RAM)、只讀存儲器(ROM)、可擦式可編程只讀存儲器(EPR0M或閃存)、光纖、便攜式緊湊磁盤只讀存儲器(CD-ROM)、光存儲器件、磁存儲器件、或者上述的任意合適的組合。在本文件中,計算機可讀存儲介質可以是任何包含或存儲程序的有形介質,該程序可以被指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結合使用。
[0024]計算機可讀的信號介質可以包括在基帶中或者作為載波一部分傳播的數(shù)據(jù)信號,其中承載了計算機可讀的程序代碼。這種傳播的數(shù)據(jù)信號可以采用多種形式,包括——但不限于——電磁信號、光信號或上述的任意合適的組合。計算機可讀的信號介質還可以是計算機可讀存儲介質以外的任何計算機可讀介質,該計算機可讀介質可以發(fā)送、傳播或者傳輸用于由指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結合使用的程序。
[0025]計算機可讀介質上包含的程序代碼可以用任何適當?shù)慕橘|傳輸,包括一但不限于一無線、電線、光纜、RF等等,或者上述的任意合適的組合。
[0026]可以以一種或多種程序設計語言或其組合來編寫用于執(zhí)行本發(fā)明操作的計算機程序代碼,所述程序設計語言包括面向對象的程序設計語言-諸如Java、Smalltalk、C++,還包括常規(guī)的過程式程序設計語言-諸如”C”語言或類似的程序設計語言。程序代碼可以完全地在用戶計算機上執(zhí)行、部分地在用戶計算機上執(zhí)行、作為一個獨立的軟件包執(zhí)行、部分在用戶計算機上部分在遠程計算機上執(zhí)行、或者完全在遠程計算機或服務器上執(zhí)行。在涉及遠程計算機的情形中,遠程計算機可以通過任意種類的網(wǎng)絡一包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)-連接到用戶計算機,或者,可以連接到外部計算機(例如利用因特網(wǎng)服務提供商來通過因特網(wǎng)連接)。
[0027]下面將參照本發(fā)明實施例的方法、裝置(系統(tǒng))和計算機程序產(chǎn)品的流程圖和/或框圖描述本發(fā)明。應當理解,流程圖和/或框圖的每個方框以及流程圖和/或框圖中各方框的組合,都可以由計算機程序指令實現(xiàn)。這些計算機程序指令可以提供給通用計算機、專用計算機或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機器,這些計算機程序指令通過計算機或其它可編程數(shù)據(jù)處理裝置執(zhí)行,產(chǎn)生了實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的裝置。
[0028]也可以把這些計算機程序指令存儲在能使得計算機或其它可編程數(shù)據(jù)處理裝置以特定方式工作的計算機可讀介質中,這樣,存儲在計算機可讀介質中的指令就產(chǎn)生出一個包括實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的指令裝置(instructionmeans)的制造品(manufacture)。
[0029]也可以把計算機程序指令加載到計算機、其它可編程數(shù)據(jù)處理裝置、或其它設備上,使得在計算機、其它可編程數(shù)據(jù)處理裝置或其它設備上執(zhí)行一系列操作步驟,以產(chǎn)生計算機實現(xiàn)的過程,從而使得在計算機或其它可編程裝置上執(zhí)行的指令能夠提供實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的過程。
[0030]圖2示出了適于用來實現(xiàn)本發(fā)明實施方式的示例性計算機系統(tǒng)/服務器12的框圖。圖2顯示的計算機系統(tǒng)/服務器12僅僅是一個示例,不應對本發(fā)明實施例的功能和使用范圍帶來任何限制。
[0031]如圖2所示,計算機系統(tǒng)/服務器12以通用計算設備的形式表現(xiàn)。計算機系統(tǒng)/服務器12的組件可以包括但不限于:一個或者多個處理器或者處理單元16,系統(tǒng)存儲器28,連接不同系統(tǒng)組件(包括系統(tǒng)存儲器28和處理單元16)的總線18。
[0032]總線18表示幾類總線結構中的一種或多種,包括存儲器總線或者存儲器控制器,外圍總線,圖形加速端口,處理器或者使用多種總線結構中的任意總線結構的局域總線。舉例來說,這些體系結構包括但不限于工業(yè)標準體系結構(ISA)總線,微通道體系結構(MAC)總線,增強型ISA總線、視頻電子標準協(xié)會(VESA)局域總線以及外圍組件互連(PCI)總線。
[0033]計算機系統(tǒng)/服務器12典型地包括多種計算機系統(tǒng)可讀介質。這些介質可以是任何能夠被計算機系統(tǒng)/服務器12訪問的可用介質,包括易失性和非易失性介質,可移動的和不可移動的介質。
[0034]系統(tǒng)存儲器28可以包括易失性存儲器形式的計算機系統(tǒng)可讀介質,例如隨機存取存儲器(RAM) 30和/或高速緩存存儲器32。計算機系統(tǒng)/服務器12可以進一步包括其它可移動/不可移動的、易失性/非易失性計算機系統(tǒng)存儲介質。僅作為舉例,存儲系統(tǒng)34可以用于讀寫不可移動的、非易失性磁介質(圖1未顯示,通常稱為“硬盤驅動器”)。盡管圖1中未示出,可以提供用于對可移動非易失性磁盤(例如“軟盤”)讀寫的磁盤驅動器,以及對可移動非易失性光盤(例如⑶-ROM,DVD-ROM或者其它光介質)讀寫的光盤驅動器。在這些情況下,每個驅動器可以通過一個或者多個數(shù)據(jù)介質接口與總線18相連。存儲器28可以包括至少一個程序產(chǎn)品,該程序產(chǎn)品具有一組(例如至少一個)程序模塊,這些程序模塊被配置以執(zhí)行本發(fā)明各實施例的功能。
[0035]具有一組(至少一個)程序模塊42的程序/實用工具40,可以存儲在例如存儲器28中,這樣的程序模塊42包括——但不限于——操作系統(tǒng)、一個或者多個應用程序、其它程序模塊以及程序數(shù)據(jù),這些示例中的每一個或某種組合中可能包括網(wǎng)絡環(huán)境的實現(xiàn)。程序模塊42通常執(zhí)行本發(fā)明所描述的實施例中的功能和/或方法。
[0036]計算機系統(tǒng)/服務器12也可以與一個或多個外部設備14(例如鍵盤、指向設備、顯示器24等)通信,還可與一個或者多個使得用戶能與該計算機系統(tǒng)/服務器12交互的設備通信,和/或與使得該計算機系統(tǒng)/服務器12能與一個或多個其它計算設備進行通信的任何設備(例如網(wǎng)卡,調(diào)制解調(diào)器等等)通信。這種通信可以通過輸入/輸出(I/O)接口 22進行。并且,計算機系統(tǒng)/服務器12還可以通過網(wǎng)絡適配器20與一個或者多個網(wǎng)絡(例如局域網(wǎng)(LAN),廣域網(wǎng)(WAN)和/或公共網(wǎng)絡,例如因特網(wǎng))通信。如圖所示,網(wǎng)絡適配器20通過總線18與計算機系統(tǒng)/服務器12的其它模塊通信。應當明白,盡管圖中未示出,可以結合計算機系統(tǒng)/服務器12使用其它硬件和/或軟件模塊,包括但不限于:微代碼、設備驅動器、冗余處理單元、外部磁盤驅動陣列、RAID系統(tǒng)、磁帶驅動器以及數(shù)據(jù)備份存儲系統(tǒng)等。
[0037]根據(jù)本發(fā)明的實施方式,提出一種用于處理數(shù)據(jù)庫查詢結果集的解決方案,其中通過事件驅動來執(zhí)行對于數(shù)據(jù)庫查詢結果集的并行處理。根據(jù)本發(fā)明的一個實施方式,對于數(shù)據(jù)庫查詢結果集的讀取是獨立的工作并且將不會被阻塞或者中斷。為數(shù)據(jù)庫查詢結果集生成多個事件(即事件實例),數(shù)據(jù)庫查詢結果集通過響應相應事件對查詢結果集進行并行解析并且然后被轉換為所需的對象。
[0038]圖3示出了根據(jù)本發(fā)明一個實施方式的用于處理數(shù)據(jù)庫查詢結果集的方法的流程圖。
[0039]如圖3所示,在步驟S310中,讀取數(shù)據(jù)庫查詢結果集的所有原始數(shù)據(jù)。
[0040]與現(xiàn)有技術相區(qū)別,根據(jù)本發(fā)明實施方式,無需等待查詢結果集中的對應于一個數(shù)據(jù)行的原始數(shù)據(jù)被讀取、解析和處理之后在讀取下一數(shù)據(jù)行的原始數(shù)據(jù),而是不間斷地連續(xù)讀取數(shù)據(jù)庫查詢結果集中的全部原始數(shù)據(jù),由此可以在最短的時間內(nèi)完全讀取查詢結果O
[0041 ] 根據(jù)本發(fā)明的一個實施方式,數(shù)據(jù)庫客戶端可以被配置為以二進制數(shù)據(jù)流形式讀取所述數(shù)據(jù)庫查詢結果集的所有原始數(shù)據(jù)。從數(shù)據(jù)庫服務器到應用服務器的數(shù)據(jù)流傳輸可以采用任何適當?shù)臄?shù)據(jù)流技術,以提高訪問性能并且降低數(shù)據(jù)訪問響應時間。例如,在http: //docs, oracle, com/cd/B28359 01/iava.1ll/b31224/istreams.htm#autoIdll 可以找到可以應用于本發(fā)明的實施方式的數(shù)據(jù)流技術的示例,通過引用將其結合于此。通過二進制數(shù)據(jù)流讀取數(shù)據(jù)庫查詢結果,結合對數(shù)據(jù)的延遲解析,可以在最短時間內(nèi)完全讀取查詢結果。
[0042]雖然本文將以二進制數(shù)據(jù)流為示例來說明根據(jù)本發(fā)明的一個或多個實施方式,但是本領域技術人員應該理解,根據(jù)本發(fā)明的其它實施方式還可以采用任何其它適當形式讀取數(shù)據(jù)庫查詢結果集的所有原始數(shù)據(jù),而不會背離本發(fā)明的實質。這些可以采用的數(shù)據(jù)形式包括但不限于XML代碼形式、字符形式,等等。
[0043]在步驟S320中,生成多個事件。該多個事件中的每個事件包括至少指示該事件序號的標頭信息以及主體信息。事件的主體信息包括對應于數(shù)據(jù)庫查詢結果集的至少部分原始數(shù)據(jù)。
[0044]根據(jù)本發(fā)明的一個實施方式,可以在執(zhí)行步驟S310中的讀取操作的過程中同步地執(zhí)行步驟S320的生成事件的操作。
[0045]根據(jù)本發(fā)明的一個實施方式,將讀取的二進制數(shù)據(jù)流形式的數(shù)據(jù)庫查詢結果集以一個或多個數(shù)據(jù)行為單位進行劃分,將劃分后的一個或多個數(shù)據(jù)行形成為事件的主體信息,并且為事件添加標頭信息。在一個實現(xiàn)中,數(shù)據(jù)庫客戶端例如可以調(diào)用數(shù)據(jù)庫特定的解析適配器來實現(xiàn)對數(shù)據(jù)庫查詢結果集的二進制數(shù)據(jù)進行劃分,由此生成多個事件。
[0046]圖4示出了根據(jù)本發(fā)明一個實施方式的事件的數(shù)據(jù)結構。
[0047]如圖4所示,每個事件包括標頭信息和主體信息。
[0048]標頭信息記錄與該事件實例有關的屬性信息,例如該事件的序號、該事件所包含的數(shù)據(jù)行數(shù)目、對應事件處理邏輯類的標識等等。應注意到,雖然在圖4的示例中給出了具體的標頭信息項,但是本領域的技術人員可以在標頭信息中記錄任何所需的有關事件的屬性信息以便于后續(xù)的處理,因此在圖4所描述示例中僅是出于說明的目的而非窮舉性限制。
[0049]主體信息包括從數(shù)據(jù)庫查詢結果集中劃分的對應于一個或多個數(shù)據(jù)行的原始數(shù)據(jù)。在一個實現(xiàn)方式中,主體信息可以是包括二進制數(shù)據(jù)格式的一個或多個數(shù)據(jù)行的二進制數(shù)據(jù)陣列。事件中數(shù)據(jù)行的數(shù)目可以是預先設定的,并且可以根據(jù)性能的考慮而改變。
[0050]在一個示例中,事件所包括的數(shù)據(jù)行數(shù)目可以為m行。在讀取二進制數(shù)據(jù)流形式的數(shù)據(jù)庫查詢結果集的過程中,當解析到第m個行分隔符時,則生成序號為I的事件,將該m行作為該事件的主體信息并且為該事件添加相應的標頭信息;以此類推,每解析m個行分隔符,則生成相應的事件,例如序號為η的事件,將該m行作為該事件的主體信息,并且為該事件添加相應的標頭信息,直到讀取完數(shù)據(jù)庫查詢結果集的所有二進制數(shù)據(jù)為止。
[0051]在步驟S330中,對多個事件進行并行處理以返回各個事件的處理結果。
[0052]根據(jù)本發(fā)明一個實施方式,通過使用多個線程,對多個事件進行并行處理以返回各個事件的處理結果。例如,在一個實施方式中,可以通過使用提供數(shù)據(jù)庫特定的二進制數(shù)據(jù)解析功能的解析適配器來解析事件的主體信息??梢灶A先為不同的處理注冊不同的事件處理邏輯,由此在運行時通過定制的事件處理邏輯類對不同事件類進行處理。在一種實現(xiàn)中,可以為每個事件生成相應的工作線程;在其它實現(xiàn)中,也可以允許所有事件共享固定數(shù)目的工作線程。
[0053]通過由事件驅動對數(shù)據(jù)庫查詢結果集進行并行的處理,可以顯著降低對查詢結果的處理時間,提高基于數(shù)據(jù)庫的應用的響應速度,并且還可以提高數(shù)據(jù)庫服務器的并發(fā)容量。
[0054]在步驟S340中,按照事件標頭信息對返回的事件解析的結果進行排序,以向數(shù)據(jù)庫應用返回對于整個數(shù)據(jù)庫查詢結果集的處理結果。
[0055]根據(jù)本發(fā)明實施方式的對數(shù)據(jù)庫查詢結果集的處理方法提供了事件驅動的處理機制,消除了對數(shù)據(jù)庫查詢結果集的讀取、解析和訪問之間的耦合,使得能夠相對獨立的執(zhí)行讀取、解析和訪問。而且,在特定實現(xiàn)方式中,還可以在讀取二進制流的過程中執(zhí)行解析,由此進一步提高了處理的效率。根據(jù)本發(fā)明實施方式的對數(shù)據(jù)庫查詢結果集的處理方法消除了現(xiàn)有處理方法的單線程限制,支持用于數(shù)據(jù)庫查詢結果的多線程異步處理,這允許充分使用多核CPU的能力以加速處理。
[0056]圖5示出了根據(jù)本發(fā)明一個實施方式的數(shù)據(jù)庫客戶端的架構的框圖。
[0057]如圖5所示,數(shù)據(jù)庫客戶端500被配置為包括執(zhí)行結果管理器510以及事件處理管理器520。
[0058]執(zhí)行結果管理器510提供接口以返回經(jīng)處理的數(shù)據(jù)庫查詢結果集。數(shù)據(jù)庫應用在使用根據(jù)本發(fā)明實施方式的數(shù)據(jù)庫客戶端500時僅需與執(zhí)行結果管理器510進行交互,而并不需要知曉內(nèi)部復雜的事件處理邏輯。
[0059]根據(jù)本發(fā)明的實施方式,執(zhí)行結果管理器510被配置用于讀取數(shù)據(jù)庫查詢結果集的所有原始數(shù)據(jù)。根據(jù)一個實施方式,執(zhí)行結果管理器510可以以二進制數(shù)據(jù)流形式讀取所述數(shù)據(jù)庫查詢結果集的所有原始數(shù)據(jù)。執(zhí)行結果管理器510可以采用任何適當?shù)臄?shù)據(jù)流技術實現(xiàn)從數(shù)據(jù)庫服務器到應用服務器的數(shù)據(jù)流傳輸,以提高訪問性能并且降低數(shù)據(jù)訪問響應時間。雖然本文以二進制數(shù)據(jù)流為示例來說明根據(jù)本發(fā)明的一個或多個實施方式,但是本領域技術人員應該理解,根據(jù)本發(fā)明的其它實施方式還可以采用任何其它適當形式讀取數(shù)據(jù)庫查詢結果集的所有原始數(shù)據(jù),而不會背離本發(fā)明的實質。這些可以采用的數(shù)據(jù)形式包括但不限于XML代碼形式、字符形式,等等。
[0060]接著,執(zhí)行結果管理器510還被配置用于基于讀取的原始數(shù)據(jù)生成多個事件,其中多個事件中的每個事件包括至少指示該事件序號的標頭信息以及主體信息,該主體信息包括對應于數(shù)據(jù)庫查詢結果集的至少部分原始數(shù)據(jù)。根據(jù)本發(fā)明的一個實施方式,執(zhí)行結果管理器510可以被配置用于在讀取所述數(shù)據(jù)庫查詢結果集的所有數(shù)據(jù)行的過程中執(zhí)行生成多個事件的操作。
[0061]在一個實施方式中,執(zhí)行結果管理器510可以被配置為以一個或多個數(shù)據(jù)行為單位對二進制數(shù)據(jù)進行劃分從而形成多個事件的主體信息;以及添加所述多個事件的標頭信息。數(shù)據(jù)庫客戶端500還可以包括解析適配器530以用于提供數(shù)據(jù)庫特定的二進制數(shù)據(jù)解析功能。由于從不同的數(shù)據(jù)庫返回的數(shù)據(jù)流流的格式可能是不同的,因此每個數(shù)據(jù)庫需要具有其自身特定的解析適配器530 (圖5中僅作為示例示出一個解析適配器530)。例如,對于ODBC數(shù)據(jù)庫可以采用ODBC解析適配器,對于JDBC數(shù)據(jù)庫可以采用JDBC解析適配器,等等。執(zhí)行結果管理器510例如可以被配置為調(diào)用該解析適配器530實現(xiàn)對數(shù)據(jù)庫查詢結果集的二進制數(shù)據(jù)進行劃分,由此生成多個事件。具體而言,執(zhí)行結果管理器510借助于解析適配器530的功能將數(shù)據(jù)庫查詢結果集的二進制數(shù)據(jù)流按照預定的數(shù)據(jù)行數(shù)目劃分為具有行數(shù)據(jù)的一系列事件,形成包括標頭信息和主體信息的事件(例如,具有圖4所示的數(shù)據(jù)結構),然后將事件傳遞到事件處理管理器520以便進行諸如解析、轉換等并行處理。
[0062]事件處理管理器520負責對事件的調(diào)度和處理。事件處理管理器520,被配置用于對多個事件進行并行處理以向執(zhí)行結果管理器510返回各個事件的處理結果。在一些實現(xiàn)中,事件處理管理器520可以被配置為通過使用解析適配器530解析事件的主體信息,并且通過定制的事件處理邏輯類對不同事件類進行的處理。當事件發(fā)生時,事件處理管理器520可以生成相應的事件實例傳送到對應的事件處理邏輯類的實例以進行處理。
[0063]根據(jù)本發(fā)明的實施方式,事件處理管理器520可以被配置為通過使用多個線程對多個事件進行并行處理以返回各個事件的處理結果。存在多種線程調(diào)度和管理的方法。例如,在一個實現(xiàn)方式中,當新的事件到來時,事件處理管理器520會生成一個的線程,以執(zhí)行事件處理邏輯的實例,事件處理邏輯的實例在獨立的線程中完成解析和處理操作,在處理完成后銷毀線程。但是,如果數(shù)據(jù)庫查詢結果很多,會產(chǎn)生大量的事件,這種方式將頻繁發(fā)生線程的生成和銷毀。在另一種實現(xiàn)方式中,可以維持線程池,其中存在固定數(shù)目的工作線程,并且這些線程一起共享所有的事件負荷,通過共享的固定數(shù)目的工作線程實現(xiàn)事件處理邏輯的實例,從而避免大量的線程生成和銷毀開銷。
[0064]在事件處理管理器520處理過各個事件之后,將處理結果返回給執(zhí)行結果管理器510。
[0065]執(zhí)行結果管理器510還被配置用于按照事件的標頭信息對返回的事件處理結果進行排序。具體而言,執(zhí)行結果管理器510在解析和轉換之后保持處理結果。事件處理管理器520負責事件處理并向執(zhí)行結果管理器510返回處理結果。但是,由于事件處理是異步執(zhí)行的,并且返回的處理結果相對于原數(shù)據(jù)庫查詢結果集的順序可能是順序顛倒的。執(zhí)行結果管理器510將按照數(shù)據(jù)庫查詢操作返回的查詢結果集的順序重新排列處理后的結果。
[0066]相較于現(xiàn)有技術,本發(fā)明的各種實施方式具有以下優(yōu)點中的一個或多個:
[0067]-能夠提供對于數(shù)據(jù)庫查詢結果的高效讀取和解析機制,以減少對查詢結果的處理時間,并且提高基于數(shù)據(jù)庫的應用的響應速度。當查詢結果集包括大量數(shù)據(jù)時,本發(fā)明一個或多個實施方式的數(shù)據(jù)庫客戶端在處理速度方面將具有更明顯的優(yōu)點;[0068]-能夠縮短數(shù)據(jù)庫查詢的整體時間消耗,并且能夠盡可能快的釋放與數(shù)據(jù)庫服務器之間的連接,以及提高數(shù)據(jù)庫引擎的并發(fā)容量;
[0069]-能夠消除現(xiàn)有串行處理方法的單線程限制,允許充分使用多核CPU的能力以加速處理;
[0070]-能夠支持對于查詢結果集原始數(shù)據(jù)流的訪問,并且能夠對原查詢結果集再次進行傳遞、保存、解析。
[0071]附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的多個實施例的系統(tǒng)、方法和計算機程序產(chǎn)品的可能實現(xiàn)的體系架構、功能和操作。在這點上,流程圖或框圖中的每個方框可以代表一個模塊、程序段或代碼的一部分,所述模塊、程序段或代碼的一部分包含一個或多個用于實現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應當注意,在有些作為替換的實現(xiàn)中,方框中所標注的功能也可以以不同于附圖中所標注的順序發(fā)生。例如,兩個連續(xù)的方框實際上可以基本并行地執(zhí)行,它們有時也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或操作的專用的基于硬件的系統(tǒng)來實現(xiàn),或者可以用專用硬件與計算機指令的組合來實現(xiàn)。
[0072]以上已經(jīng)描述了本發(fā)明的各實施例,上述說明是示例性的,并非窮盡性的,并且也不限于所披露的各實施例。在不偏離所說明的各實施例的范圍和精神的情況下,對于本【技術領域】的普通技術人員來說許多修改和變更都是顯而易見的。本文中所用術語的選擇,旨在最好地解釋各實施例的原理、實際應用或對市場中的技術的技術改進,或者使本【技術領域】的其它普通技術人員能理解本文披露的各實施例。
【權利要求】
1.一種用于處理數(shù)據(jù)庫查詢結果集的方法,包括: 讀取所述數(shù)據(jù)庫查詢結果集的所有原始數(shù)據(jù); 生成多個事件,其中所述多個事件中的每個事件包括至少指示該事件序號的標頭信息以及主體信息,所述主體信息包括對應于所述數(shù)據(jù)庫查詢結果集的至少部分原始數(shù)據(jù); 對所述多個事件進行并行處理以返回各個事件的處理結果;以及 按照所述標頭信息對返回的事件處理結果進行排序。
2.根據(jù)權利要求1所述的方法,其中所述讀取所述數(shù)據(jù)庫查詢結果集的所有原始數(shù)據(jù)包括: 以二進制數(shù)據(jù)流形式讀取所述數(shù)據(jù)庫查詢結果集的所有原始數(shù)據(jù)。
3.根據(jù)權利要求1所述的方法,其中在讀取所述數(shù)據(jù)庫查詢結果集的所有原始數(shù)據(jù)的過程中執(zhí)行生成多個事件的操作。
4.根據(jù)權利要求2所述的方法,其中所述生成多個事件包括: 以一個或多個數(shù)據(jù)行為單位劃分所述二進制數(shù)據(jù)流形式的所述數(shù)據(jù)庫查詢結果集,以形成所述多個事件的主體信息;以及添加所述多個事件的標頭信息。
5.根據(jù)權利要求1所述的方法,其中對所述多個事件進行并行處理以返回各個事件的處理結果是通過使用多個線程進行的。
6.根據(jù)權利要求5所述 的方法,其中使用提供數(shù)據(jù)庫特定的二進制數(shù)據(jù)解析功能的解析適配器來解析事件的主體信息,并且通過定制的事件處理邏輯類對不同事件類進行處理。
7.根據(jù)權利要求5所述的方法,其中: 為每個事件生成工作線程;或者 所有事件共享固定數(shù)目的工作線程。
8.一種數(shù)據(jù)庫客戶端,包括:執(zhí)行結果管理器,被配置用于讀取所述數(shù)據(jù)庫查詢結果集的所有原始數(shù)據(jù),并且被配置用于生成多個事件,其中所述多個事件中的每個事件包括至少指示該事件序號的標頭信息以及主體信息,所述主體信息包括對應于所述數(shù)據(jù)庫查詢結果集的至少部分原始數(shù)據(jù);事件處理管理器,被配置用于對所述多個事件進行并行處理以向所述執(zhí)行結果管理器返回各個事件的處理結果, 其中所述執(zhí)行結果管理器還 配置用于按照所述標頭信息對返回的事件處理結果進行排序。
9.根據(jù)權利要求8所述的數(shù)據(jù)庫客戶端,其中所述執(zhí)行結果管理器被配置用于以二進制數(shù)據(jù)流形式讀取所述數(shù)據(jù)庫查詢結果集的所有原始數(shù)據(jù)。
10.根據(jù)權利要求8所述的數(shù)據(jù)庫客戶端,其中所述執(zhí)行結果管理器被配置用于在讀取所述數(shù)據(jù)庫查詢結果集的所有原始數(shù)據(jù)的過程中執(zhí)行生成多個事件的操作。
11.根據(jù)權利要求9所述的數(shù)據(jù)庫客戶端,其中所述執(zhí)行結果管理器進一步被配置為: 以一個或多個數(shù)據(jù)行為單位劃分所述二進制數(shù)據(jù)流形式的所述數(shù)據(jù)庫查詢結果集,以形成所述多個事件的主體信息;以及添加所述多個事件的標頭信息。
12.根據(jù)權利要求8所述的數(shù)據(jù)庫客戶端,進一步包括解析適配器,用于提供數(shù)據(jù)庫特定的二進制數(shù)據(jù)解析功能, 其中所述事件處理管理器被配置為通過使用所述解析適配器解析事件的主體信息,并且通過定制的事件處理邏輯類對不同事件類進行處理。
13.根據(jù)權利要求8所述的數(shù)據(jù)庫客戶端,其中所述事件處理管理器被配置為通過使用多個線程對所述多個事件進行并行處理以返回各個事件的處理結果。
14.根據(jù)權利要求12所述的數(shù)據(jù)庫客戶端,其中所述事件處理管理器被配置為: 為每個事件生成工作線程;或者 所有事件共享固定數(shù)目的工作線程。
15.一種用于處理數(shù)據(jù)庫查詢結果集的裝置,包括: 用于讀取所述數(shù)據(jù)庫查詢結果集的所有原始數(shù)據(jù)的裝置; 用于生成多個事件的裝置,其中所述多個事件中的每個事件包括至少指示該事件序號的標頭信息以及主體信息,所述主體信息包括對應于所述數(shù)據(jù)庫查詢結果集的至少部分原始數(shù)據(jù); 用于對所述多個事件進行并行處理以返回各個事件的處理結果的裝置;以及 用于按照所述標頭信息對返回的事件 處理結果進行排序的裝置。
【文檔編號】G06F17/30GK103885984SQ201210563722
【公開日】2014年6月25日 申請日期:2012年12月21日 優(yōu)先權日:2012年12月21日
【發(fā)明者】鄭王力, 王夕寧, 孫杰, 趙忠 申請人:國際商業(yè)機器公司