亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種數(shù)據(jù)綁定批量入庫(kù)方法和裝置的制作方法

文檔序號(hào):6378295閱讀:407來(lái)源:國(guó)知局
專利名稱:一種數(shù)據(jù)綁定批量入庫(kù)方法和裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及數(shù)據(jù)庫(kù)領(lǐng)域,具體是一種數(shù)據(jù)綁定入庫(kù)方法和裝置。
背景技術(shù)
oracle數(shù)據(jù)入庫(kù)流程如下DBA在oracle服務(wù)端創(chuàng)建表,在客戶端通過(guò)一定的方法將數(shù)據(jù)入庫(kù)到服務(wù)端表中。對(duì)于Iinux下客戶端常用的方法有兩種。方法一 occi, occi是一個(gè)提供了 c++應(yīng)用程序使用oracle數(shù)據(jù)庫(kù)中的數(shù)據(jù)的API接口,能夠使c++編程最大限度利用oracle數(shù)據(jù)庫(kù)操作,包括sql語(yǔ)句處理和對(duì)象處
理。·方法二 sqlloader, sqlloader是oracle的數(shù)據(jù)加載工具,通常用來(lái)將大量外部數(shù)據(jù)文件遷移到oracle數(shù)據(jù)庫(kù)中。對(duì)我們來(lái)說(shuō),如果待入庫(kù)的數(shù)據(jù)就幾十條,可直接到數(shù)據(jù)庫(kù)里去一條條添加;但對(duì)幾千上萬(wàn)甚至更多的數(shù)據(jù)來(lái)說(shuō),就不可能一條條添加了,所以sqlloader是必要的。occi入庫(kù)流程如下程序開(kāi)始一> 創(chuàng)建環(huán)境變量一> 創(chuàng)建數(shù)據(jù)庫(kù)連接對(duì)象一> 創(chuàng)建Statement類對(duì)象一> 執(zhí)行某張表的SQL語(yǔ)句處理數(shù)據(jù)一> 釋放Statement對(duì)象一> 斷開(kāi)數(shù)據(jù)庫(kù)連接一> 釋放環(huán)境變量。每張表都需要上述流程才能正確將數(shù)據(jù)入庫(kù)。當(dāng)多個(gè)表都需要入庫(kù)時(shí),如果每個(gè)表都按照流程設(shè)計(jì),那么代碼重用率就很低,而且也不便于后期添加刪除維護(hù),因此可以設(shè)計(jì)一套統(tǒng)一的occi調(diào)用接口,上層調(diào)用者無(wú)心關(guān)心底層實(shí)現(xiàn)細(xì)節(jié),只需簡(jiǎn)單調(diào)用接口就可以將數(shù)據(jù)正確的入庫(kù)。sqlloader入庫(kù)流程如下構(gòu)建某張表ctl文件一> 準(zhǔn)備待入庫(kù)數(shù)據(jù)文件一> 執(zhí)行sqlldr命令將數(shù)據(jù)源導(dǎo)入數(shù)據(jù)庫(kù)。同樣的該流程只反應(yīng)了一張表的入庫(kù)流程,當(dāng)多個(gè)表都需要入庫(kù)時(shí),能否統(tǒng)一 ctl文件生成規(guī)則,統(tǒng)一 sqlloader命令調(diào)度規(guī)則。都對(duì)我們提出更高的要求。從上面分析不難看出,目前提供入庫(kù)的方式都已成熟,但高效合理運(yùn)用這些技術(shù),充分發(fā)揮其技術(shù)特點(diǎn)的方法卻不太多,或者差強(qiáng)人意。

