針對Mysql數(shù)據(jù)庫創(chuàng)建動態(tài)游標池的方法、裝置以及處理多線程下并發(fā)請求的方法、裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于數(shù)據(jù)庫應(yīng)用領(lǐng)域,尤其涉及針對Mysql數(shù)據(jù)庫創(chuàng)建動態(tài)游標池的方 法、裝置以及處理多線程下并發(fā)請求的方法、裝置。
【背景技術(shù)】
[0002] 作為免費的大型關(guān)系型數(shù)據(jù)庫,Mysql數(shù)據(jù)庫以其優(yōu)秀的特性在很多云服務(wù)器項 目中都被用作數(shù)據(jù)存儲服務(wù)器,其自帶實現(xiàn)的存儲過程、觸發(fā)器和游標等高級功能對我們 處理應(yīng)用業(yè)務(wù)能夠帶來非常便利的作用。
[0003] 游標(cursor)是數(shù)據(jù)庫中一個十分重要的概念,其提供了一種對從表中檢索出 的數(shù)據(jù)進行操作的靈活手段。就本質(zhì)而言,游標實際上是一種能從包括多條數(shù)據(jù)記錄的結(jié) 果集中每次提取一條記錄的機制。游標總是與一條SQL查詢語句相關(guān)聯(lián)因為游標由結(jié)果集 (可以是零條、一條或由相關(guān)的選擇語句檢索出的多條記錄)和結(jié)果集中指向特定記錄的 游標位置組成。如果游標對應(yīng)的查詢結(jié)果集是隨查詢條件值的不同而動態(tài)生成,則這種游 標可稱為動態(tài)游標;用戶所做的更新、刪除和插入在動態(tài)游標中加以反映。
[0004] 鑒于業(yè)務(wù)開發(fā)人員對復(fù)雜結(jié)構(gòu)化查詢語言(Structured Query Language,SQL)的 設(shè)計并不如數(shù)據(jù)庫開發(fā)人員那么純熟、高效。數(shù)據(jù)庫開發(fā)人員可以把復(fù)雜業(yè)務(wù)帶來的復(fù)雜 查詢SQL需求的處理過程封裝在存儲過程中,提供存儲過程接口給業(yè)務(wù)層,業(yè)務(wù)層可以直 接調(diào)用存儲過程而不用費心對付復(fù)雜SQL的設(shè)計實現(xiàn),大大降低了業(yè)務(wù)開發(fā)人員對SQL設(shè) 計的要求,這種架構(gòu)理念對于分層分工也有著顯著的好處。
[0005] 然而,與Oracle這種商業(yè)數(shù)據(jù)庫不同,現(xiàn)有的Mysql數(shù)據(jù)庫沒有提供動態(tài)游標 功能,即現(xiàn)有的Mysql數(shù)據(jù)庫的游標不支持動態(tài)數(shù)據(jù)集(也即查詢條件動態(tài)可變)。現(xiàn)有 Mysql數(shù)據(jù)庫的這種局限性,一方面給數(shù)據(jù)庫開發(fā)人員對業(yè)務(wù)功能的實現(xiàn)封裝帶來了很大 的束縛;另外一方面,云計算的應(yīng)用場景決定了對數(shù)據(jù)庫服務(wù)器的并發(fā)請求會很多,業(yè)務(wù)層 的某些功能實現(xiàn)不可避免地會導(dǎo)致頻繁并發(fā)請求處理動態(tài)查詢結(jié)果數(shù)據(jù)集的遍歷,以現(xiàn)有 Mysql數(shù)據(jù)庫的游標,無法高效快速地對每一個請求予以響應(yīng)。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明的目的在于提供針對Mysql數(shù)據(jù)庫創(chuàng)建動態(tài)游標池的方法、裝置以及處理 多線程下并發(fā)請求的方法、裝置,旨在解決現(xiàn)有Mysql數(shù)據(jù)庫因不支持動態(tài)游標而帶來種 種局限的技術(shù)問題。
[0007] 本發(fā)明是這樣實現(xiàn)的,一種針對Mysql數(shù)據(jù)庫創(chuàng)建動態(tài)游標池的方法,所述方法 包括:
[0008] 分配用于命名動態(tài)視圖基名的字段、分配用于命名動態(tài)游標基名的字段、分配用 于記錄當前總共分配序號數(shù)量的字段以及為請求分配用于定義待分配序號的字段;
[0009] 根據(jù)所述字段生成申請動態(tài)游標名存儲過程;
[0010] 根據(jù)存儲過程接口的輸入?yún)?shù)和生成所述申請動態(tài)游標名存儲過程時返回的動 態(tài)視圖名,生成動態(tài)視圖;
[0011] 根據(jù)所述動態(tài)視圖和生成所述申請動態(tài)游標名存儲過程時返回的靜態(tài)游標名,生 成動態(tài)游標。
[0012] 本發(fā)明的另一目的在于提供一種針對Mysql數(shù)據(jù)庫處理多線程下并發(fā)請求的方 法,所述方法包括:
[0013] 業(yè)務(wù)層調(diào)用存儲過程接口函數(shù);
[0014] 根據(jù)所述業(yè)務(wù)層調(diào)用存儲過程接口函數(shù)的調(diào)用結(jié)果,數(shù)據(jù)存儲層調(diào)用申請動態(tài)游 標名存儲過程以獲取動態(tài)視圖名和靜態(tài)游標名;
[0015] 所述數(shù)據(jù)存儲層根據(jù)所述動態(tài)視圖名、靜態(tài)游標名和所述存儲過程接口函數(shù)的輸 入?yún)?shù),生成動態(tài)視圖和動態(tài)游標;
[0016] 所述數(shù)據(jù)存儲層遍歷所述動態(tài)游標,將生成的業(yè)務(wù)結(jié)果返回至所述存儲過程接口 函數(shù)的輸出參數(shù);
[0017] 所述數(shù)據(jù)存儲層回收所述動態(tài)游標。
[0018] 本發(fā)明的另一目的在于提供一種針對Mysql數(shù)據(jù)庫創(chuàng)建動態(tài)游標池的裝置,所述 裝置包括:
[0019] 分配模塊,用于分配用于命名動態(tài)視圖基名的字段、分配用于命名動態(tài)游標基名 的字段、分配用于記錄當前總共分配序號數(shù)量的字段以及為請求分配用于定義待分配序號 的字段;
[0020] 第一存儲過程生成模塊,用于根據(jù)所述字段生成申請動態(tài)游標名存儲過程;
[0021] 動態(tài)視圖生成模塊,用于根據(jù)存儲過程接口的輸入?yún)?shù)和生成所述申請動態(tài)游標 名存儲過程時返回的動態(tài)視圖名,生成動態(tài)視圖;
[0022] 動態(tài)游標生成模塊,用于根據(jù)所述動態(tài)視圖和生成所述申請動態(tài)游標名存儲過程 時返回的靜態(tài)游標名,生成動態(tài)游標。
[0023] 本發(fā)明的另一目的在于提供一種針對Mysql數(shù)據(jù)庫處理多線程下并發(fā)請求的裝 置,所述裝置包括:
[0024] 第一調(diào)用模塊,用于業(yè)務(wù)層調(diào)用存儲過程接口函數(shù);
[0025] 第二調(diào)用模塊,用于根據(jù)所述業(yè)務(wù)層調(diào)用存儲過程接口函數(shù)的調(diào)用結(jié)果,數(shù)據(jù)存 儲層調(diào)用申請動態(tài)游標名存儲過程以獲取動態(tài)視圖名和靜態(tài)游標名;
[0026] 生成模塊,用于所述數(shù)據(jù)存儲層根據(jù)所述動態(tài)視圖名、靜態(tài)游標名和所述存儲過 程接口函數(shù)的輸入?yún)?shù),生成動態(tài)視圖和動態(tài)游標;
[0027] 結(jié)果返回模塊,用于所述數(shù)據(jù)存儲層遍歷所述動態(tài)游標,將生成的業(yè)務(wù)結(jié)果返回 至所述存儲過程接口函數(shù)的輸出參數(shù);
[0028] 游標回收模塊,用于所述數(shù)據(jù)存儲層回收所述動態(tài)游標。
[0029] 從上述本發(fā)明實施例可知,一方面,由于能夠根據(jù)存儲過程接口的輸入?yún)?shù)和生 成申請動態(tài)游標名存儲過程時返回的動態(tài)視圖名生成動態(tài)視圖,以及根據(jù)所述動態(tài)視圖和 生成申請動態(tài)游標名存儲過程時返回的靜態(tài)游標名,最終生成動態(tài)游標,因此,突破了現(xiàn)有 的Mysql數(shù)據(jù)庫的游標不支持動態(tài)數(shù)據(jù)集這一局限性,給數(shù)據(jù)庫開發(fā)人員對業(yè)務(wù)功能的實 現(xiàn)封裝帶來了很大便利;另一方面,業(yè)務(wù)層可以只需要調(diào)用存儲過程接口函數(shù)即可獲取業(yè) 務(wù)結(jié)果,從而將復(fù)雜SQL的設(shè)計交由給數(shù)據(jù)庫開發(fā)人員,分離復(fù)雜SQL設(shè)計到數(shù)據(jù)庫存儲 層,降低了對業(yè)務(wù)層開發(fā)人員的要求,對于分層分工大有好處,而數(shù)據(jù)存儲層通過調(diào)用申請 動態(tài)游標名存儲過程生成動態(tài)游標,在將業(yè)務(wù)結(jié)果返回給業(yè)務(wù)層后,數(shù)據(jù)存儲層再回收這 些動態(tài)游標,從而不僅針對Mysql數(shù)據(jù)庫實現(xiàn)了動態(tài)游標池,還可以對大量并發(fā)的多線程 動態(tài)游標請求高效快速地予以響應(yīng)。
【附圖說明】
[0030] 圖1是本發(fā)明實施例一提供的針對Mysql數(shù)據(jù)庫創(chuàng)建動態(tài)游標池的方法的實現(xiàn)流 程意圖;
[0031] 圖2是本發(fā)明實施例二提供的針對Mysql數(shù)據(jù)庫創(chuàng)建動態(tài)游標池的方法的實現(xiàn)流 程意圖;
[0032] 圖3是本發(fā)明實施例三提供的針對Mysql數(shù)據(jù)庫創(chuàng)建動態(tài)游標池的方法的實現(xiàn)流 程意圖;
[0033] 圖4是本發(fā)明實施例四提供的針對Mysql數(shù)據(jù)庫處理多線程下并發(fā)請求的方法的 實現(xiàn)流程示意圖;
[0034] 圖5是本發(fā)明實施例五提供的針對Mysql數(shù)據(jù)庫創(chuàng)建動態(tài)游標池的裝置的結(jié)構(gòu)示 意圖;
[0035] 圖6是本發(fā)明實施例六提供的針對Mysql數(shù)據(jù)庫創(chuàng)建動態(tài)游標池的裝置的結(jié)構(gòu)示 意圖;
[0036] 圖7是本發(fā)明實施例七提供的針對Mysql數(shù)據(jù)庫創(chuàng)建動態(tài)游標池的裝置的結(jié)構(gòu)示 意圖;
[0037] 圖8是本發(fā)明實施例八提供的針對Mysql數(shù)據(jù)庫創(chuàng)建動態(tài)游標池的裝置的結(jié)構(gòu)示 意圖;
[0038] 圖9是本發(fā)明實施例九提供的針對Mysql數(shù)據(jù)庫處理多線程下并發(fā)請求的裝置的 結(jié)構(gòu)示意圖。
【具體實施方式】
[0039] 為了使本發(fā)明的目的、技術(shù)方案及有益效果更加清楚明白,以下結(jié)合附圖及實施 例,對本發(fā)明進行進一步詳細說明。應(yīng)當理解,此處所描述的具體實施例僅僅用以解釋本發(fā) 明,并不用于限定本發(fā)明。
[0040] 本發(fā)明實施例提供針對Mysql數(shù)據(jù)庫創(chuàng)建動態(tài)游標池的方法,所述方法包括:分 配用于命名動態(tài)視圖基名的字段、分配用于命名動態(tài)游標基名的字段、分配用于記錄當前 總共分配序號數(shù)量的字段以及為請求分配用于定義待分配序號的字段;根據(jù)所述字段生成 申請動態(tài)游標名存儲過程;根據(jù)存儲過程接口的輸入?yún)?shù)和生成所述申請動態(tài)游標名存儲 過程時返回的動態(tài)視圖名,生成動態(tài)視圖;根據(jù)所述動態(tài)視圖和生成所述申請動態(tài)游標名 存儲過程時返回的靜態(tài)游標名,生成動態(tài)游標。本發(fā)明實施例還提供相應(yīng)的針對Mysql數(shù) 據(jù)庫處理多線程下并發(fā)請求的方法、裝置。以下分別進行詳細說明。
[0041] 請參閱附圖1,是本發(fā)明實施例一提供的針對Mysql數(shù)據(jù)庫創(chuàng)建動態(tài)游標池的方 法的實現(xiàn)流程,主要包括以下步驟S101至步驟S104 :
[0042] S101,分配用于命名動態(tài)視圖基名的字段、分配用于命名動態(tài)游標基名的字段、分 配用于記錄當前總共分配序號數(shù)量的字段以及為請求分配用于定義待分配序號的字段。
[0043] 在本實施例中,可以使用字段ra_vieWName表示用于命名動態(tài)視圖基名的字段, 使用字段ra_cursorName表示用于命名動態(tài)游標基名的字段,使用字段ra_currentNumber 表示所述用于記錄當前總共分配序號數(shù)量的字段,用于定義待分配序號的字段包括字段 ia_now、字段 ia_next 和字段 ra_index〇
[0044] 在本實施例中,用于命名動態(tài)視圖基名的字段、用于命名動態(tài)游標基名的字段、用 于記錄當前總共分配序號數(shù)量的字段以及用于定義待分配序號的字段等字段的分配,可以 通過分配數(shù)據(jù)庫表來實現(xiàn)。
[0045] 例如,對于用于命名動態(tài)視圖基名的字段、用于命名動態(tài)游標基名的字段、用于記 錄當前總共分配序號數(shù)量的字段和字段ra_index的分配,可以通過分配注冊管理表(即 info_registerAdministration)來實現(xiàn),因注冊管理表包含有字段ra_viewName、字段ra_ cursor