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