祝君,劉柏fl,余晟雋,宮學(xué)慶,周敏奇
(華東師范大學(xué)數(shù)據(jù)科學(xué)與工程研究院,上海200062)
面向OceanBase的存儲過程設(shè)計與實現(xiàn)
祝君,劉柏fl,余晟雋,宮學(xué)慶,周敏奇
(華東師范大學(xué)數(shù)據(jù)科學(xué)與工程研究院,上海200062)
存儲過程是數(shù)據(jù)庫管理系統(tǒng)的一個重要特性,它是標準結(jié)構(gòu)化查詢語言(Structured Query Language,SQL)的一個擴展.OceanBase是一個新型的支持海量數(shù)據(jù)處理的分布式數(shù)據(jù)庫系統(tǒng),但現(xiàn)有OceanBase的開源版本不支持存儲過程功能,影響了該系統(tǒng)在企業(yè)和機構(gòu)中的推廣和應(yīng)用.本文在深度分析存儲過程原理以及OceanBase查詢處理策略的基礎(chǔ)上,設(shè)計并實現(xiàn)了支持PL/SQL(Procedural Language/SQL)的存儲過程機制.
存儲過程;SQL;OceanBase
隨著大數(shù)據(jù)時代和互聯(lián)網(wǎng)時代的到來,信息量呈井噴式爆發(fā),傳統(tǒng)的集中式數(shù)據(jù)庫管理系統(tǒng)難以處理如此巨大的數(shù)據(jù).在集中式系統(tǒng)架構(gòu)下,盡管可以依據(jù)業(yè)務(wù)特點對數(shù)據(jù)庫進行拆分,實現(xiàn)數(shù)據(jù)表的水平切分/垂直切分并存儲到不同的數(shù)據(jù)庫服務(wù)器上,但隨著業(yè)務(wù)和數(shù)據(jù)量不斷增長,需要不斷地增加服務(wù)器以實現(xiàn)更細粒度的數(shù)據(jù)表切分,這種方法需要大量的人工維護成本.因此很多企業(yè)將目光轉(zhuǎn)向了逐漸成熟的分布式數(shù)據(jù)庫系統(tǒng),并利用其良好的可擴展性和容錯性等來滿足存儲海量數(shù)據(jù)的應(yīng)用需求.近幾年,隨著分布式數(shù)據(jù)庫的快速發(fā)展,各種分布式數(shù)據(jù)庫如雨后春筍般出現(xiàn),如Bigtable[1]、Spanner[2]、VoltDB[3],以及阿里巴巴(Alibaba)的OceanBase[4]等.雖然這些系統(tǒng)多數(shù)擁有存儲和管理海量數(shù)據(jù)的能力,但是在數(shù)據(jù)一致性、事務(wù)處理能力、SQL[5]功能上,同傳統(tǒng)的關(guān)系數(shù)據(jù)庫系統(tǒng)相比還有差距,很難被直接應(yīng)用于銀行業(yè)務(wù)系統(tǒng)等傳統(tǒng)的大型信息系統(tǒng)中,制約了分布式數(shù)據(jù)庫在企業(yè)和機構(gòu)中的推廣和使用.但是越來越多的企業(yè)開始關(guān)注于增強分布式數(shù)據(jù)系統(tǒng)功能,如增加SQL支持、事務(wù)、二級索引、一致性等.
OceanBase是Alibaba研發(fā)的關(guān)系型分布式數(shù)據(jù)庫,它實現(xiàn)了關(guān)系數(shù)據(jù)庫的重要特征,也支持SQL查詢;但是和主流的關(guān)系型數(shù)據(jù)庫系統(tǒng)PostgreSQL[6-7]、MySQL[8]等相比較,功能上還存在一些不足的地方,如不支持存儲過程[9]和游標等.存儲過程在現(xiàn)代企業(yè)中應(yīng)用十分廣泛,大多數(shù)企業(yè)的業(yè)務(wù)邏輯都采用存儲過程實現(xiàn),而OceanBase作為關(guān)系型數(shù)據(jù)庫想要在企業(yè)和機構(gòu)中被廣泛應(yīng)用,就需要支持存儲過程,以B企業(yè)和機構(gòu)易于將存儲過程所寫的業(yè)務(wù)遷移到OceanBase數(shù)據(jù)庫系統(tǒng).
本文通過深入分析主流的開源數(shù)據(jù)庫管理系統(tǒng)的存儲過程功能,對實現(xiàn)中的一些關(guān)鍵技術(shù)問題進行研究,并結(jié)合OceanBase架構(gòu)和其現(xiàn)有的查詢引擎,提出一種適合OceanBase數(shù)據(jù)庫架構(gòu)的存儲過程設(shè)計和實現(xiàn)方案.本文安排如下:第1節(jié)介紹OceanBase架構(gòu)和存儲過程;第2節(jié)介紹OceanBase存儲過程機制;第3節(jié)介紹PL/SQL[10]引擎架構(gòu);第4節(jié)對OceanBase存儲過程進行實驗;第5節(jié)總結(jié)全文.
1.1 OceanBase概述
OceanBase整機架構(gòu)[11]分為4個模塊:主控服務(wù)器RootServer;更新服務(wù)器Update-Server;基線數(shù)據(jù)服務(wù)器ChunkServer;合并服務(wù)器MergeServer.如圖1所示.
圖1 OceanBase架構(gòu)Fig.1The architecture of OceanBase
在OceanBase中,和客戶端直接連接的是MergeServer.客戶端通過MySQL(關(guān)于數(shù)據(jù)庫管理系統(tǒng))協(xié)議將SQL請求發(fā)送到MergeServer后,MergeServer首先解析MySQL協(xié)議,從中提取出用戶發(fā)送的SQL語句,接著通過MS-SQL模塊,使用Flex與Bison[12]進行詞法解析和語法分析[13],生成語法樹[13];然后生成SQL語句的邏輯查詢計劃和物理查詢計劃;最后根據(jù)物理查詢計劃調(diào)用OceanBase內(nèi)部的各種操作符.MergeServer是OceanBase查詢請求的入口,負責(zé)對收到的SQL進行處理和響應(yīng).
1.2 PL/SQL和存儲過程簡介
PL/SQL是Oracle數(shù)據(jù)庫對SQL語句的擴展定義并實現(xiàn)的一種過程化SQL語言(Procedural Language/SQL),也是一種程序語言,在普通SQL語句的使用上增加了編程語言的特點.PL/SQL引入多種數(shù)據(jù)類型、變量聲明、條件控制、循環(huán)結(jié)構(gòu)和子程序等過程語言要素來強化SQL語句的過程處理能力.所以PL/SQL就是把數(shù)據(jù)操作和查詢語句組織在PL/SQL代碼的過程性單元中,并通過邏輯判斷、循環(huán)等操作實現(xiàn)復(fù)雜的功能或者計算的程序語言.
存儲過程是一段被命名后保存在數(shù)據(jù)庫服務(wù)器端的一段預(yù)先編譯的代碼.上層應(yīng)用給定存儲過程名稱和相應(yīng)參數(shù)后,解釋執(zhí)行預(yù)編譯的代碼,能有效減少上層應(yīng)用與數(shù)據(jù)庫交互的次數(shù)和數(shù)據(jù)傳輸量.
2.1 OceanBase存儲過程架構(gòu)
在OceanBase中為實現(xiàn)存儲過程,選擇使用PL/SQL作為存儲過程的宿主語言.因為PL/SQL最為常用,用戶更習(xí)慣PL/SQL的編程方式.但OceanBase的原有架構(gòu)中, MergeServer只能對SQL語句進行解析,不能解析存儲過程使用的PL/SQL語句.所以在原來的MergeServer架構(gòu)[14]中,增加PL/SQL引擎模塊來對存儲過程的PL/SQL語句進行解析處理.增加PL/SQL引擎模塊后的MergeServer架構(gòu)如圖2所示.
圖2 MergeServer架構(gòu)圖Fig.2The architecture of MergeServer
增加了PL/SQL引擎模塊后,當MergeServer收到存儲過程相關(guān)的PL/SQL語句后,會將收到的PL/SQL交給PL/SQL引擎處理.PL/SQL引擎[15]包括編譯器和解釋器兩個部分.編譯器負責(zé)對PL/SQL進行編譯.解釋器負責(zé)解釋執(zhí)行[16]編譯器編譯后的中間代碼.
2.2 存儲過程創(chuàng)建和存儲
2.2.1 存儲過程創(chuàng)建
存儲過程的創(chuàng)建可以說是存儲過程物理計劃樹[17]的生成過程.物理計劃樹的生成分為4個步驟:詞法解析;語法分析;邏輯計劃生成;物理計劃生成.存儲過程創(chuàng)建的流程如圖3所示.
當存儲過程語句發(fā)送到MergeServer后,PL/SQL引擎對存儲過程代碼進行語法詞法解析,判斷是否有語法錯誤,如果有錯誤,則將予以報錯,否則將會生成一棵語法樹.語法樹生成后進入到邏輯計劃生成部分,對存儲過程中的表、字段、屬性、變量的合法性進行檢查[17],如果有錯誤則提示錯誤信息.最后進入物理計劃生成階段,會先判斷存儲過程在系統(tǒng)表里面是否已經(jīng)定義過,如果存在相同名稱的存儲過程則提示用戶,否則將存儲過程源碼存入系統(tǒng)表all procedure里面,并把生成的物理執(zhí)行計劃存儲在數(shù)據(jù)庫服務(wù)端;然后返回創(chuàng)建成功的提示信息.在創(chuàng)建存儲過程的時候并不會解釋執(zhí)行生成的物理計劃,物理計劃只會在調(diào)用的時候才會被解釋執(zhí)行.
圖3 存儲過程創(chuàng)建流程圖Fig.3The flowchart of stored procedure creating
2.2.2 存儲過程的存儲
存儲主要分為兩種方式:單源碼方式和源碼+預(yù)編譯方式.單源碼方式是指只在數(shù)據(jù)庫中保存存儲過程的源碼,而后者是在數(shù)據(jù)庫中保存了源碼后,并且也保存了預(yù)編譯生成的執(zhí)行單元.在OceanBase的存儲過程實現(xiàn)方案中存儲過程的存儲模式,采用和Oracle、PostgreSQL類似的方案,即源碼+中間代碼的存儲方案,不同的是在OceanBase中,中間代碼不是語法樹,而是物理計劃樹.
在OceanBase中新增一張名為all procedure的系統(tǒng)表,用來保存存儲過程源碼. all procedure表的基本字段如表1所示.
表1 all procedure表的字段Tab.1Schema ofall procedure
在OceanBase中,客戶端連接到MergeServer的時候,系統(tǒng)會為該連接分配一個SESSION用來表示這次會話.在SESSION中建立一個緩存中間代碼的隊列,為了不過多占用內(nèi)存,中間代碼的緩存采用FIFO(First Input First Output)(先進先出隊列)策略,如果當前的SESSION中緩存的中間代碼過多,可將最早進入緩存隊列的對象移除.
2.3 存儲過程的執(zhí)行
調(diào)用存儲過程的語句進入到查詢處理器后,首先會通過PL/SQL引擎進行詞法、語法解析,判斷是否存在語法錯誤.然后根據(jù)解析出來的存儲過程名稱和參數(shù)在緩存隊列中進行查找,當函數(shù)簽名和調(diào)用參數(shù)一致時返回該存儲過程的物理執(zhí)行計劃樹;如果沒有在緩存隊列中找到物理執(zhí)行計劃樹,就到系統(tǒng)表all procedure中查找,查詢到記錄則將查詢到的存儲過程源碼使用PL/SQL引擎重新編譯生成物理計劃樹,否則提示存儲過程不存在或錯誤.最后將物理計劃樹使用PL/SQL解釋器進行解釋執(zhí)行.存儲過程執(zhí)行流程如圖4所示.
圖4 存儲過程執(zhí)行流程圖Fig.4The flowchart of stored procedure execution
存儲過程是沒有返回值的,但是可以通過INOUT和OUT類型的輸出參數(shù)來實現(xiàn).因此在執(zhí)行存儲過程前將INOUT和OUT類型的參數(shù)拷貝到運行時狀態(tài)棧的最底層中,當解釋執(zhí)行結(jié)束過后,將INOUT和OUT類型的參數(shù)拷貝到用戶的變量空間.
3.1 PL/SQL引擎架構(gòu)
在OceanBase的MergeServer中沒有PL/SQL處理引擎,因此不能支持過程化語言.根據(jù)PL/SQL兼有過程式語言和SQL語句的特點,在OceanBase PL/SQL引擎設(shè)計的時候,為了充分利用原有系統(tǒng)的SQL引擎,把過程式語句和SQL語句分開處理[18].
如圖5所示,在對PL/SQL編譯執(zhí)行的時候,首先讀取PL/SQL語句塊,進行編譯,在編譯的過程中如果是SQL語句,調(diào)用OceanBase的SQL引擎進行編譯生成語法樹;如果是過程語句則由PL/SQL引擎來進行編譯生成語法樹,然后將兩部分語法樹結(jié)合生成一棵語法樹.在PostgreSQL系統(tǒng)中,PL/pgSQL引擎只生成語法樹作為中間代碼,然后解釋器根據(jù)語法樹解釋執(zhí)行遇到SQL語句時調(diào)用系統(tǒng)提供的內(nèi)部接口進行執(zhí)行.OceanBase PL/SQL引擎將中間代碼的層次從語法樹提升到物理計劃樹,物理計劃樹在解釋執(zhí)行的時候無需再次通過SQL編譯成物理計劃,提高了存儲過程中SQL語句的執(zhí)行速度.
OceanBase PL/SQL引擎在對PL/SQL代碼編譯后,生成了一種物理計劃樹形式的中間代碼,這種代碼并不能直接執(zhí)行,需要一個解釋器來根據(jù)每個節(jié)點的類型進行相應(yīng)的解釋執(zhí)行.據(jù)此可以將OceanBase PL/SQL引擎分為兩部分:編譯器和解釋器.在OceanBase的PL/SQL引擎架構(gòu)中,詞法分析器、語法分析器、邏輯計劃生成器、物理計劃生成器是屬于編譯器部分,解釋執(zhí)行器屬于解釋器部分.
3.2 PL/SQL編譯器
PL/SQL的編譯過程實際上就是語法樹和物理計劃樹的生成過程.語法樹的生成需要經(jīng)過詞法分析和語法分析兩個步驟,形成抽象語法樹結(jié)構(gòu)[16].
圖5 PL/SQL引擎架構(gòu)Fig.5The architecture of PL/SQL engine
詞法分析程序是從程序源碼中提取分析標識符(常量、數(shù)學(xué)符號、括號、變量名和保留字等),以提供給后續(xù)的語法分析程序使用.語法分析程序的作用是對詞法分析后產(chǎn)生的標識符進行語法分析,判斷其是否符合語法,形成抽象語法樹結(jié)構(gòu).在實踐中,語法分析過程中可能包括多個任務(wù),比如將不同的詞法單元的信息收集到符號表[13]中、進行類型檢查和其他類型的語義分析,以及生成中間代碼.圖6所示為IF節(jié)點的語法樹.
圖6 IF語句語法樹結(jié)構(gòu)Fig.6The syntactic tree of IF statement
OceanBase PL/SQL語句在生成了語法樹后,僅僅只能夠判斷PL/SQL的語法是否正確.所以構(gòu)建語法樹后還需要生成邏輯計劃,而邏輯計劃需要明確SQL語句中所涉及的表、字段和表達式等是否有效.PL/SQL語法樹在生成邏輯計劃和物理計劃的時候采用分治法:對于SQL語句則調(diào)用OceanBase的SQL引擎生成對應(yīng)的邏輯計劃和物理計劃,否則使用PL/SQL引擎生成邏輯計劃和物理計劃.
3.3 PL/SQL解”器
3.3.1 解釋執(zhí)行
OceanBase PL/SQL引擎生成物理計劃樹表示的中間代碼后,并不能直接執(zhí)行.需要一個解釋器對生成的中間代碼進行解釋執(zhí)行.
在傳統(tǒng)數(shù)據(jù)庫的存儲過程的實現(xiàn)方案中,會區(qū)別對待控制流程語句和SQL語句,會將SQL語句交給現(xiàn)有的SQL引擎來執(zhí)行,這樣可以降低實現(xiàn)難度,但同時這會降低存儲過程的執(zhí)行效率.但是在OceanBase中,由于在生成中間代碼的時候已經(jīng)將其中的SQL語句生成為物理執(zhí)行計劃,因此在執(zhí)行SQL語句的時候無需對SQL再次編譯,這樣做的好處是在執(zhí)行WHILE和LOOP過程語句的時候減少SQL編譯時間.
OceanBase PL/SQL解釋器的方案就是遍歷物理計劃樹,如圖7所示,從物理計劃樹的根節(jié)點開始,在遇到SQL語句的物理計劃的時候就直接交由OceanBase Q有的執(zhí)行引擎執(zhí)行該物理計劃,而遇到流程控制語句的時候,根據(jù)節(jié)點類型采用不用的算法進行執(zhí)行,在執(zhí)行過程中如果對變量的操作部分由運行時狀態(tài)完成、如果節(jié)點包含Routine Body的話,則繼續(xù)遞歸地去遍歷訪問這些節(jié)點直到結(jié)束.
圖7 PL/SQL解釋器Fig.7The architecture of PL/SQL executor
3.3.2 運行時狀態(tài)
由于解釋器在解釋執(zhí)行存儲過程中需要獲取聲明變量的類型和值,為此需要為解釋器維護一個運行時狀態(tài)[13].運行時狀態(tài)包括一個唯一標識符和一個符號表:唯一標識符用來表示是否執(zhí)行中有異常;符號表用來存儲變量信息.在OceanBase中系統(tǒng)變量和用戶變量都存儲在Session里,所以在設(shè)計運行時狀態(tài)的時候需要考慮用戶的自定義變量和運行時變量的重名問題.在OceanBase中可以通過給運行時變量名添加前綴的方式來區(qū)別用戶變量.我們的方案是隨機16位字符作為運行時變量名的前綴,這樣可以盡量防止變量名沖突.
PL/SQL中語句塊是可以相互嵌套的,變量可以在不同的語句塊中聲明,但是在相同域內(nèi)不能重名.為了實現(xiàn)對變量的作用域控制,符號表的數(shù)據(jù)結(jié)構(gòu)為一個棧,每一個棧元素是一個Hash表,Hash表里通過變量名來獲取或設(shè)置變量的值.每進入一個新的語句塊就增加一個Hash表入棧,當前層次的語句塊可以訪問棧頂?shù)綏5偷乃性氐臅r候以及當一個語句塊結(jié)束的時候,棧頂元素出棧.如圖8所示.
圖8 運行時狀態(tài)堆棧Fig.8Runtime stack
當定義一個變量時,搜索方向為從當前層開始往棧底搜索.如果在搜索過程中沒有找到同名變量,則可以允許聲明該變量,否則提示變量已聲明.同理在訪問變量和變量賦值的時候也是按照自頂向下的順序進行遍歷查找.
4.1 實驗環(huán)境
實驗中把OceanBase數(shù)據(jù)庫的RootServer、UpdateServer、ChunkServer和MergeServer都部署在同一臺服務(wù)器上,客戶端用來運行測試程序.服務(wù)器的配置如下:CPU E5606 2.13 GHz;132 GB內(nèi)存;2TB/7500轉(zhuǎn)硬盤;CentOS release 6.5系統(tǒng).客戶端的配置為:CPU E5-1603 2.80 GHz;32 GB內(nèi)存;1TB/7500轉(zhuǎn)硬盤;Windows7 64位.
4.2 實驗過程
本測試主要采用客戶機/服務(wù)器模式下,在客戶端使用JDBC調(diào)用存儲過程和完全通過JDBC完成數(shù)據(jù)庫DML語句操作的性能對比.實驗中建立1張TEST表,建表語句為
步驟為,在數(shù)據(jù)庫中建立名為TEST且有1個參數(shù)為int類型的存儲過程.相應(yīng)的創(chuàng)建語句為
CREATE PROCEDURE TEST(X INT)BEGIN WHILE X>0 THEN SET X=X-1; INSERT INTO TEST VALUES(X,1,'TEST',123.456,'TEST');END WHILE;END;.
分別采用JDBC調(diào)用存儲過程和循環(huán)使用JDBC調(diào)用數(shù)據(jù)庫完成多對TEST表的增刪、改查操作,通過參數(shù)控制存儲過程執(zhí)行的循環(huán)次數(shù).
4.3 實驗結(jié)果分析
通過存儲過程(Stored Procedure)和JDBC(Jave Data Base Connectivity)(Java數(shù)據(jù)庫連接),完成對TEST表從1 000-10 000條記錄的插入、更新、刪除、查詢等操作.所用的時間如圖9所示,橫軸表示SQL和存儲過程的執(zhí)行次數(shù),縱軸表示執(zhí)行耗時.
圖9 JDBC與存儲過程SQL性能對比Fig.9SQL performance comparison JDBC with stored procedure
由圖9的數(shù)據(jù)可知,使用存儲過程和JDBC執(zhí)行查詢操作的耗時和執(zhí)行次數(shù)是呈線性增長的,隨著執(zhí)行次數(shù)的增加,執(zhí)行時間也線性增加.而且存儲過程的執(zhí)行時間明顯小于JDBC的執(zhí)行時間,其性能大約是JDBC的3倍.之所以有這樣的結(jié)果,主要是使用存儲過程可以帶來一些優(yōu)勢,例如減少了網(wǎng)絡(luò)上數(shù)據(jù)傳遞的通信量和通信的次數(shù)、提高了事務(wù)執(zhí)行的速度、降低了事務(wù)響應(yīng)應(yīng)時間、減少了SQL語句編譯的時間,以及不用每次都對SQL進行語法解析、邏輯計劃生成和物理計劃生成等.
由于OceanBase發(fā)布的開源版本沒有考慮對存儲過程的支持,影響了其在企業(yè)和機構(gòu)的推廣使用.存儲過程的實現(xiàn)取決于數(shù)據(jù)庫系統(tǒng)的架構(gòu)和實現(xiàn)方案.本文基于OceanBase架構(gòu)的特點及開源數(shù)據(jù)庫存儲過程的實現(xiàn)方案,設(shè)計并實現(xiàn)了OceanBase的存儲過程功能:以增新增語法結(jié)構(gòu)為目標,增加了PL/SQL解析引擎;選擇編譯流程控制語句及SQL語句的實現(xiàn)方案,減少了OceanBase因存儲過程額外編譯SQL語句的時間;在實現(xiàn)過程中解決了面向過程的流程控制語句與面向集合的SQL語句的統(tǒng)一處理;解釋了執(zhí)行存儲過程時的狀態(tài)維護以及運行時變量與用戶變量的區(qū)分等難點.
實驗表明,存儲過程能夠減少客戶端與數(shù)據(jù)庫服務(wù)器的通信量,并通過緩存生成的物理計劃樹提高執(zhí)行性能.但是還有一些不完善的地方,如異常處理機制和重載存儲過程都還未能實現(xiàn),在以后的工作中將對這兩個問題進行研究.
[1]CHANG F,DEAN J,GHEMAWAT S,et al.Bigtable:A distributed storage system for structured data [C]//Proceedings of the 7th Symposium on Operating Systems Design and Implementation(OSDI).2006:205-218.
[2]CORBETT J C,DEAN J,EPSTEIN M,et al.Spanner:Google’s globally distributed database[J].ACM Transactions on Computer Systems,2013,31(3):251-264.
[3]STONEBRAKER M,WEISBERG A.The voltDB main memory DBMS[J].IEEE Data Eng Bull,2013,36(2): 21-27.
[4]OceanBase[EB/OL].[2016-03-01].https://github.com/alibaba/oceanbase/.
[5]HURSCH C J,HURSCH J L.SQL:The Structured Query Language[M].[S.l.]:TAB books Inc,1988.
[6]PL/pgSQL[EB/OL].[2016-03-02].http://www.postgresql.org/docs/8.3/static/plpgsql.html.
[7]彭智勇,彭煜瑋.PostgreSQL數(shù)據(jù)庫內(nèi)核分析[M].北京:機械工業(yè)出版社,2011.
[8]MySQL[EB/OL].[2016-03-02].http://www.mysql.com/.
[9]Stored Procedure[EB/OL].[2016-03-02].http://en.wikipedia.org/wiki/Stored procedure.
[10]URMAN S.Oracle9i PL/SQL Programming[M].北京:機械工業(yè)出版社,2002.
[11]楊傳輝.大規(guī)模分布式存儲系統(tǒng)原理解析和架構(gòu)實戰(zhàn)[M].北京:機械工業(yè)出版社,2013.
[12]LEVINE J,JOHN L.Flex&Bison[M].南京:東南大學(xué)出版社,2010.
[13]AHO A V,SETHI R,ULLMAN J D.Compilers:Principles,techniques,and tools[M].Boston:Addison-Wesley Publishing Company,1986.
[14]陽振坤.OceanBase關(guān)系數(shù)據(jù)庫架構(gòu)[J].華東師范大學(xué)學(xué)報(自然科學(xué)版),2014(5):141-148+163.
[15]高朝瑞.GKD-Base PL/SQL存儲過程和包的研究與實現(xiàn)[D].長沙:國防科學(xué)技術(shù)大學(xué),2004.
[16]汪琦.基于解釋器的數(shù)據(jù)庫存儲過程研究[D].武漢:華中科技大學(xué),2007.
[17]GARCIA-MOLINA H,ULLMAN J D,WIDOM J.數(shù)據(jù)庫系統(tǒng)實現(xiàn)[M].楊冬青,吳愈青,包小源,譯.2版.北京:機械工業(yè)出版社,2010.
[18]朱濤,周敏奇,張召.面向OceanBase的存儲過程實現(xiàn)技術(shù)研究[J].華東師范大學(xué)學(xué)報(自然科學(xué)版),2014(5):281-289.
(責(zé)任編輯:李藝)
Designs and implementations of stored procedure in OceanBase
ZHU Jun,LIU Bai-zhong,YU Sheng-jun,GONG Xue-qing,ZHOU Min-qi
(Institute for Data Science and Engineering,East China Normal University, Shanghai200062,China)
As an extension of standard SQL(Structured Query Language),the stored procedure is an important feature in modern databases.OceanBase is a new type of distributed database system which supports massive data processing,but the open-sourced version OceanBase does not support stored procedure,which influences its adoption in enterprises.In this paper,we analyze the principle of stored procedure and the query processing mechinism of OceanBase in detail.Then,the complete design and implementation of stored procedure which supports PL/SQL are presented.
stored procedure;SQL;OceanBase
TP392
A
10.3969/j.issn.1000-5641.2016.05.016
1000-5641(2016)05-0144-09
2016-05
國家自然科學(xué)基金(61332006);國家863計劃項目(2015AA015307)
祝君,男,碩士研究生,研究方向為分布式數(shù)據(jù)庫.E-mail:zhujunxxxxx@163.com.
周敏奇,男,副教授,碩士生導(dǎo)師,研究方向為內(nèi)存數(shù)據(jù)庫.E-mail:mqzhou@sei.ecnu.edu.cn.