發(fā)明內(nèi)容
本發(fā)明的目的是同時(shí)提供兩種數(shù)據(jù)入庫(kù)方法(occi入庫(kù)和sqlloader入庫(kù)),提供一種通用的數(shù)據(jù)綁定接口方法,實(shí)現(xiàn)occi入庫(kù)全過(guò)程和sqlloader ctl文件生成、數(shù)據(jù)文件生成、數(shù)據(jù)入庫(kù)全過(guò)程。同時(shí)當(dāng)occi入庫(kù)失敗時(shí),啟用sqlloader入庫(kù)。為了實(shí)現(xiàn)上述目的本發(fā)明采用的技術(shù)方案是,一種數(shù)據(jù)綁定入庫(kù)方法,包括如下步驟A、底層提供對(duì)外全局初始化函數(shù),occi初始化函數(shù)、sqlloader初始化函數(shù)和宏定義接口模板;其中宏定義接口模板,包括對(duì)于OCCi入庫(kù)的消息結(jié)構(gòu)與表之間綁定操作函數(shù)模板和消息結(jié)構(gòu)字段與SQL語(yǔ)句綁定函數(shù)模板,對(duì)于sqlloader入庫(kù)的消息結(jié)構(gòu)與表ctl文件之間的綁定函數(shù)模板和消息結(jié)構(gòu)字段與寫文件的綁定函數(shù)模板。
B、上層在配置文件中配置入庫(kù)方式,即occi或者sqlloader,只能選其一種入庫(kù)方法。C、上層調(diào)用步驟A全局初始化函數(shù),底層讀取步驟B配置文件,若是OCCi入庫(kù),則建立入庫(kù)主機(jī)到數(shù)據(jù)庫(kù)主機(jī)的連接池。
D、上層調(diào)用occi初始化函數(shù)或者sqlloader初始化函數(shù);并在頭文件中調(diào)用步驟A中的宏定義接口模板,建立消息結(jié)構(gòu)與表的綁定函數(shù),消息結(jié)構(gòu)字段與SQL語(yǔ)句的綁定函數(shù),消息結(jié)構(gòu)與表ctl文件之間的綁定函數(shù),消息結(jié)構(gòu)字段與寫文件的綁定函數(shù)。E、當(dāng)?shù)讓邮盏讲襟ED的occi初始化函數(shù)或sqlloader初始化函數(shù),讀取步驟B配置文件,對(duì)于occi根據(jù)c++類模板,調(diào)用步驟D對(duì)應(yīng)消息結(jié)構(gòu)與表的綁定函數(shù),使用綁定函數(shù)獲取的表字段初始化入庫(kù)SQL語(yǔ)句,然后初始化該表occi數(shù)據(jù)隊(duì)列,開(kāi)啟取隊(duì)列線程,提供對(duì)外該表的插入數(shù)據(jù)函數(shù)模板,生成該表occi入庫(kù)實(shí)例,并將該對(duì)象插入occi全局管理實(shí)例中;對(duì)于sqlloader根據(jù)c++類模板,調(diào)用步驟D對(duì)應(yīng)消息結(jié)構(gòu)字段與寫文件的綁定函數(shù)初始化寫文件,調(diào)用步驟D消息結(jié)構(gòu)與表ctl文件的綁定函數(shù)生成該表的ctl控制文件,提供該表寫文件方式入隊(duì)列函數(shù)模板,開(kāi)啟取隊(duì)列線程,生成該表寫文件實(shí)例,并將該對(duì)象插入寫文件全局管理實(shí)例中。F、當(dāng)有某張表數(shù)據(jù)需要入庫(kù)時(shí),上層調(diào)用步驟E中occi初始化時(shí)底層提供的對(duì)外該表的插入數(shù)據(jù)函數(shù)模板。G、底層根據(jù)C++類模板功能,調(diào)用步驟E中對(duì)應(yīng)表的插入數(shù)據(jù)函數(shù)模板,首先根據(jù)OCCi全局管理實(shí)例判斷該表是否使用OCCi入庫(kù),如果是則將數(shù)據(jù)入步驟E該表OCCi數(shù)據(jù)隊(duì)列;如果不是則判斷步驟B中配置文件是否支持sqlloader入庫(kù),如果支持則調(diào)用步驟E該表寫文件方式入隊(duì)列函數(shù)模板,將數(shù)據(jù)入寫文件隊(duì)列。H、底層各表的occi取隊(duì)列線程各自取自己隊(duì)列,若能從隊(duì)列取得數(shù)據(jù),則調(diào)用步驟D消息結(jié)構(gòu)字段與SQL語(yǔ)句的綁定函數(shù),將待入庫(kù)數(shù)據(jù)同數(shù)據(jù)庫(kù)表字段一一對(duì)應(yīng)綁定,判斷是否待入庫(kù)條數(shù)達(dá)到閥值,若達(dá)到則使用occi批量入庫(kù),當(dāng)入庫(kù)失敗時(shí),為了避免數(shù)據(jù)丟失,調(diào)用步驟E該表寫文件方式入隊(duì)列函數(shù),將入庫(kù)失敗數(shù)據(jù)入寫文件隊(duì)列。I、底層各表的寫文件取隊(duì)列線程各自讀自己隊(duì)列,若能從隊(duì)列取得數(shù)據(jù),則調(diào)用步驟D消息結(jié)構(gòu)字段與寫文件的綁定函數(shù),將待入庫(kù)數(shù)據(jù)同數(shù)據(jù)庫(kù)表字段一一對(duì)應(yīng)綁定,判斷是否待入庫(kù)條數(shù)大小達(dá)到寫文件緩存區(qū)大小,若達(dá)到則將緩存區(qū)中數(shù)據(jù)一并寫入文件,若文件大小達(dá)到閥值,則文件生成完畢,將文件移動(dòng)到待入庫(kù)目錄;切換文件,后續(xù)數(shù)據(jù)寫入切換后的文件。J、外部shell腳本判斷是否有待入庫(kù)文件生成,若有則調(diào)用Iinux命令sqlldr,并使用步驟E對(duì)應(yīng)表ctl控制文件將該文件入庫(kù)。一種數(shù)據(jù)綁定批量入庫(kù)裝置包括A、用于底層提供對(duì)外全局初始化函數(shù)的裝置,包括occi初始化函數(shù)模塊、sqlloader初始化函數(shù)模塊和宏定義接口模板;其中宏定義接口模板,包括對(duì)于occi入庫(kù)的消息結(jié)構(gòu)與表之間綁定操作函數(shù)模板和消息結(jié)構(gòu)字段與SQL語(yǔ)句綁定函數(shù)模板,對(duì)于sqlloader入庫(kù)的消息結(jié)構(gòu)與表ctl文件之間的綁定函數(shù)模板和消息結(jié)構(gòu)字段與寫文件的綁定函數(shù)模板。B、用于上層在配置文件中配置入庫(kù)方式的裝置,所述配置文件包括occi配置文件或者sqlloader配置文件;上層調(diào)用A裝置中的全局初始化函數(shù),底層讀取所述occi配置文件或者sqlloader配置文件。C、綁定函數(shù)模塊通過(guò)上層調(diào)用occi初始化函數(shù)模塊或者sqlloader初始化函數(shù)模塊,并在頭文件中調(diào)用A裝置中的宏定義接口模板建立;其中所述綁定函數(shù)模塊包括消息結(jié)構(gòu)與表的綁定函數(shù)模塊,消息結(jié)構(gòu)字段與SQL語(yǔ)句的綁定函數(shù)模塊,消息結(jié)構(gòu)與表ctl文件之間的綁定函數(shù)模塊,消息結(jié)構(gòu)字段與寫文件的綁定函數(shù)模塊。D、插入數(shù)據(jù)函數(shù)模板裝置用于調(diào)用所述綁定函數(shù)模塊生成occi入庫(kù)實(shí)例或生成sqlloader的寫文件實(shí)例,并將occi入庫(kù)實(shí)例插入occi全局管理實(shí)例中,將sqlloader的寫文件實(shí)例插入寫文件全局管理實(shí)例中。E、數(shù)據(jù)入庫(kù)裝置用于底層調(diào)用插入數(shù)據(jù)函數(shù)模板裝置,判斷入庫(kù)方式,若是OCCi入庫(kù)則調(diào)用綁定函數(shù)模塊中的消息結(jié)構(gòu)字段與SQL語(yǔ)句的綁定函數(shù)模塊,將待入庫(kù)數(shù)據(jù)同數(shù)據(jù)庫(kù)表字段一一對(duì)應(yīng)綁定,入庫(kù);若是sqlloader入庫(kù)則調(diào)用綁定函數(shù)模塊中的消
息結(jié)構(gòu)字段與寫文件的綁定函數(shù)模塊,將待入庫(kù)數(shù)據(jù)同數(shù)據(jù)庫(kù)表字段一一對(duì)應(yīng)綁定,入庫(kù)。本發(fā)明技術(shù)方案所獲得有益效果有I、靈活入庫(kù)方法選擇和保證入庫(kù)數(shù)據(jù)不丟失,當(dāng)入庫(kù)量小時(shí),可選擇occi入庫(kù),當(dāng)入庫(kù)量大時(shí)可選擇sqlloader入庫(kù);當(dāng)occi入庫(kù)失敗時(shí),可將入庫(kù)失敗數(shù)據(jù)寫文件,轉(zhuǎn)為sqlloader入庫(kù),保證occi方式入庫(kù)數(shù)據(jù)不丟失,當(dāng)sqlloader入庫(kù)失敗時(shí),使用外部shell腳本監(jiān)控sqlloader入庫(kù)是否失敗,若失敗可再次重入失敗文件,保證sqlloader方式入庫(kù)數(shù)據(jù)不丟失。2、入庫(kù)速度提升,sqlloader批量數(shù)據(jù)入庫(kù)能夠最大量的提升入庫(kù)速度。3、上層使用簡(jiǎn)單,只需使用綁定宏接口,初始化函數(shù),和插入數(shù)據(jù)函數(shù),即可完成數(shù)據(jù)入庫(kù)操作。4、代碼高效利用,提供各個(gè)綁定接口模板,最大化減少代碼量,提供代碼重用率。


