專利名稱:一種將數(shù)據(jù)批量導(dǎo)入數(shù)據(jù)庫(kù)的方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于數(shù)據(jù)庫(kù)技術(shù)領(lǐng)域,具體涉及一種將數(shù)據(jù)批量導(dǎo)入數(shù)據(jù)庫(kù)的方 法及系統(tǒng),尤其適用于將大量數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù)中。
背景技術(shù):
現(xiàn)有技術(shù)中,將數(shù)據(jù)文件中按照特定格式存儲(chǔ)的數(shù)據(jù)批量導(dǎo)入數(shù)據(jù)庫(kù)通
常采用的方法為首先取得數(shù)據(jù)文件中的一條數(shù)據(jù),然后進(jìn)行分析,從分析 結(jié)果中得到數(shù)據(jù)所屬的數(shù)據(jù)表,最后將該分析結(jié)果寫入到數(shù)據(jù)庫(kù)中。也就是 分析一條數(shù)據(jù),往數(shù)據(jù)庫(kù)寫入一條數(shù)據(jù)記錄。這種方法分析數(shù)據(jù)和將數(shù)據(jù)寫 入數(shù)據(jù)庫(kù)不能同時(shí)進(jìn)行,而且一次只能往數(shù)據(jù)庫(kù)中寫入一條數(shù)據(jù)記錄,其缺 陷主要表現(xiàn)如下
(1) 數(shù)據(jù)分析速度慢,只有當(dāng)一條數(shù)據(jù)寫入到數(shù)據(jù)庫(kù)以后才能進(jìn)行下一 條數(shù)據(jù)的分析;
(2) 數(shù)據(jù)寫入速度慢, 一次只能往數(shù)據(jù)庫(kù)中寫入一條數(shù)據(jù),而數(shù)據(jù)寫入 數(shù)據(jù)庫(kù)之前需要和數(shù)據(jù)庫(kù)進(jìn)行連接,當(dāng)數(shù)據(jù)寫入數(shù)據(jù)庫(kù)后,又要斷開(kāi)連接, 數(shù)據(jù)庫(kù)的連接和斷開(kāi)都要花費(fèi)很長(zhǎng)的時(shí)間,如果保持?jǐn)?shù)據(jù)庫(kù)的連接不斷開(kāi), 則數(shù)據(jù)庫(kù)資源將一直被占用,浪費(fèi)了寶貴的數(shù)據(jù)庫(kù)資源;
(3 )不能充分利用分析服務(wù)器的資源,所述分析服務(wù)器為分析數(shù)據(jù)的計(jì) 算機(jī),由于數(shù)據(jù)的分析需要間斷,不能連續(xù)分析數(shù)據(jù),所以分析服務(wù)器的硬 件資源沒(méi)有得到充分的利用;
(4 )不能充分利用數(shù)據(jù)庫(kù)服務(wù)器資源,連接一次數(shù)據(jù)庫(kù)只能寫入一條數(shù) 據(jù),這對(duì)于數(shù)據(jù)連接資源來(lái)說(shuō)是非常浪費(fèi)的;
(5)數(shù)據(jù)庫(kù)服務(wù)器的壓力非常大,導(dǎo)入數(shù)據(jù)的過(guò)程需要頻繁的和數(shù)據(jù)庫(kù) 進(jìn)行交互,由于數(shù)據(jù)庫(kù)的交互過(guò)程會(huì)占用大量的數(shù)據(jù)庫(kù)資源,所以頻繁的交 互給數(shù)據(jù)庫(kù)服務(wù)器帶來(lái)的壓力非常大,數(shù)據(jù)導(dǎo)入非常慢,效率很低。
發(fā)明內(nèi)容
針對(duì)現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明的目的是提供一種效率高的將數(shù)據(jù) 導(dǎo)入數(shù)據(jù)庫(kù)的方法及系統(tǒng)。
為了實(shí)現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案如下
一種將數(shù)據(jù)批量導(dǎo)入數(shù)據(jù)庫(kù)的方法,包括對(duì)數(shù)據(jù)文件中數(shù)據(jù)進(jìn)行分析的步 驟和將分析后的數(shù)據(jù)寫入到數(shù)據(jù)庫(kù)中的步驟,其特征在于分析數(shù)據(jù)文件中數(shù) 據(jù)的過(guò)程和將分析后數(shù)據(jù)寫入數(shù)據(jù)庫(kù)的過(guò)程并行;數(shù)據(jù)經(jīng)過(guò)分析后存入緩存, 直到分析完畢;當(dāng)緩存中的數(shù)據(jù)達(dá)到預(yù)設(shè)數(shù)據(jù)量時(shí),將該數(shù)據(jù)一次性寫入數(shù)據(jù) 庫(kù),并將該數(shù)據(jù)從緩存中刪除;當(dāng)分析完畢后,將緩存中的所有數(shù)據(jù)一次性寫 入數(shù)據(jù)庫(kù)。
如上所述的 一種將數(shù)據(jù)批量導(dǎo)入數(shù)據(jù)庫(kù)的方法,所述數(shù)據(jù)文件中數(shù)據(jù)的類 型相同或者不同。
當(dāng)數(shù)據(jù)文件中數(shù)據(jù)的類型相同時(shí),分析數(shù)據(jù)文件中數(shù)據(jù)的過(guò)程包括以下步
驟
(1 )將數(shù)據(jù)格式配置文件中存儲(chǔ)的數(shù)據(jù)格式信息加載到內(nèi)存,所述數(shù)據(jù) 格式信息與數(shù)據(jù)文件中數(shù)據(jù)的類型對(duì)應(yīng);
(2) 取出數(shù)據(jù)文件中的一條未經(jīng)分析的數(shù)據(jù);
(3) 驗(yàn)證該數(shù)據(jù)是否合法,如果不合法,則給出該數(shù)據(jù)不合法原因的提示 信息后轉(zhuǎn)入步驟(2);
(4) 分析該數(shù)據(jù),根據(jù)該數(shù)據(jù)的類型進(jìn)行相應(yīng)處理;
(5) 將處理后的數(shù)據(jù)存入緩存中的數(shù)據(jù)表中,所述數(shù)據(jù)表在第一次將數(shù)據(jù) 存入緩存時(shí)根據(jù)加載到內(nèi)存中的數(shù)據(jù)格式信息建立;
(6) 重復(fù)步驟(2)至步驟(5),直到分析完數(shù)據(jù)文件中的所有數(shù)據(jù)。 其中,步驟(3)中驗(yàn)證數(shù)據(jù)是否合法的過(guò)程為將從數(shù)據(jù)文件中取出的
數(shù)據(jù)與內(nèi)存中的數(shù)據(jù)格式信息進(jìn)行比較,如果與內(nèi)存中的數(shù)據(jù)格式信息相應(yīng), 則該數(shù)據(jù)為合法數(shù)據(jù),否則為非法數(shù)據(jù)。
當(dāng)數(shù)據(jù)文件中數(shù)據(jù)的類型不同時(shí),分析數(shù)據(jù)文件中數(shù)據(jù)的過(guò)程包括以下步
6驟
① 將數(shù)據(jù)格式配置文件中存儲(chǔ)的數(shù)據(jù)格式信息加載到內(nèi)存, 一種數(shù)據(jù)格 式信息對(duì)應(yīng)數(shù)據(jù)文件中 一 種數(shù)據(jù)類型;
② 取出數(shù)據(jù)文件中的 一條未經(jīng)分析的數(shù)據(jù);
③ 驗(yàn)證該數(shù)據(jù)是否合法,如果不合法,則給出該數(shù)據(jù)不合法原因的提示 信息后轉(zhuǎn)入步驟②;
④ 分析該數(shù)據(jù),根據(jù)該數(shù)據(jù)的類型進(jìn)行相應(yīng)處理;
(D將處理后的數(shù)據(jù)存入緩存中與該數(shù)據(jù)的類型相應(yīng)的數(shù)據(jù)表中,所述數(shù)
據(jù)表在第 一次將該種類型數(shù)據(jù)存入緩存時(shí)根據(jù)加載到內(nèi)存中的與該類型數(shù)據(jù)相
應(yīng)的數(shù)據(jù)格式信息建立;
⑥重復(fù)步驟②至步驟⑤,直到分析完數(shù)據(jù)文件中的所有數(shù)據(jù)。
其中,步驟③中驗(yàn)證數(shù)據(jù)是否合法的過(guò)程為將從數(shù)據(jù)文件中取出的數(shù)據(jù)
與內(nèi)存中的數(shù)據(jù)格式信息進(jìn)行匹配,如果存在與該數(shù)據(jù)相匹配的數(shù)據(jù)格式信
息,則該數(shù)據(jù)為合法數(shù)據(jù),否則為非法數(shù)據(jù)。
如上所述的一種將數(shù)據(jù)批量導(dǎo)入數(shù)據(jù)庫(kù)的方法,其中,加載到內(nèi)存中的數(shù) 據(jù)格式信息,在分析完數(shù)據(jù)文件中所有數(shù)據(jù)后釋放。
如上所述的 一種將數(shù)據(jù)批量導(dǎo)入數(shù)據(jù)庫(kù)的方法,所述當(dāng)緩存中的數(shù)據(jù)達(dá) 到預(yù)設(shè)數(shù)據(jù)量時(shí)將該數(shù)據(jù)一次性寫入數(shù)據(jù)庫(kù)的過(guò)程包括以下步驟
(a) 依次循環(huán)監(jiān)測(cè)緩存中每張數(shù)據(jù)表的數(shù)據(jù)量;
(b) 當(dāng)某一數(shù)據(jù)表的數(shù)據(jù)量達(dá)到預(yù)設(shè)的值時(shí),鎖定緩存,在緩存被鎖定 期間如有數(shù)據(jù)需要緩存,則等待,直到緩存被解鎖;
(c) 將該數(shù)據(jù)表中數(shù)據(jù)寫入內(nèi)存后刪除;
(d) 解除對(duì)緩存的鎖定,同時(shí),建立與數(shù)據(jù)庫(kù)的連接,將內(nèi)存中數(shù)據(jù)一 次性寫入數(shù)據(jù)庫(kù);
(e) 回到步驟(a),從下一個(gè)數(shù)據(jù)表開(kāi)始依次循環(huán)檢測(cè)緩存中的所有數(shù)據(jù)表。
其中,步驟(d)中,與數(shù)據(jù)庫(kù)的連接只建立一次,直到將所有數(shù)據(jù)導(dǎo)入 到數(shù)據(jù)庫(kù)后才釋放連接。
7一種將數(shù)據(jù)批量導(dǎo)入數(shù)據(jù)庫(kù)的系統(tǒng),包括用于對(duì)數(shù)據(jù)文件(14)中數(shù)據(jù)進(jìn)
行分析的數(shù)據(jù)分析模塊(11 ),用于對(duì)分析后數(shù)據(jù)進(jìn)行緩存的緩存器(13),以 及用于將緩存器(13)中數(shù)據(jù)寫入數(shù)據(jù)庫(kù)(15)的數(shù)據(jù)寫入模塊(12)。
本發(fā)明發(fā)所述方法及系統(tǒng),由于數(shù)據(jù)分析不受其他任何條件影響,從數(shù) 據(jù)分析開(kāi)始直到結(jié)束,都以同樣的速度、不間斷的狀態(tài)進(jìn)行,因此數(shù)據(jù)分析 的效率高。同時(shí),由于一次寫入數(shù)據(jù)庫(kù)的數(shù)據(jù)是一塊數(shù)據(jù), 一塊數(shù)據(jù)的數(shù)據(jù) 量可能是幾千或幾萬(wàn)條數(shù)據(jù)記錄,甚至更多, 一塊數(shù)據(jù)寫入數(shù)據(jù)庫(kù)的時(shí)間非 常短暫(毫秒數(shù)量級(jí)),因此將數(shù)據(jù)寫入數(shù)據(jù)庫(kù)的速度塊,效率高。
圖1是具體實(shí)施方式
中所述系統(tǒng)結(jié)構(gòu)圖; 圖2是具體實(shí)施方式
中數(shù)據(jù)分析流程圖; 圖3是具體實(shí)施方式
中數(shù)據(jù)寫入流程圖。
具體實(shí)施例方式
下面結(jié)合具體實(shí)施方式
和附圖對(duì)本發(fā)明進(jìn)行詳細(xì)描述。 如圖l所示,本發(fā)明所述系統(tǒng)包括數(shù)據(jù)分析模塊11、數(shù)據(jù)寫入模塊12和 緩存器13。數(shù)據(jù)分析模塊11用于對(duì)數(shù)據(jù)文件14中的數(shù)據(jù)進(jìn)行分析。緩存器13 用于對(duì)數(shù)據(jù)分析模塊11分析后的數(shù)據(jù)進(jìn)行緩存。數(shù)據(jù)寫入模塊12用于當(dāng)緩存 器13中的數(shù)據(jù)達(dá)到預(yù)設(shè)最大數(shù)據(jù)量時(shí)將該數(shù)據(jù)一次性寫入到數(shù)據(jù)庫(kù)15中。其 中,緩存器13可以為內(nèi)存中的一塊區(qū)域。
如圖2和圖3所示,采用圖1所示系統(tǒng)將婆:據(jù)批量導(dǎo)入數(shù)據(jù)庫(kù)的方法如下 (1 )數(shù)據(jù)分析模塊11分析數(shù)據(jù)文件14中的數(shù)據(jù),如圖2所示。
啟動(dòng)數(shù)據(jù)分析模塊11,首先將數(shù)據(jù)格式配置文件中存儲(chǔ)的數(shù)據(jù)格式信息 加載到內(nèi)存。所述數(shù)據(jù)格式配置文件以XML形式存儲(chǔ)與數(shù)據(jù)文件14中所有 類型數(shù)據(jù)相對(duì)應(yīng)的數(shù)據(jù)格式信息,數(shù)據(jù)文件14中一種類型的數(shù)據(jù)對(duì)應(yīng)數(shù)據(jù)格 式配置文件中的一個(gè)數(shù)據(jù)格式信息。在將數(shù)據(jù)批量導(dǎo)入數(shù)據(jù)庫(kù)15之前需要先 定義數(shù)據(jù)文件14中所有類型的數(shù)據(jù)的數(shù)據(jù)格式信息,并將其保存到一個(gè)數(shù)據(jù)格式配置文件中。
數(shù)據(jù)分析模塊11讀取數(shù)據(jù)文件14中的一條數(shù)據(jù),分析該數(shù)據(jù)是否為合
法的數(shù)據(jù),即將從數(shù)據(jù)文件14中讀取的數(shù)據(jù)與加載在內(nèi)存中的數(shù)據(jù)格式信息
進(jìn)行匹配。如果存在與該數(shù)據(jù)相匹配的數(shù)據(jù)格式信息,則該數(shù)據(jù)為合法數(shù)據(jù), 否則為非法數(shù)據(jù)。當(dāng)出現(xiàn)非法數(shù)據(jù)時(shí),數(shù)據(jù)分析模塊11給出數(shù)據(jù)不合法的原 因的提示信息,如該類型的數(shù)據(jù)格式信息不存在配置文件中或者數(shù)據(jù)格式信
息和數(shù)據(jù)不一致等,然后讀取數(shù)據(jù)文件14中的下一條數(shù)據(jù)繼續(xù)進(jìn)行分析。對(duì)
于合法的數(shù)據(jù),按照該數(shù)據(jù)的特征進(jìn)行相應(yīng)的處理,即根據(jù)該數(shù)據(jù)的數(shù)據(jù)格
式信息對(duì)該數(shù)據(jù)進(jìn)行分割,再對(duì)分割后的數(shù)據(jù)重新進(jìn)行組合,組合成DataRow (數(shù)據(jù)行)形式。DataRow是數(shù)據(jù)分析的最終結(jié)果,它可以直接和數(shù)據(jù)庫(kù)15 的數(shù)據(jù)表中的行進(jìn)行轉(zhuǎn)換。最后,數(shù)據(jù)分析模塊ll再將DataRow按其數(shù)據(jù) 格式信息存入緩存器13中相應(yīng)的數(shù)據(jù)表內(nèi),如果緩存器13中沒(méi)有與該數(shù)據(jù) 格式信息相應(yīng)的數(shù)據(jù)表(即第一次將該種類型的數(shù)據(jù)寫入緩存器),則根據(jù)數(shù) 據(jù)格式配置文件中的數(shù)據(jù)格式信息創(chuàng)建該類型的數(shù)據(jù)表,將數(shù)據(jù)存入到該數(shù) 據(jù)表中。重復(fù)上述過(guò)程,直到分析完數(shù)據(jù)文件14中的所有數(shù)據(jù)。分析結(jié)束后, 釋放內(nèi)存中的數(shù)據(jù)格式信息。
(2)數(shù)據(jù)寫入模塊12將緩存器13中緩存的數(shù)據(jù)寫入數(shù)據(jù)庫(kù)15中,如 圖3所示。
經(jīng)數(shù)據(jù)分析模塊11分析后的數(shù)據(jù)按照該數(shù)據(jù)格式信息分別存儲(chǔ)在緩存 器13的相應(yīng)數(shù)據(jù)表中,同一格式的數(shù)據(jù)保存在一張數(shù)據(jù)表中。數(shù)據(jù)寫入模塊 12中的檢測(cè)線程依次循環(huán)檢測(cè)緩存器13中所有數(shù)據(jù)表是否達(dá)到了預(yù)設(shè)的數(shù) 據(jù)量,如果達(dá)到,則監(jiān)測(cè)線程鎖定緩存器13并將該數(shù)據(jù)表中的數(shù)據(jù)提取出來(lái), 提取完成后從緩存器13中刪除該該數(shù)據(jù)表中的數(shù)據(jù)并釋放對(duì)緩存器13的鎖 定。同時(shí),數(shù)據(jù)寫入模塊12將提取出來(lái)的所有數(shù)據(jù)一次性寫入到數(shù)據(jù)庫(kù)15 中。如果未達(dá)到預(yù)設(shè)數(shù)據(jù)量,則繼續(xù)檢測(cè)數(shù)據(jù)文件14是否分析完成,如果分 析完成,則將緩存器13中所有數(shù)據(jù)以數(shù)據(jù)類型為單位一次性寫入到數(shù)據(jù)庫(kù) 15中。
上述將數(shù)據(jù)寫入數(shù)據(jù)庫(kù)15的過(guò)程與對(duì)數(shù)據(jù)文件14中數(shù)據(jù)進(jìn)行分析的過(guò) 程并行執(zhí)行。在緩存器13被鎖定期間,如果有數(shù)據(jù)需要緩存,則等待,直到
9緩存器13被解鎖后再將該數(shù)據(jù)進(jìn)行緩存。 實(shí)施例1
以將數(shù)據(jù)文件中相同類型的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)15為例。假設(shè)數(shù)據(jù)文件中 的一條凄t據(jù)為RXQ 116.441437 39.831169 24 0 1 8 0 10:19:55.502 0 0。本實(shí)
施例中,數(shù)據(jù)參數(shù)與數(shù)據(jù)參數(shù)之間用空格進(jìn)行分割,也可以采用其他符號(hào)分 割,如逗號(hào)或分號(hào)等。該數(shù)據(jù)的數(shù)據(jù)格式信息如下,為標(biāo)準(zhǔn)的XML節(jié)點(diǎn)
〈Param name="RXQ" DTName="Tescomm—GSM一RXQ"〉 〈column name="oid" DataType="string"></column> <column name="the—connection" DataType="string"></column〉 <column name="the—event" DataType="string"></column〉 <column name="the—device" DataType="string"></column> 〈column name="the—measured" DataType="string"></column> <column name="rx—quality—full" DataType="string"></column> <column name="rx—quality—sub" DataType="string"></column> </Param>
數(shù)據(jù)分析模塊11啟動(dòng)時(shí),加載上述數(shù)據(jù)格式信息到內(nèi)存中,每讀取數(shù)據(jù) 文件14中的一條數(shù)據(jù),便與內(nèi)存中的數(shù)據(jù)格式信息進(jìn)行比較,如匹配則將該 數(shù)據(jù)進(jìn)行相應(yīng)處理后寫入到緩存器13中唯一的數(shù)據(jù)表中,否則給出提示信息 后繼續(xù)分析下一條數(shù)據(jù),直到分析完數(shù)據(jù)文件14中的所有數(shù)據(jù)。
數(shù)據(jù)寫入模塊12中的檢測(cè)線程實(shí)時(shí)檢測(cè)緩存器13的數(shù)據(jù)表中是否達(dá)到 預(yù)設(shè)的數(shù)據(jù)量,如達(dá)到,則檢測(cè)線程鎖定緩存器13并將數(shù)據(jù)表中的數(shù)據(jù)提取 出來(lái),刪除緩存器13中該數(shù)據(jù)表中的數(shù)據(jù),同時(shí)釋放鎖。鎖釋放后,數(shù)據(jù)分 析模塊11可以繼續(xù)寫入數(shù)據(jù)到緩存器13的數(shù)據(jù)表中。提取出來(lái)的數(shù)據(jù)寫入 到內(nèi)存中,數(shù)據(jù)寫入模塊12建立與數(shù)據(jù)庫(kù)15的連接,將移出的數(shù)據(jù)一次性 地批量寫入到數(shù)據(jù)庫(kù)15中。寫入完成后,監(jiān)測(cè)線程又開(kāi)始實(shí)時(shí)監(jiān)測(cè)緩存器 13的數(shù)據(jù)表中的數(shù)據(jù)量。重復(fù)以上過(guò)程,直到數(shù)據(jù)分析完成。數(shù)據(jù)分析完成 后,再將數(shù)據(jù)表中所有數(shù)據(jù)寫入到數(shù)據(jù)庫(kù)15。
10實(shí)施例2
以將數(shù)據(jù)文件中不同類型的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)15為例。假設(shè)數(shù)據(jù)文件中 存在如下兩種類型的數(shù)據(jù)
類型1: RXQ 116.441437 39.831169 24 0 1 8 0 10:19:55.502 0 0 類型2: MSP 116.441437 39.831169 24 0 1 8 0 10:19:55.502 0
這兩種類型數(shù)據(jù)的數(shù)據(jù)格式信息如下,為標(biāo)準(zhǔn)的XML節(jié)點(diǎn)
與類型1相應(yīng)的數(shù)據(jù)格式信息1
〈Param name="RXQ" DTName="Tescomm—GSM—RXQ"> 〈column name="oid" DataType="string"></column> <column name="the—connection" DataType="string"></column> 〈column name="the_event" DataType="string"></column〉 <column name="the—device" DataType="string"></column> <column name="the—measured" DataType="string"></column> <column name="rx—quality—full" DataType="string"></column> <column name="rx—quality—sub" DataType="string"></column> </Param>
與類型2相應(yīng)的數(shù)據(jù)格式信息2
〈Param name="MSP" DTName="Tescomm—GSMMSP"〉 <column name="oid" DataType="string"></column> <column name="the—connection" DataType="string"></column> <column name="the—event" DataType="string"></column> <column name="the—device" DataType="string"></column> 〈column name="the—measured" DataType="string"></column> <column name="ms_power—level" DataType="string"></column> </Param>
與實(shí)施例1的不同之處在于
讀取數(shù)據(jù)文件中的一條數(shù)據(jù)后,需要與內(nèi)存中的所有數(shù)據(jù)格式配置信息 進(jìn)行匹配,直到找到相應(yīng)的數(shù)據(jù)格式信息,或者和所有的數(shù)據(jù)格式信息都進(jìn)
ii行了配置后而沒(méi)有找到相應(yīng)的數(shù)據(jù)格式信息,說(shuō)明該數(shù)據(jù)不合法。本實(shí)施例
中,假設(shè)讀取的數(shù)據(jù)為"MSP 116.441437 39.831169 24 0 1 8 0 10:19:55.502 0",
先與數(shù)據(jù)格式信息1進(jìn)行匹配,不相應(yīng),再與數(shù)據(jù)格式信息2進(jìn)行匹配,相 應(yīng),說(shuō)明該數(shù)據(jù)合法。
當(dāng)將分析后的數(shù)據(jù)寫入緩存器13時(shí),由于數(shù)據(jù)文件中存在多種類型的數(shù) 據(jù),所以緩存器13中存在多個(gè)與數(shù)據(jù)類型相應(yīng)的數(shù)據(jù)表,因此需要首先找到 與數(shù)據(jù)相匹配的數(shù)據(jù)表,再將數(shù)據(jù)寫入。如果沒(méi)有找到,則根據(jù)與該數(shù)據(jù)類 型相應(yīng)的數(shù)據(jù)格式配置信息建立數(shù)據(jù)表,在將數(shù)據(jù)存入該數(shù)據(jù)表中。本實(shí)施 例中,存在兩種不同的類型的數(shù)據(jù),因此緩存器13中存在兩張與這兩種數(shù)據(jù) 類型相應(yīng)的數(shù)據(jù)表, 一種為數(shù)據(jù)格式信息1的數(shù)據(jù)表, 一種為數(shù)據(jù)格式信息 2的數(shù)據(jù)表。數(shù)據(jù)"MSP 116.441437 39.831169 24 0 1 8 0 10:19:55.502 0"經(jīng) 分析后,寫入到數(shù)據(jù)格式信息2的數(shù)據(jù)表中。如果第一次寫入這種類型的數(shù) 據(jù),則緩存器13中還不存在這種數(shù)據(jù)格式信息的數(shù)據(jù)表,需要根據(jù)數(shù)據(jù)格式 信息2先建立這種數(shù)據(jù)表,再將數(shù)據(jù)寫入。
將緩存器13中緩存的數(shù)據(jù)寫入數(shù)據(jù)庫(kù)15過(guò)程中,監(jiān)測(cè)線程依次循環(huán)檢 測(cè)緩存器13中的所有數(shù)據(jù)表。如果一張數(shù)據(jù)表的數(shù)據(jù)量達(dá)到預(yù)設(shè)的值,則鎖 定緩存器13。移出該數(shù)據(jù)表中數(shù)據(jù),然后解鎖。數(shù)據(jù)分析模塊11可以繼續(xù) 往緩存器13中的任意表中寫入數(shù)據(jù)。同時(shí)數(shù)據(jù)寫入模塊12建立與數(shù)據(jù)庫(kù)15 的連接,將移出的數(shù)據(jù)一次性寫入到數(shù)據(jù)庫(kù)15中。寫入完成后,監(jiān)測(cè)線程從 該數(shù)據(jù)表后的數(shù)據(jù)表開(kāi)始再循環(huán)監(jiān)測(cè)緩存器13中的所有數(shù)據(jù)表。重復(fù)上述過(guò) 程,直到數(shù)據(jù)分析完畢。數(shù)據(jù)分析完成后,再將數(shù)據(jù)表中所有數(shù)據(jù)寫入到數(shù) 據(jù)庫(kù)15。上述建立的數(shù)據(jù)庫(kù)連接直到將所有數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)15后才釋放 該連接。
本發(fā)明所述方法及系統(tǒng),能夠充分利用數(shù)據(jù)庫(kù)服務(wù)器的資源,數(shù)據(jù)庫(kù)的 連接建立一次,并一直處于打開(kāi)狀態(tài),直到數(shù)據(jù)導(dǎo)入完畢。而且實(shí)時(shí)監(jiān)測(cè)緩 存器中的數(shù)據(jù)變化情況,當(dāng)某類數(shù)據(jù)量達(dá)到預(yù)設(shè)的值時(shí)立即從緩存中移出并 批量寫入到數(shù)據(jù)庫(kù)。數(shù)據(jù)從緩存器中移出是瞬間的,而批量寫入數(shù)據(jù)也是瞬 間的。因此,無(wú)需向現(xiàn)有技術(shù)那樣,寫入一條數(shù)據(jù)便與數(shù)據(jù)庫(kù)建立一次連接。 由于與數(shù)據(jù)庫(kù)建立連接的時(shí)間遠(yuǎn)遠(yuǎn)大于寫入一條數(shù)據(jù)的時(shí)間,例如,假設(shè)建立連接的時(shí)間是0.0001秒,而寫入一條數(shù)據(jù)的時(shí)間為0.000001秒,如果向 數(shù)據(jù)庫(kù)中寫入10000條數(shù)據(jù),現(xiàn)有技術(shù)中一條一條寫入的總時(shí)間為 0.0001x10000+0.000001x10000=1.01秒,而采用本發(fā)明所述方法及系統(tǒng)寫入 的總時(shí)間為0.0001+0.000001x10000 = 0.0101秒,大大提高了數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù)
的效率。此外,由于數(shù)據(jù)分析不受其他任何條件影響,效率非常高,緩存器 中的數(shù)據(jù)增長(zhǎng)很快,因此數(shù)據(jù)寫入數(shù)據(jù)庫(kù)的操作也是時(shí)時(shí)在進(jìn)行,達(dá)到了數(shù) 據(jù)分析的速度與數(shù)據(jù)寫入數(shù)據(jù)庫(kù)的速度相當(dāng),整個(gè)導(dǎo)入的過(guò)程時(shí)間很短。數(shù) 據(jù)導(dǎo)入成功后將在第一時(shí)間內(nèi)釋放數(shù)據(jù)庫(kù)資源,使數(shù)據(jù)庫(kù)服務(wù)器的壓力減小 到了最低。
發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要 求及其同等技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
權(quán)利要求
1.一種將數(shù)據(jù)批量導(dǎo)入數(shù)據(jù)庫(kù)的方法,包括對(duì)數(shù)據(jù)文件中數(shù)據(jù)進(jìn)行分析的步驟和將分析后的數(shù)據(jù)寫入到數(shù)據(jù)庫(kù)中的步驟,其特征在于分析數(shù)據(jù)文件中數(shù)據(jù)的過(guò)程和將分析后數(shù)據(jù)寫入數(shù)據(jù)庫(kù)的過(guò)程并行;數(shù)據(jù)經(jīng)過(guò)分析后存入緩存,直到分析完畢;當(dāng)緩存中的數(shù)據(jù)達(dá)到預(yù)設(shè)數(shù)據(jù)量時(shí),將該數(shù)據(jù)一次性寫入數(shù)據(jù)庫(kù),并將該數(shù)據(jù)從緩存中刪除;當(dāng)分析完畢后,將緩存中的所有數(shù)據(jù)一次性寫入數(shù)據(jù)庫(kù)。
2. 如權(quán)利要求1所述的一種將數(shù)據(jù)批量導(dǎo)入數(shù)據(jù)庫(kù)的方法,其特征在于 所述數(shù)據(jù)文件中數(shù)據(jù)的類型相同或者不同。
3. 如權(quán)利要求2所述的一種將數(shù)據(jù)批量導(dǎo)入數(shù)據(jù)庫(kù)的方法,其特征在于 當(dāng)數(shù)據(jù)文件中數(shù)據(jù)的類型相同時(shí),分析數(shù)據(jù)文件中數(shù)據(jù)的過(guò)程包括以下步驟(1 )將數(shù)據(jù)格式配置文件中存儲(chǔ)的數(shù)據(jù)格式信息加載到內(nèi)存,所述數(shù)據(jù) 格式信息與數(shù)據(jù)文件中數(shù)據(jù)的類型對(duì)應(yīng);(2) 取出數(shù)據(jù)文件中的一條未經(jīng)分析的數(shù)據(jù);(3) 驗(yàn)證該數(shù)據(jù)是否合法,如果不合法,則給出該數(shù)據(jù)不合法原因的提示 信息后轉(zhuǎn)入步驟(2);(4) 分析該數(shù)據(jù),根據(jù)該數(shù)據(jù)的類型進(jìn)行相應(yīng)處理;(5) 將處理后的數(shù)據(jù)存入緩存中的數(shù)據(jù)表中,所述數(shù)據(jù)表在第一次將數(shù)據(jù) 存入緩存時(shí)根據(jù)加載到內(nèi)存中的數(shù)據(jù)格式信息建立;(6) 重復(fù)步驟(2)至步驟(5),直到分析完數(shù)據(jù)文件中的所有tt據(jù)。
4. 如權(quán)利要求3所述的一種將數(shù)據(jù)批量導(dǎo)入數(shù)據(jù)庫(kù)的方法,其特征在于 步驟(3)中驗(yàn)證數(shù)據(jù)是否合法的過(guò)程為將從數(shù)據(jù)文件中取出的數(shù)據(jù)與內(nèi)存 中的數(shù)據(jù)格式信息進(jìn)行比較,如果與內(nèi)存中的數(shù)據(jù)格式信息相應(yīng),則該數(shù)據(jù) 為合法數(shù)據(jù),否則為非法數(shù)據(jù)。
5. 如權(quán)利要求2所述的一種將數(shù)據(jù)批量導(dǎo)入數(shù)據(jù)庫(kù)的方法,其特征在于當(dāng)數(shù)據(jù)文件中數(shù)據(jù)的類型不同時(shí),分析數(shù)據(jù)文件中數(shù)據(jù)的過(guò)程包括以下步驟① 將數(shù)據(jù)格式配置文件中存儲(chǔ)的數(shù)據(jù)格式信息加載到內(nèi)存, 一種數(shù)據(jù)格式信息對(duì)應(yīng)數(shù)據(jù)文件中 一種數(shù)據(jù)類型;② 取出數(shù)據(jù)文件中的 一條未經(jīng)分析的數(shù)據(jù);③ 驗(yàn)證該數(shù)據(jù)是否合法,如果不合法,則給出該數(shù)據(jù)不合法原因的提示 信息后轉(zhuǎn)入步驟②;④ 分析該數(shù)據(jù),根據(jù)該數(shù)據(jù)的類型進(jìn)行相應(yīng)處理;⑤ 將處理后的數(shù)據(jù)存入緩存中與該數(shù)據(jù)的類型相應(yīng)的數(shù)據(jù)表中,所述數(shù) 據(jù)表在第一次將該種類型數(shù)據(jù)存入緩存時(shí)根據(jù)加載到內(nèi)存中的與該類型數(shù)據(jù)相 應(yīng)的數(shù)據(jù)格式信息建立;⑥ 重復(fù)步驟②至步驟⑤,直到分析完數(shù)據(jù)文件中的所有數(shù)據(jù)。
6. 如權(quán)利要求5所述的一種將數(shù)據(jù)批量導(dǎo)入數(shù)據(jù)庫(kù)的方法,其特征在于 步驟③中驗(yàn)證數(shù)據(jù)是否合法的過(guò)程為將從數(shù)據(jù)文件中取出的數(shù)據(jù)與內(nèi)存中的 數(shù)據(jù)格式信息進(jìn)行匹配,如果存在與該數(shù)據(jù)相匹配的數(shù)據(jù)格式信息,則該數(shù) 據(jù)為合法數(shù)據(jù),否則為非法數(shù)據(jù)。
7. 如權(quán)利要求3至6之一所述的一種將數(shù)據(jù)批量導(dǎo)入數(shù)據(jù)庫(kù)的方法,其特 征在于加載到內(nèi)存中的數(shù)據(jù)格式信息,在分析完數(shù)據(jù)文件中所有數(shù)據(jù)后釋放。
8. 如權(quán)利要求5或6所述的一種將數(shù)據(jù)批量導(dǎo)入數(shù)據(jù)庫(kù)的方法,其特征 在于,所述當(dāng)緩存中的數(shù)據(jù)達(dá)到預(yù)設(shè)數(shù)據(jù)量時(shí)將該數(shù)據(jù) 一 次性寫入數(shù)據(jù)庫(kù)的 過(guò)程包括以下步驟(a) 依次循環(huán)監(jiān)測(cè)緩存中每張數(shù)據(jù)表的數(shù)據(jù)量;(b) 當(dāng)某一數(shù)據(jù)表的數(shù)據(jù)量達(dá)到預(yù)設(shè)的值時(shí),鎖定緩存,在緩存被鎖定 期間如有數(shù)據(jù)需要緩存,則等待,直到緩存被解鎖;(c) 將該數(shù)據(jù)表中數(shù)據(jù)寫入內(nèi)存后刪除;(d) 解除對(duì)緩存的鎖定,同時(shí),建立與數(shù)據(jù)庫(kù)的連接,將內(nèi)存中數(shù)據(jù)一 次性寫入數(shù)據(jù)庫(kù);(e) 回到步驟(a),從下一個(gè)數(shù)據(jù)表開(kāi)始依次循環(huán)檢測(cè)緩存中的所有數(shù)據(jù)表。
9. 如權(quán)利要求8所述的一種將數(shù)據(jù)批量導(dǎo)入數(shù)據(jù)庫(kù)的方法,其特征在于 步驟(d)中,與數(shù)據(jù)庫(kù)的連接只建立一次,直到將所有數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)后 才釋》丈連才姿。
10. —種將數(shù)據(jù)批量導(dǎo)入數(shù)據(jù)庫(kù)的系統(tǒng),其特征在于包括用于對(duì)數(shù)據(jù)文 件(14)中數(shù)據(jù)進(jìn)行分析的數(shù)據(jù)分析模塊(11),用于對(duì)分析后數(shù)據(jù)進(jìn)行緩存的 緩存器(13),以及用于將緩存器(13)中數(shù)據(jù)寫入數(shù)據(jù)庫(kù)(15)的數(shù)據(jù)寫入模 塊(12)。
全文摘要
本發(fā)明公開(kāi)了一種將數(shù)據(jù)批量導(dǎo)入數(shù)據(jù)庫(kù)的方法及系統(tǒng),屬于數(shù)據(jù)庫(kù)技術(shù)領(lǐng)域。現(xiàn)有技術(shù)中,將數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù)的方式為分析一條數(shù)據(jù)記錄,寫入一條數(shù)據(jù)記錄,效率較低。本發(fā)明所述方法及系統(tǒng),分析數(shù)據(jù)文件中數(shù)據(jù)的過(guò)程和將分析后數(shù)據(jù)寫入數(shù)據(jù)庫(kù)的過(guò)程并行;數(shù)據(jù)經(jīng)過(guò)分析后存入緩存,直到分析完畢;當(dāng)緩存中的數(shù)據(jù)達(dá)到預(yù)設(shè)數(shù)據(jù)量時(shí),將該數(shù)據(jù)一次性寫入數(shù)據(jù)庫(kù),并將該數(shù)據(jù)從緩存中刪除;當(dāng)分析完畢后,將緩存中的所有數(shù)據(jù)一次性寫入數(shù)據(jù)庫(kù)。采用本發(fā)明所述方法及系統(tǒng),數(shù)據(jù)分析和寫入的速度快,尤其適用于將大量數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)中。
文檔編號(hào)G06F17/30GK101515291SQ20091008092
公開(kāi)日2009年8月26日 申請(qǐng)日期2009年3月26日 優(yōu)先權(quán)日2009年3月26日
發(fā)明者鄧振林 申請(qǐng)人:北京泰合佳通信息技術(shù)有限公司