圖I本發(fā)明實(shí)施使用流程圖;圖2為本發(fā)明實(shí)施數(shù)據(jù)結(jié)構(gòu)圖;圖3為本發(fā)明實(shí)施occi初始化流程圖;圖4為本發(fā)明實(shí)施sqlloader初始化流程圖。圖5為本發(fā)明數(shù)據(jù)綁定流程圖。
具體實(shí)施例方式下面根據(jù)附圖對(duì)本發(fā)明做進(jìn)一步詳細(xì)說(shuō)明。圖I是本發(fā)明上層使用數(shù)據(jù)綁定入庫(kù)的基本流程圖。對(duì)上層開(kāi)發(fā)來(lái)說(shuō)圖I對(duì)應(yīng)兩種入庫(kù)方式,occi入庫(kù),數(shù)據(jù)寫文件sqlloader入庫(kù)。以下分別就這兩種模式具體實(shí)施做說(shuō)明。圖I中occi入庫(kù)方式的初始化,采用occi入庫(kù)需要以下幾個(gè)條件數(shù)據(jù)庫(kù)的鏈接實(shí)例、批量綁定數(shù)據(jù)的方式、入庫(kù)語(yǔ)句。數(shù)據(jù)庫(kù)的鏈路實(shí)例需上層開(kāi)發(fā)寫入配置文件,批量綁定數(shù)據(jù)和入庫(kù)語(yǔ)句由底層實(shí)現(xiàn)。使用OCCi直接入庫(kù)的功能,必須完成上述內(nèi)容的初始化和設(shè)置。因此,需完成下述的數(shù)據(jù)綁定、初始化調(diào)用。為了提高代碼重用率,我們采用函數(shù)模板實(shí)現(xiàn)通用的初始化,函數(shù)模板定義如下template〈class MsgType〉void Init O {};MsgType -消息類數(shù)據(jù)結(jié)構(gòu)(一般一張表會(huì)定義一個(gè)消息類)。圖3反映了完整occi入庫(kù)方式的初始化流程具體實(shí)現(xiàn)細(xì)節(jié),底層首先創(chuàng)建了表的入庫(kù)實(shí)例對(duì)象,然后對(duì)該入庫(kù)實(shí)例對(duì)象初始化,接著初始化插入消息結(jié)構(gòu)函數(shù)模板,最后將該入庫(kù)實(shí)例對(duì)象掛載到統(tǒng)一的管理類下。圖3右邊部分為入庫(kù)實(shí)例初始化過(guò)程。此過(guò)程融合了 occi入庫(kù)所必備的初始化步驟,同時(shí)采用模板和宏定義相結(jié)合,代碼邏輯簡(jiǎn)單,實(shí)現(xiàn)功能全面,下面詳細(xì)介紹。
I)綁定宏的定義I.I宏BEGIN_BIND_TABLE功能消息結(jié)構(gòu)與表之間綁定操作函數(shù)模板,初始化sql語(yǔ)句時(shí)使用。參數(shù)應(yīng)用程序定義的消息類、數(shù)據(jù)庫(kù)中創(chuàng)建的表名要求應(yīng)用程序定義的消息類和數(shù)據(jù)庫(kù)中表定義的字段需一一對(duì)應(yīng)。I. 2 宏BEGIN_BIND_MSG_VALUE功能綁定入庫(kù)字段信息,當(dāng)有數(shù)據(jù)需要插入時(shí),將應(yīng)用程序消息類字段值sql語(yǔ)句話,具體使用OCCi的set調(diào)用SetxxxO方法將數(shù)據(jù)寫入對(duì)應(yīng)表字段。參數(shù)數(shù)據(jù)庫(kù)中創(chuàng)建的表名。2)根據(jù)數(shù)據(jù)庫(kù)表初始化入庫(kù)語(yǔ)句利用綁定表操作BEGIN_BIND_TABLE中定義的各個(gè)表字段,實(shí)現(xiàn)sql語(yǔ)句話。3)掛載具體入庫(kù)動(dòng)作的數(shù)據(jù)插入函數(shù)模板insert,注意這里的insert函數(shù)模板實(shí)現(xiàn)具體的表字段值綁定和數(shù)據(jù)的入庫(kù)操作,非圖I中的insert插入數(shù)據(jù)函數(shù)。4)啟動(dòng)入庫(kù)線程,在入庫(kù)線程中根據(jù)入庫(kù)門限閥值,提交數(shù)據(jù)。當(dāng)occi初始化完成后,就可以調(diào)用圖I的insert函數(shù)進(jìn)行數(shù)據(jù)入庫(kù)操作?;氐綀D1,我們來(lái)看另一種入庫(kù)方法,使用sqlloader入庫(kù),sqlloader寫文件初始化,寫文件方式的sqlloader入庫(kù)需要的條件ctl文件(每張表一個(gè)ctl文件)、操作系統(tǒng)已經(jīng)安裝sqlldr命令、需入庫(kù)的數(shù)據(jù)文件、調(diào)用sqlldr命令腳本。因此ctl文件生成和入庫(kù)文件是sqlloader入庫(kù)的前提。圖4清晰的反映了 sqlloader寫文件初始化流程,其核心是ctl文件生成,和數(shù)據(jù)文件生成方法。ctl文件使用宏的模板實(shí)現(xiàn),如下宏DECLAREMSGCTL功能自動(dòng)生成對(duì)應(yīng)表的ctl文件參數(shù)應(yīng)用程序使用的消息類、數(shù)據(jù)定義的表名要求應(yīng)用程序定義的消息類和數(shù)據(jù)庫(kù)中表定義的字段需一一對(duì)應(yīng)。宏DECLAREMSGTAB功能對(duì)應(yīng)表數(shù)據(jù)寫文件函數(shù)模板定義參數(shù)應(yīng)用程序使用的消息類當(dāng)ctl文件和待入庫(kù)數(shù)據(jù)寫文件模板都實(shí)現(xiàn)時(shí),此時(shí)就可以調(diào)用圖I的sqlloader寫文件初始化,后臺(tái)自動(dòng)生成對(duì)應(yīng)表的ctl文件,對(duì)應(yīng)表的寫文件函數(shù);然后調(diào)用insert將數(shù)據(jù)入庫(kù),當(dāng)數(shù)據(jù)文件完全生成時(shí),后臺(tái)進(jìn)程調(diào)用相應(yīng)的入庫(kù)腳本,將數(shù)據(jù)入庫(kù)。本發(fā)明的入庫(kù)方法同時(shí)支持occi入庫(kù)和sqlloader入庫(kù),下面介紹同時(shí)支持兩種入庫(kù)方式時(shí)的應(yīng)用程序操作實(shí)例。環(huán)境應(yīng)用程序使用的消息類省略消息類的定義(CAddressingMsg),數(shù)據(jù)庫(kù)表名CS_ADDRESSINGLOGI、應(yīng)用程序初始化I)表字段綁定occi方式綁定;sqlloader寫文件方式綁定;2)初始化調(diào)用全局初始化函數(shù);occi 初始化;sqlloader 初始化;2、應(yīng)用程序數(shù)據(jù)入庫(kù)應(yīng)用程序填充CAddressingMsg消息的各個(gè)字段,調(diào)用Insert(CAddressingMsg)便可將數(shù)據(jù)入庫(kù),自此數(shù)據(jù)的初始化和入庫(kù)操作對(duì)于應(yīng)用程序全部完成。上述的實(shí)施步驟重點(diǎn)關(guān)注了流程上的邏輯結(jié)構(gòu),圖2從數(shù)據(jù)流向上展現(xiàn)了實(shí)施方法。從圖2可以發(fā)現(xiàn)當(dāng)上層調(diào)用插入數(shù)據(jù)時(shí),底層開(kāi)辟空間接收數(shù)據(jù),并將數(shù)據(jù)壓入不同表的隊(duì)列,避免隊(duì)列堆積和上層插入數(shù)據(jù)調(diào)用的阻塞;同時(shí)從圖2也可以看到,occi入庫(kù)的每個(gè)表對(duì)應(yīng)一個(gè)入庫(kù)線程,提高了 occi入庫(kù)的并發(fā)度,充分發(fā)揮occi連接池的特點(diǎn);如果使用寫文件入庫(kù),不同的表調(diào)用不同的InsertFile函數(shù),并且數(shù)據(jù)入不同的寫文件隊(duì)列,每張表對(duì)應(yīng)一個(gè)寫文件線程,每個(gè)線程各自負(fù)責(zé)將數(shù)據(jù)寫文件,最大化了利用了磁盤10性能。從圖2還可以發(fā)現(xiàn)當(dāng)入庫(kù)occi入庫(kù)失敗時(shí),會(huì)將數(shù)據(jù)寫文件,這樣防止單一的occi入庫(kù)失敗導(dǎo)致數(shù)據(jù)的丟失。圖5數(shù)據(jù)綁定的流程圖中,定義各個(gè)綁定接口函數(shù),調(diào)用對(duì)于occi入庫(kù)的消息結(jié)構(gòu)與表之間綁定操作函數(shù)模板和消息結(jié)構(gòu)字段與SQL語(yǔ)句綁定函數(shù)模板,對(duì)于sqlloader入庫(kù)的消息結(jié)構(gòu)與表ctl文件之間的綁定函數(shù)模板和消息結(jié)構(gòu)字段與寫文件的綁定函數(shù)模板,建立消息結(jié)構(gòu)與表的綁定函數(shù),消息結(jié)構(gòu)字段與SQL語(yǔ)句的綁定函數(shù),消息結(jié)構(gòu)與表ctl文件之間的綁定函數(shù),消息結(jié)構(gòu)字段與寫文件的綁定函數(shù)。調(diào)用消息結(jié)構(gòu)與表綁定函數(shù)初始化入庫(kù),對(duì)于occi根據(jù)C++類模板,調(diào)用上述對(duì)應(yīng)消息結(jié)構(gòu)與表的綁定函數(shù),使用綁定函數(shù)獲取的表字段初始化入庫(kù)SQL語(yǔ)句,然后初始化該表occi數(shù)據(jù)隊(duì)列,開(kāi)啟取隊(duì)列線程,提供對(duì)外該表的數(shù)據(jù)插入模板函數(shù),生成該表occi入庫(kù)實(shí)例,并將該對(duì)象插入occi全局管理實(shí)例中;對(duì)于sqlIoaer根據(jù)c++類模板,調(diào)用上述對(duì)應(yīng)消息結(jié)構(gòu)字段與寫文件的綁定函數(shù)初始化寫文件,消息結(jié)構(gòu)與表ctl文件的綁定函數(shù)生成該表的ctl控制文件,提供該表寫文件方式入隊(duì)列函數(shù)模板,開(kāi)啟取隊(duì)列線程,生成該表寫文件實(shí)例,并將該對(duì)象插入寫文件全局管理實(shí)例中。調(diào)用消息結(jié)構(gòu)字段與表綁定函數(shù)用于插入數(shù)據(jù)或?qū)懳募?br> 權(quán)利要求
1.一種數(shù)據(jù)綁定批量入庫(kù)方法,包括如下步驟 A、底層提供對(duì)外全局初始化函數(shù),occi初始化函數(shù)、sqlloader初始化函數(shù)和宏定義接口模板;其中宏定義接口模板,包括對(duì)于occi入庫(kù)的消息結(jié)構(gòu)與表之間綁定操作函數(shù)模板和消息結(jié)構(gòu)字段與SQL語(yǔ)句綁定函數(shù)模板,對(duì)于sqlloader入庫(kù)的消息結(jié)構(gòu)與表ctl文件之間的綁定函數(shù)模板和消息結(jié)構(gòu)字段與寫文件的綁定函數(shù)模板; B、上層在配置文件中配置入庫(kù)方式,即occi或者sqlloader,只能選其一種入庫(kù)方法; C、上層調(diào)用步驟A全局初始化函數(shù),底層讀取步驟B配置文件,若是occi入庫(kù),則建立入庫(kù)主機(jī)到數(shù)據(jù)庫(kù)主機(jī)的連接池; D、上層調(diào)用occi初始化函數(shù)或者sqlloader初始化函數(shù);并在頭文件中調(diào)用步驟A中的宏定義接口模板,建立消息結(jié)構(gòu)與表的綁定函數(shù),消息結(jié)構(gòu)字段與SQL語(yǔ)句的綁定函數(shù),消息結(jié)構(gòu)與表ctl文件之間的綁定函數(shù),消息結(jié)構(gòu)字段與寫文件的綁定函數(shù); E、當(dāng)?shù)讓邮盏讲襟ED的occi初始化函數(shù)或sqlloader初始化函數(shù),讀取步驟B配置文件,對(duì)于occi根據(jù)c++類模板,調(diào)用步驟D對(duì)應(yīng)消息結(jié)構(gòu)與表的綁定函數(shù),使用綁定函數(shù)獲取的表字段初始化入庫(kù)SQL語(yǔ)句,然后初始化該表occi數(shù)據(jù)隊(duì)列,開(kāi)啟取隊(duì)列線程,提供對(duì)外該表的插入數(shù)據(jù)函數(shù)模板,生成該表occi入庫(kù)實(shí)例,并將該對(duì)象插入occi全局管理實(shí)例中;對(duì)于sqlloader根據(jù)c++類模板,調(diào)用步驟D對(duì)應(yīng)消息結(jié)構(gòu)字段與寫文件的綁定函數(shù)初始化寫文件,調(diào)用步驟D消息結(jié)構(gòu)與表ctl文件的綁定函數(shù)生成該表的ctl控制文件,提供該表寫文件方式入隊(duì)列函數(shù)模板,開(kāi)啟取隊(duì)列線程,生成該表寫文件實(shí)例,并將該對(duì)象插入寫文件全局管理實(shí)例中; F、當(dāng)有某張表數(shù)據(jù)需要入庫(kù)時(shí),上層調(diào)用步驟E中occi初始化時(shí)底層提供的對(duì)外該表的插入數(shù)據(jù)函數(shù)模板; G、底層根據(jù)c++類模板功能,調(diào)用步驟E中對(duì)應(yīng)表的插入數(shù)據(jù)函數(shù)模板,首先根據(jù)occi全局管理實(shí)例判斷該表是否使用occi入庫(kù),如果是則將數(shù)據(jù)入步驟E該表occi數(shù)據(jù)隊(duì)列;如果不是則判斷步驟B中配置文件是否支持sqlloader入庫(kù),如果支持則調(diào)用步驟E該表寫文件方式入隊(duì)列函數(shù)模板,將數(shù)據(jù)入寫文件隊(duì)列; H、底層各表的occi取隊(duì)列線程各自取自己隊(duì)列,若能從隊(duì)列取得數(shù)據(jù),則調(diào)用步驟D消息結(jié)構(gòu)字段與SQL語(yǔ)句的綁定函數(shù),將待入庫(kù)數(shù)據(jù)同數(shù)據(jù)庫(kù)表字段一一對(duì)應(yīng)綁定,判斷是否待入庫(kù)條數(shù)達(dá)到閥值,若達(dá)到則使用occi批量入庫(kù),當(dāng)入庫(kù)失敗時(shí),為了避免數(shù)據(jù)丟失,調(diào)用步驟E該表寫文件方式入隊(duì)列函數(shù),將入庫(kù)失敗數(shù)據(jù)入寫文件隊(duì)列; I、底層各表的寫文件取隊(duì)列線程各自讀自己隊(duì)列,若能從隊(duì)列取得數(shù)據(jù),則調(diào)用步驟D消息結(jié)構(gòu)字段與寫文件的綁定函數(shù),將待入庫(kù)數(shù)據(jù)同數(shù)據(jù)庫(kù)表字段一一對(duì)應(yīng)綁定,判斷是否待入庫(kù)條數(shù)大小達(dá)到寫文件緩存區(qū)大小,若達(dá)到則將緩存區(qū)中數(shù)據(jù)一并寫入文件,若文件大小達(dá)到閥值,則文件生成完畢,將文件移動(dòng)到待入庫(kù)目錄;切換文件,后續(xù)數(shù)據(jù)寫入切換后的文件; J、外部shell腳本判斷是否有待入庫(kù)文件生成,若有則調(diào)用Iinux命令sqlldr,并使用步驟E對(duì)應(yīng)表ctl控制文件將該文件入庫(kù)。
2.一種數(shù)據(jù)綁定批量入庫(kù)裝置,其特征在于包括 A、用于底層提供對(duì)外全局初始化函數(shù)的裝置,包括occi初始化函數(shù)模塊、sqlloader初始化函數(shù)模塊和宏定義接口模板;其中宏定義接口模板,包括對(duì)于occi入庫(kù)的消息結(jié)構(gòu)與表之間綁定操作函數(shù)模板和消息結(jié)構(gòu)字段與SQL語(yǔ)句綁定函數(shù)模板,對(duì)于sqlloader入庫(kù)的消息結(jié)構(gòu)與表ctl文件之間的綁定函數(shù)模板和消息結(jié)構(gòu)字段與寫文件的綁定函數(shù)模板; B、用于上層在配置文件中配置入庫(kù)方式的裝置,所述配置文件包括occi配置文件或者sqlloader配置文件;上層調(diào)用A裝置中的全局初始化函數(shù),底層讀取所述occi配置文件或者sqlloader配置文件; C、綁定函數(shù)模塊通過(guò)上層調(diào)用occi初始化函數(shù)模塊或者sqlloader初始化函數(shù)模塊,并在頭文件中調(diào)用A裝置中的宏定義接口模板建立;其中所述綁定函數(shù)模塊包括消息結(jié)構(gòu)與表的綁定函數(shù)模塊,消息結(jié)構(gòu)字段與SQL語(yǔ)句的綁定函數(shù)模塊,消息結(jié)構(gòu)與表ctl文件之間的綁定函數(shù)模塊,消息結(jié)構(gòu)字段與寫文件的綁定函數(shù)模塊; D、插入數(shù)據(jù)函數(shù)模板裝置用于調(diào)用所述綁定函數(shù)模塊生成occi入庫(kù)實(shí)例或生成sqlloader的寫文件實(shí)例,并將occi入庫(kù)實(shí)例插入occi全局管理實(shí)例中,將sqlloader的寫文件實(shí)例插入寫文件全局管理實(shí)例中; E、數(shù)據(jù)入庫(kù)裝置用于底層調(diào)用插入數(shù)據(jù)函數(shù)模板裝置,判斷入庫(kù)方式,若是occi入庫(kù)則調(diào)用綁定函數(shù)模塊中的消息結(jié)構(gòu)字段與SQL語(yǔ)句的綁定函數(shù)模塊,將待入庫(kù)數(shù)據(jù)同數(shù)據(jù)庫(kù)表字段一一對(duì)應(yīng)綁定,入庫(kù);若是sqlloader入庫(kù)則調(diào)用綁定函數(shù)模塊中的消息結(jié)構(gòu)字段與寫文件的綁定函數(shù)模塊,將待入庫(kù)數(shù)據(jù)同數(shù)據(jù)庫(kù)表字段一一對(duì)應(yīng)綁定,入庫(kù)。
全文摘要
本發(fā)明涉及數(shù)據(jù)庫(kù)領(lǐng)域,具體是一種數(shù)據(jù)綁定批量入庫(kù)方法和裝置。實(shí)現(xiàn)本發(fā)明的方法包括如下步驟通過(guò)配置文件選擇入庫(kù)方式;提供綁定接口綁定入庫(kù)數(shù)據(jù);調(diào)用數(shù)據(jù)插入接口將入庫(kù)數(shù)據(jù)傳遞到底層,底層調(diào)用綁定接口綁定數(shù)據(jù)并入庫(kù)。本靈活入庫(kù)方法可保證入庫(kù)數(shù)據(jù)不丟失,提升入庫(kù)速度,提供各個(gè)綁定接口模板。
文檔編號(hào)G06F17/30GK102929951SQ201210377418
公開(kāi)日2013年2月13日 申請(qǐng)日期2012年10月8日 優(yōu)先權(quán)日2012年10月8日
發(fā)明者葉春生, 車新奕, 雷果, 程濤木, 冉夢(mèng)旭, 尹開(kāi)中 申請(qǐng)人:深圳市博瑞得科技有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1