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

一種數(shù)據(jù)庫(kù)的寫(xiě)方法和裝置與流程

文檔序號(hào):11918817閱讀:151來(lái)源:國(guó)知局
一種數(shù)據(jù)庫(kù)的寫(xiě)方法和裝置與流程

本發(fā)明涉及通信的技術(shù)領(lǐng)域,特別是涉及一種數(shù)據(jù)庫(kù)的寫(xiě)方法和一種數(shù)據(jù)庫(kù)的寫(xiě)裝置。



背景技術(shù):

隨著通信科技的發(fā)展,諸如手機(jī)、手表等智能終端在人們的工作、學(xué)習(xí)、日常交流等各方面的使用率也越來(lái)越高。

在智能終端上運(yùn)行的許多應(yīng)用會(huì)使用數(shù)據(jù)庫(kù)(如SQLite)來(lái)存儲(chǔ)用戶(hù)操作的數(shù)據(jù),尤其是社交應(yīng)用,如即時(shí)通信工具、短信應(yīng)用等等,需要在后臺(tái)線(xiàn)程中寫(xiě)一個(gè)數(shù)據(jù)庫(kù),而同時(shí)需要在主線(xiàn)程在UI(User Interface,用戶(hù)界面)顯示數(shù)據(jù),那么主線(xiàn)程會(huì)生成子線(xiàn)程,該子線(xiàn)程中讀取同一數(shù)據(jù)庫(kù)。

盡管讀操作的對(duì)象和寫(xiě)操作的對(duì)象不是同一張表,但是,諸如SQLite等數(shù)據(jù)庫(kù)所使用的鎖為文件鎖,對(duì)于同一數(shù)據(jù)庫(kù),在寫(xiě)操作的同時(shí)不允許執(zhí)行其他讀操作或者寫(xiě)操作。

在許多情況下,某個(gè)操作觸發(fā)一線(xiàn)程進(jìn)行寫(xiě)操作,同時(shí),另一操作觸發(fā)另一線(xiàn)程進(jìn)行讀操作。

若該線(xiàn)程較長(zhǎng)時(shí)間處于寫(xiě)操作,則另一線(xiàn)程較長(zhǎng)時(shí)間處于等待的狀態(tài),由于讀取時(shí)間較長(zhǎng),容易影響其他操作的效率,可能造成界面長(zhǎng)時(shí)間處于等待等問(wèn)題。

例如,對(duì)于短信應(yīng)用,當(dāng)有未讀短信時(shí),每次進(jìn)入短信列表界面,就會(huì)把數(shù)據(jù)庫(kù)中關(guān)于未讀短信是否已經(jīng)被看到的字段標(biāo)為已看(寫(xiě)操作),但是,用戶(hù)還希望能夠立即在列表中查看所有短信(讀操作),如果字段的標(biāo)記的時(shí)間過(guò)長(zhǎng),導(dǎo)致長(zhǎng)時(shí)間未能讀取短信,就會(huì)造成短信列表界面遲遲不能加載數(shù)據(jù),影響用戶(hù)體驗(yàn)。

目前有些方案將寫(xiě)操作與讀操作并發(fā),但是,這些方案往往會(huì)增加死鎖概率以及對(duì)內(nèi)存的消耗,死鎖后會(huì)造成應(yīng)用停止運(yùn)行,為了解決死鎖問(wèn)題,往往還會(huì)增加更加復(fù)雜的邏輯控制,復(fù)雜度高,另外,對(duì)于一些本身內(nèi)存比較小的智能終端,增大內(nèi)存的消耗往往會(huì)拖慢整個(gè)操作系統(tǒng)的操作流暢程度,造成操作系統(tǒng)的操作卡頓。



技術(shù)實(shí)現(xiàn)要素:

鑒于上述問(wèn)題,為了解決上述數(shù)據(jù)庫(kù)的寫(xiě)操作時(shí)間過(guò)長(zhǎng)導(dǎo)致讀操作執(zhí)行時(shí)間過(guò)長(zhǎng)、讀寫(xiě)并行增加死鎖概率以及對(duì)內(nèi)存的消耗的問(wèn)題,本發(fā)明實(shí)施例提出了一種數(shù)據(jù)庫(kù)的寫(xiě)方法和相應(yīng)的一種數(shù)據(jù)庫(kù)的寫(xiě)裝置。

依據(jù)本發(fā)明的一個(gè)方面,提供了一種數(shù)據(jù)庫(kù)的寫(xiě)方法,包括:

獲取待寫(xiě)入數(shù)據(jù)庫(kù)的文件;

將所述文件通過(guò)至少兩次寫(xiě)操作寫(xiě)入所述數(shù)據(jù)庫(kù),以在相鄰兩次寫(xiě)操作之間的時(shí)間內(nèi),允許對(duì)所述數(shù)據(jù)庫(kù)進(jìn)行讀操作。

可選地,所述將所述文件通過(guò)至少兩次寫(xiě)操作寫(xiě)入所述數(shù)據(jù)庫(kù)的步驟包括:

向所述數(shù)據(jù)庫(kù)申請(qǐng)文件鎖;

判斷是否將所述文件全部寫(xiě)入所述數(shù)據(jù)庫(kù);

若是,則結(jié)束將所述文件寫(xiě)入所述數(shù)據(jù)庫(kù);

若否,則將所述文件中未寫(xiě)入所述數(shù)據(jù)庫(kù)的部分?jǐn)?shù)據(jù)寫(xiě)入所述數(shù)據(jù)庫(kù);

釋放所述文件鎖;

休眠一段時(shí)間,返回執(zhí)行所述向所述數(shù)據(jù)庫(kù)申請(qǐng)文件鎖的步驟。

可選地,所述判斷是否將所述文件全部寫(xiě)入所述數(shù)據(jù)庫(kù)的步驟包括:

讀取所述文件已寫(xiě)入所述數(shù)據(jù)庫(kù)的數(shù)據(jù)的已寫(xiě)行數(shù);

判斷所述已寫(xiě)行數(shù)是否小于所述文件的總行數(shù);

若是,則確定所述文件未全部寫(xiě)入所述數(shù)據(jù)庫(kù);

若否,則確定所述文件已全部寫(xiě)入所述數(shù)據(jù)庫(kù)。

可選地,所述讀取所述文件已寫(xiě)入所述數(shù)據(jù)庫(kù)的數(shù)據(jù)的已寫(xiě)行數(shù)的步驟包括:

在指定的存儲(chǔ)區(qū)域判斷是否存儲(chǔ)有用于記錄已寫(xiě)行數(shù)的變量;

若是,則提取所述變量的值,獲得已寫(xiě)行數(shù);

若否,則在所述指定的存儲(chǔ)區(qū)域設(shè)置所述變量,并設(shè)置初始值。

可選地,所述將所述文件中未寫(xiě)入所述數(shù)據(jù)庫(kù)的部分?jǐn)?shù)據(jù)寫(xiě)入所述數(shù)據(jù)庫(kù)的步驟包括:

將所述文件中、位于所述已寫(xiě)行數(shù)后一行的數(shù)據(jù)寫(xiě)入所述數(shù)據(jù)庫(kù);

更新所述已寫(xiě)行數(shù);

判斷本次寫(xiě)操作寫(xiě)入所述數(shù)據(jù)庫(kù)的數(shù)據(jù)的行數(shù)是否到達(dá)行數(shù)閾值;

若是,則結(jié)束本次寫(xiě)操作;

若否,則返回執(zhí)行所述將所述文件中、位于所述已寫(xiě)行數(shù)后一行的數(shù)據(jù)寫(xiě)入所述數(shù)據(jù)庫(kù)的步驟。

根據(jù)本發(fā)明的另一方面,提供了一種數(shù)據(jù)庫(kù)的寫(xiě)裝置,其特征在于,包括:

文件獲取模塊,用于獲取待寫(xiě)入數(shù)據(jù)庫(kù)的文件;

多次寫(xiě)操作模塊,用于將所述文件通過(guò)至少兩次寫(xiě)操作寫(xiě)入所述數(shù)據(jù)庫(kù),以在相鄰兩次寫(xiě)操作之間的時(shí)間內(nèi),允許對(duì)所述數(shù)據(jù)庫(kù)進(jìn)行讀操作。

可選地,所述多次寫(xiě)操作模塊包括:

文件鎖申請(qǐng)子模塊,用于向所述數(shù)據(jù)庫(kù)申請(qǐng)文件鎖;

文件完成寫(xiě)子模塊,用于判斷是否將所述文件全部寫(xiě)入所述數(shù)據(jù)庫(kù);若是,則調(diào)用文件寫(xiě)結(jié)束子模塊,若否,則調(diào)用繼續(xù)寫(xiě)子模塊;

文件寫(xiě)結(jié)束子模塊,用于結(jié)束將所述文件寫(xiě)入所述數(shù)據(jù)庫(kù);

文件繼續(xù)寫(xiě)子模塊,用于將所述文件中未寫(xiě)入所述數(shù)據(jù)庫(kù)的部分?jǐn)?shù)據(jù)寫(xiě)入所述數(shù)據(jù)庫(kù);

文件鎖釋放子模塊,用于釋放所述文件鎖;

休眠子模塊,用于休眠一段時(shí)間,返回調(diào)用所述文件鎖申請(qǐng)子模塊。

可選地,所述文件完成寫(xiě)子模塊包括:

已寫(xiě)行數(shù)讀取單元,用于讀取所述文件已寫(xiě)入所述數(shù)據(jù)庫(kù)的數(shù)據(jù)的已寫(xiě)行數(shù);

總行數(shù)判斷單元,用于判斷所述已寫(xiě)行數(shù)是否小于所述文件的總行數(shù);若是,則調(diào)用第一確定單元,若否,則調(diào)用第二確定單元;

第一確定單元,用于確定所述文件未全部寫(xiě)入所述數(shù)據(jù)庫(kù);

第二確定單元,用于確定所述文件已全部寫(xiě)入所述數(shù)據(jù)庫(kù)。

可選地,所述已寫(xiě)行數(shù)讀取單元包括:

變量判斷子單元,用于在指定的存儲(chǔ)區(qū)域判斷是否存儲(chǔ)有用于記錄已寫(xiě)行數(shù)的變量;若是,則調(diào)用變量值提取子單元,若否,則調(diào)用變量設(shè)置子單元;

變量值提取子單元,用于提取所述變量的值,獲得已寫(xiě)行數(shù);

變量設(shè)置子單元,用于在所述指定的存儲(chǔ)區(qū)域設(shè)置所述變量,并設(shè)置初始值。

可選地,所述文件繼續(xù)寫(xiě)子模塊包括:

行數(shù)據(jù)寫(xiě)單元,用于將所述文件中、位于所述已寫(xiě)行數(shù)后一行的數(shù)據(jù)寫(xiě)入所述數(shù)據(jù)庫(kù);

已寫(xiě)行數(shù)更新單元,用于更新所述已寫(xiě)行數(shù);

行數(shù)閾值判斷單元,用于判斷本次寫(xiě)操作寫(xiě)入所述數(shù)據(jù)庫(kù)的數(shù)據(jù)的行數(shù)是否到達(dá)行數(shù)閾值;若是,則調(diào)用本次寫(xiě)結(jié)束單元,若否,則返回調(diào)用行數(shù)據(jù)寫(xiě)單元;

本次寫(xiě)結(jié)束單元,用于結(jié)束本次寫(xiě)操作。

本發(fā)明實(shí)施例包括以下優(yōu)點(diǎn):

本發(fā)明實(shí)施例將寫(xiě)操作看作是對(duì)于要進(jìn)行寫(xiě)操作的文件,一部分一部分地寫(xiě)入數(shù)據(jù)庫(kù),每一部分的數(shù)據(jù)是相對(duì)獨(dú)立的,將文件通過(guò)至少兩次寫(xiě)操作寫(xiě)入數(shù)據(jù)庫(kù),以在寫(xiě)入部分?jǐn)?shù)據(jù)之后,可以臨時(shí)釋放文件鎖,以供其它線(xiàn)程對(duì)數(shù)據(jù)庫(kù)進(jìn)行讀操作,及時(shí)地讀取到數(shù)據(jù)并進(jìn)行顯示等處理,實(shí)現(xiàn)了數(shù)據(jù)庫(kù)資源的時(shí)分復(fù)用,由于讀操作的時(shí)間一般為毫秒級(jí),很短暫,保證了整體寫(xiě)操作的正常執(zhí)行,并不會(huì)明顯增加整體寫(xiě)操作的時(shí)間,一方面,單次寫(xiě)操作的時(shí)間相對(duì)整體寫(xiě)操作的時(shí)間要少,減少了讀操作等待的時(shí)間,提高操作的效率,減少界面長(zhǎng)時(shí)間處于等待等問(wèn)題;另一方面,由于寫(xiě)操作與讀操作是串聯(lián)執(zhí)行,減少了因?qū)懖僮髋c讀操作并發(fā)而引起的死鎖概率以及對(duì)內(nèi)存的消耗。

附圖說(shuō)明

圖1是本發(fā)明的一種數(shù)據(jù)庫(kù)的寫(xiě)方法實(shí)施例的步驟流程圖;

圖2A是目前的一種數(shù)據(jù)庫(kù)操作流程圖;

圖2B是圖2A的數(shù)據(jù)庫(kù)操作流程圖的等效流程圖;

圖3A是本發(fā)明實(shí)施例的一種數(shù)據(jù)庫(kù)操作流程圖;

圖3B是圖3A的數(shù)據(jù)庫(kù)操作流程圖的等效流程圖;

圖4是本發(fā)明的另一種數(shù)據(jù)庫(kù)的寫(xiě)方法實(shí)施例的步驟流程圖;

圖5是本發(fā)明的一種數(shù)據(jù)庫(kù)的寫(xiě)裝置實(shí)施例的結(jié)構(gòu)框圖。

具體實(shí)施方式

為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí)施方式對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說(shuō)明。

參照?qǐng)D1,示出了本發(fā)明的一種數(shù)據(jù)庫(kù)的寫(xiě)方法實(shí)施例的步驟流程圖,具體可以包括如下步驟:

步驟101,獲取待寫(xiě)入數(shù)據(jù)庫(kù)的文件。

步驟102,將所述文件通過(guò)至少兩次寫(xiě)操作寫(xiě)入所述數(shù)據(jù)庫(kù),以在相鄰兩次寫(xiě)操作之間的時(shí)間內(nèi),允許對(duì)所述數(shù)據(jù)庫(kù)進(jìn)行讀操作。

在具體實(shí)現(xiàn)中,本發(fā)明實(shí)施例可以應(yīng)用于各種智能終端中,例如,電腦、手機(jī)、PDA(Personal Digital Assistant,個(gè)人數(shù)字助理)、膝上型計(jì)算機(jī)、掌上電腦等等,本發(fā)明實(shí)施例對(duì)此不加以限制。

該智能終端可以支持Windows、Android(安卓)、IOS、WindowsPhone等操作系統(tǒng),通??梢栽诓僮飨到y(tǒng)中配置數(shù)據(jù)庫(kù),如SQLite。

該數(shù)據(jù)庫(kù)在進(jìn)行寫(xiě)操作、讀操作時(shí),配置文件鎖,禁止同時(shí)進(jìn)行其他寫(xiě)操作、讀操作。

如圖2A所示,在目前的數(shù)據(jù)庫(kù)操作機(jī)制中,一方面,寫(xiě)線(xiàn)程在開(kāi)始時(shí),向該數(shù)據(jù)庫(kù)加寫(xiě)文件鎖(即寫(xiě)操作時(shí)的文件鎖),此時(shí)的時(shí)間為開(kāi)始寫(xiě)時(shí)間點(diǎn),如果加寫(xiě)文件鎖成功,則執(zhí)行寫(xiě)操作,將全部數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)中,如果寫(xiě)操作完成,釋放寫(xiě)文件鎖,此時(shí)的時(shí)間為結(jié)束寫(xiě)時(shí)間點(diǎn)。

另一方面,讀進(jìn)程在開(kāi)始時(shí),向數(shù)據(jù)庫(kù)申請(qǐng)讀操作,此時(shí)的時(shí)間為申請(qǐng)讀時(shí)間點(diǎn),如果申請(qǐng)讀時(shí)間點(diǎn)晚于開(kāi)始寫(xiě)時(shí)間點(diǎn)、早于結(jié)束寫(xiě)時(shí)間點(diǎn),即數(shù)據(jù)庫(kù)處于加寫(xiě)文件鎖的情況下,進(jìn)行等待,待寫(xiě)進(jìn)程釋放寫(xiě)文件鎖之后,向數(shù)據(jù)庫(kù)加讀文件鎖(即讀操作的文件鎖),此時(shí)的時(shí)間為開(kāi)始讀時(shí)間點(diǎn),該開(kāi)始讀時(shí)間點(diǎn)晚于結(jié)束寫(xiě)時(shí)間點(diǎn),如果加讀文件鎖成功,則執(zhí)行讀操作,如果讀操作完成,釋放讀文件鎖,此時(shí)的時(shí)間為結(jié)束讀時(shí)間點(diǎn),并顯示讀取的數(shù)據(jù)。

盡量寫(xiě)操作與讀操作分別在兩個(gè)線(xiàn)程中進(jìn)行,但是,由于文件鎖的存在,實(shí)際的讀操作是在寫(xiě)操作完畢后才進(jìn)行的,如圖2B所示,數(shù)據(jù)庫(kù)的讀寫(xiě)流程可以等價(jià)于在一個(gè)線(xiàn)程中串行進(jìn)行寫(xiě)操作、讀操作,最后顯示數(shù)據(jù)。

本發(fā)明實(shí)施例將寫(xiě)操作看作是對(duì)于要進(jìn)行寫(xiě)操作的文件,一部分一部分地寫(xiě)入數(shù)據(jù)庫(kù),每一部分的數(shù)據(jù)是相對(duì)獨(dú)立的,將文件通過(guò)至少兩次寫(xiě)操作寫(xiě)入數(shù)據(jù)庫(kù),以在寫(xiě)入部分?jǐn)?shù)據(jù)之后,可以臨時(shí)釋放文件鎖,以供其它線(xiàn)程對(duì)數(shù)據(jù)庫(kù)進(jìn)行讀操作,及時(shí)地讀取到數(shù)據(jù)并進(jìn)行顯示等處理,實(shí)現(xiàn)了數(shù)據(jù)庫(kù)資源的時(shí)分復(fù)用,由于讀操作的時(shí)間一般為毫秒級(jí),很短暫,保證了整體寫(xiě)操作的正常執(zhí)行,并不會(huì)明顯增加整體寫(xiě)操作的時(shí)間,一方面,單次寫(xiě)操作的時(shí)間相對(duì)整體寫(xiě)操作的時(shí)間要少,減少了讀操作等待的時(shí)間,提高操作的效率,減少界面長(zhǎng)時(shí)間處于等待等問(wèn)題;另一方面,由于寫(xiě)操作與讀操作是串聯(lián)執(zhí)行,減少了因?qū)懖僮髋c讀操作并發(fā)而引起的死鎖概率以及對(duì)內(nèi)存的消耗。

如圖3A所示,在本發(fā)明實(shí)施例的數(shù)據(jù)庫(kù)操作機(jī)制中,一方面,寫(xiě)線(xiàn)程在開(kāi)始時(shí),在一個(gè)總寫(xiě)操作中,分為至少兩個(gè)分寫(xiě)操作,在每個(gè)分寫(xiě)操作中,向該數(shù)據(jù)庫(kù)加寫(xiě)文件鎖,此時(shí)的時(shí)間為開(kāi)始寫(xiě)時(shí)間點(diǎn),如果加寫(xiě)文件鎖成功,則執(zhí)行寫(xiě)操作,將部分?jǐn)?shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)中,如果寫(xiě)操作完成,釋放寫(xiě)文件鎖,此時(shí)的時(shí)間為結(jié)束寫(xiě)時(shí)間點(diǎn),如此重復(fù)執(zhí)行分寫(xiě)操作,最后將全部數(shù)據(jù)寫(xiě)入數(shù)據(jù)。

另一方面,讀進(jìn)程在開(kāi)始時(shí),向數(shù)據(jù)庫(kù)申請(qǐng)讀操作,此時(shí)的時(shí)間為申請(qǐng)讀時(shí)間點(diǎn),如果申請(qǐng)讀時(shí)間點(diǎn)晚于開(kāi)始寫(xiě)時(shí)間點(diǎn)、早于結(jié)束寫(xiě)時(shí)間點(diǎn),即數(shù)據(jù)庫(kù)處于加寫(xiě)文件鎖的情況下,進(jìn)行等待,待寫(xiě)進(jìn)程在某次分寫(xiě)操作執(zhí)行完畢釋放寫(xiě)文件鎖之后,向數(shù)據(jù)庫(kù)加讀文件鎖,此時(shí)的時(shí)間為開(kāi)始讀時(shí)間點(diǎn),如果加讀文件鎖成功,則執(zhí)行讀操作,如果讀操作完成,釋放讀文件鎖,此時(shí)的時(shí)間為結(jié)束讀時(shí)間點(diǎn),并顯示讀取的數(shù)據(jù),該開(kāi)始讀時(shí)間點(diǎn)與結(jié)束讀時(shí)間點(diǎn)均晚于上一次分寫(xiě)操作結(jié)束寫(xiě)時(shí)間點(diǎn),早于下一次分寫(xiě)操作的開(kāi)始寫(xiě)時(shí)間點(diǎn)。

雖然寫(xiě)操作與讀操作分別在兩個(gè)線(xiàn)程中串聯(lián)進(jìn)行,但是,通過(guò)臨時(shí)釋放文件鎖使得在寫(xiě)操作的過(guò)程中進(jìn)行讀操作,分時(shí)復(fù)用數(shù)據(jù)庫(kù),如圖3B所示,數(shù)據(jù)庫(kù)的讀寫(xiě)流程可以等價(jià)于并行進(jìn)行寫(xiě)操作、讀操作,最后顯示數(shù)據(jù)。

參照?qǐng)D4,示出了本發(fā)明的另一種數(shù)據(jù)庫(kù)的寫(xiě)方法實(shí)施例的步驟流程圖,具體可以包括如下步驟:

步驟401,獲取待寫(xiě)入數(shù)據(jù)庫(kù)的文件。

步驟402,向所述數(shù)據(jù)庫(kù)申請(qǐng)文件鎖。

在本發(fā)明實(shí)施例中,寫(xiě)進(jìn)程在進(jìn)行寫(xiě)操作之前,可以向數(shù)據(jù)庫(kù)申請(qǐng)文件鎖,對(duì)該數(shù)據(jù)庫(kù)進(jìn)行加鎖,在POSIX標(biāo)準(zhǔn)中提供接口fcntl()來(lái)實(shí)現(xiàn)。

該數(shù)據(jù)庫(kù)具有一個(gè)鎖文件(lock file),當(dāng)鎖文件存在時(shí),就認(rèn)為該數(shù)據(jù)庫(kù)已經(jīng)被加鎖,別的進(jìn)程不應(yīng)該訪問(wèn)。當(dāng)鎖不存在,寫(xiě)進(jìn)程就可以創(chuàng)建一個(gè)鎖文件,然后訪問(wèn)相應(yīng)的數(shù)據(jù)。

如果創(chuàng)建鎖屬于原子操作(atomic operation),就可以保證某一時(shí)刻只有一個(gè)進(jìn)程擁有該鎖,保證某一時(shí)刻只有一個(gè)進(jìn)程訪問(wèn)文件,對(duì)于同一部分內(nèi)容,讀操作的文件鎖與寫(xiě)操作的文件鎖互斥。

步驟403,判斷是否將所述文件全部寫(xiě)入所述數(shù)據(jù)庫(kù);若是,則執(zhí)行步驟404,若否,則執(zhí)行步驟405。

在本發(fā)明實(shí)施例中,如果寫(xiě)操作的文件鎖申請(qǐng)成功,則可以判斷是否將文件的全部數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù),如果已全部寫(xiě)入數(shù)據(jù)庫(kù),則結(jié)束寫(xiě)操作,如果沒(méi)有全部寫(xiě)入數(shù)據(jù)庫(kù),則繼續(xù)將未寫(xiě)入的數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)。

如果寫(xiě)操作的文件鎖申請(qǐng)失敗,則可能有其他進(jìn)程進(jìn)行寫(xiě)操作、讀操作,此時(shí)可以等待,直至寫(xiě)操作的文件鎖申請(qǐng)成功。

在本發(fā)明實(shí)施例的一個(gè)示例中,步驟403可以包括如下子步驟:

子步驟S11,讀取所述文件已寫(xiě)入所述數(shù)據(jù)庫(kù)的數(shù)據(jù)的已寫(xiě)行數(shù);

子步驟S12,判斷所述已寫(xiě)行數(shù)是否小于所述文件的總行數(shù);若是,則執(zhí)行子步驟S13,若否,則執(zhí)行子步驟S14;

子步驟S13,確定所述文件未全部寫(xiě)入所述數(shù)據(jù)庫(kù);

子步驟S14,確定所述文件已全部寫(xiě)入所述數(shù)據(jù)庫(kù)。

文件中的數(shù)據(jù)通常以行進(jìn)行計(jì)量,可以將寫(xiě)操作看作是將文件中的數(shù)據(jù)一行行地寫(xiě)入數(shù)據(jù)庫(kù),每行數(shù)據(jù)的寫(xiě)入是相對(duì)獨(dú)立的。

在本示例中,可以預(yù)先計(jì)算文件的總行數(shù)并實(shí)時(shí)統(tǒng)計(jì)已寫(xiě)入數(shù)據(jù)庫(kù)的行數(shù)(即已寫(xiě)行數(shù))。

如果已寫(xiě)行數(shù)小于文件的總行數(shù),則表示文件還有部分?jǐn)?shù)據(jù)未寫(xiě)入數(shù)據(jù)庫(kù)中,如果已寫(xiě)行數(shù)等于文件的總行數(shù),則表示文件的全部數(shù)據(jù)已寫(xiě)入數(shù)據(jù)庫(kù)中。

在具體實(shí)現(xiàn)中,可以在指定的存儲(chǔ)區(qū)域判斷是否存儲(chǔ)有用于記錄已寫(xiě)行數(shù)的變量;若是,則提取變量的值,獲得已寫(xiě)行數(shù);若否,則在指定的存儲(chǔ)區(qū)域設(shè)置變量,并設(shè)置初始值(通常為0)。

步驟404,結(jié)束將所述文件寫(xiě)入所述數(shù)據(jù)庫(kù)。

步驟405,將所述文件中未寫(xiě)入所述數(shù)據(jù)庫(kù)的部分?jǐn)?shù)據(jù)寫(xiě)入所述數(shù)據(jù)庫(kù)。

在具體實(shí)現(xiàn)中,每一次寫(xiě)操作可以將文件中未寫(xiě)入數(shù)據(jù)庫(kù)的部分?jǐn)?shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)中。

為了保證該文件的正常存儲(chǔ),通常是按照文件的數(shù)據(jù)順序?qū)懭霐?shù)據(jù)庫(kù)的,即本次寫(xiě)操作寫(xiě)入數(shù)據(jù)庫(kù)的數(shù)據(jù)通常與上一次寫(xiě)操作寫(xiě)入數(shù)據(jù)庫(kù)的數(shù)據(jù)相連。

當(dāng)然,如果可以保證寫(xiě)入數(shù)據(jù)庫(kù)的數(shù)據(jù)的準(zhǔn)確性,也可以通過(guò)標(biāo)記位置等方式將文件寫(xiě)入數(shù)據(jù)庫(kù)中,本發(fā)明實(shí)施例對(duì)此不加以限制。

在本發(fā)明實(shí)施例的一個(gè)示例中,步驟405可以包括如下子步驟:

子步驟S21,將所述文件中、位于所述已寫(xiě)行數(shù)后一行的數(shù)據(jù)寫(xiě)入所述數(shù)據(jù)庫(kù);

子步驟S22,更新所述已寫(xiě)行數(shù);

子步驟S23,判斷本次寫(xiě)操作寫(xiě)入所述數(shù)據(jù)庫(kù)的數(shù)據(jù)的行數(shù)是否到達(dá)行數(shù)閾值;若是,則執(zhí)行子步驟S24,若否,則返回執(zhí)行子步驟S21;

子步驟S24,結(jié)束本次寫(xiě)操作。

在本示例中,可以按照數(shù)據(jù)的行順序?qū)?shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)中,每一次寫(xiě)操作可以寫(xiě)入一定行數(shù)的數(shù)據(jù)。

在寫(xiě)入每行數(shù)據(jù)時(shí),從首行數(shù)據(jù)開(kāi)始寫(xiě),同時(shí),記錄當(dāng)前行數(shù),如記錄在指定的存儲(chǔ)區(qū)域的變量中,并判斷本次寫(xiě)操作寫(xiě)入的數(shù)據(jù)是否到達(dá)行數(shù)閾值,如果到達(dá),則結(jié)束本次寫(xiě)操作,如果未到達(dá),則繼續(xù)寫(xiě)下一行。

其中,如果行數(shù)閾值是預(yù)先設(shè)定的值,則可以通過(guò)已寫(xiě)行數(shù)對(duì)行數(shù)閾值取余數(shù)的方式判斷本次寫(xiě)操作是否到達(dá)行數(shù)閾值,即余數(shù)為0時(shí),到達(dá)行數(shù)閾值,否則,未到達(dá)行數(shù)閾值。

當(dāng)然,該行數(shù)閾值也可以按照智能終端的資源使用率(資源使用率越高,讀操作的概率越高,行數(shù)閾值設(shè)置越低,可以保證讀操作的執(zhí)行)、文件的數(shù)據(jù)量、隨機(jī)選取、概率選擇等因素進(jìn)行設(shè)置,本發(fā)明實(shí)施例對(duì)此不加以限制。

步驟406,釋放所述文件鎖;

步驟407,休眠一段時(shí)間,返回執(zhí)行步驟402。

如果本次寫(xiě)操作完成,即可以釋放數(shù)據(jù)庫(kù)的寫(xiě)操作的文件鎖,然后休眠(sleep)一段時(shí)間,如1ms,使得其他進(jìn)行可以在此期間進(jìn)行寫(xiě)操作、讀操作。

需要說(shuō)明的是,對(duì)于方法實(shí)施例,為了簡(jiǎn)單描述,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明實(shí)施例并不受所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本發(fā)明實(shí)施例,某些步驟可以采用其他順序或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說(shuō)明書(shū)中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作并不一定是本發(fā)明實(shí)施例所必須的。

參照?qǐng)D5,示出了本發(fā)明的一種數(shù)據(jù)庫(kù)的寫(xiě)裝置實(shí)施例的結(jié)構(gòu)框圖,具體可以包括如下模塊:

文件獲取模塊501,用于獲取待寫(xiě)入數(shù)據(jù)庫(kù)的文件;

多次寫(xiě)操作模塊502,用于將所述文件通過(guò)至少兩次寫(xiě)操作寫(xiě)入所述數(shù)據(jù)庫(kù),以在相鄰兩次寫(xiě)操作之間的時(shí)間內(nèi),允許對(duì)所述數(shù)據(jù)庫(kù)進(jìn)行讀操作。

在本發(fā)明的一個(gè)實(shí)施例中,所述多次寫(xiě)操作模塊502包括:

文件鎖申請(qǐng)子模塊,用于向所述數(shù)據(jù)庫(kù)申請(qǐng)文件鎖;

文件完成寫(xiě)子模塊,用于判斷是否將所述文件全部寫(xiě)入所述數(shù)據(jù)庫(kù);若是,則調(diào)用文件寫(xiě)結(jié)束子模塊,若否,則調(diào)用繼續(xù)寫(xiě)子模塊;

文件寫(xiě)結(jié)束子模塊,用于結(jié)束將所述文件寫(xiě)入所述數(shù)據(jù)庫(kù);

文件繼續(xù)寫(xiě)子模塊,用于將所述文件中未寫(xiě)入所述數(shù)據(jù)庫(kù)的部分?jǐn)?shù)據(jù)寫(xiě)入所述數(shù)據(jù)庫(kù);

文件鎖釋放子模塊,用于釋放所述文件鎖;

休眠子模塊,用于休眠一段時(shí)間,返回調(diào)用所述文件鎖申請(qǐng)子模塊。

在本發(fā)明實(shí)施例的一個(gè)示例中,所述文件完成寫(xiě)子模塊包括:

已寫(xiě)行數(shù)讀取單元,用于讀取所述文件已寫(xiě)入所述數(shù)據(jù)庫(kù)的數(shù)據(jù)的已寫(xiě)行數(shù);

總行數(shù)判斷單元,用于判斷所述已寫(xiě)行數(shù)是否小于所述文件的總行數(shù);若是,則調(diào)用第一確定單元,若否,則調(diào)用第二確定單元;

第一確定單元,用于確定所述文件未全部寫(xiě)入所述數(shù)據(jù)庫(kù);

第二確定單元,用于確定所述文件已全部寫(xiě)入所述數(shù)據(jù)庫(kù)。

在本發(fā)明實(shí)施例的一個(gè)示例中,所述已寫(xiě)行數(shù)讀取單元包括:

變量判斷子單元,用于在指定的存儲(chǔ)區(qū)域判斷是否存儲(chǔ)有用于記錄已寫(xiě)行數(shù)的變量;若是,則調(diào)用變量值提取子單元,若否,則調(diào)用變量設(shè)置子單元;

變量值提取子單元,用于提取所述變量的值,獲得已寫(xiě)行數(shù);

變量設(shè)置子單元,用于在所述指定的存儲(chǔ)區(qū)域設(shè)置所述變量,并設(shè)置初始值。

在本發(fā)明實(shí)施例的一個(gè)示例中,所述文件繼續(xù)寫(xiě)子模塊包括:

行數(shù)據(jù)寫(xiě)單元,用于將所述文件中、位于所述已寫(xiě)行數(shù)后一行的數(shù)據(jù)寫(xiě)入所述數(shù)據(jù)庫(kù);

已寫(xiě)行數(shù)更新單元,用于更新所述已寫(xiě)行數(shù);

行數(shù)閾值判斷單元,用于判斷本次寫(xiě)操作寫(xiě)入所述數(shù)據(jù)庫(kù)的數(shù)據(jù)的行數(shù)是否到達(dá)行數(shù)閾值;若是,則調(diào)用本次寫(xiě)結(jié)束單元,若否,則返回調(diào)用行數(shù)據(jù)寫(xiě)單元;

本次寫(xiě)結(jié)束單元,用于結(jié)束本次寫(xiě)操作。

對(duì)于裝置實(shí)施例而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡(jiǎn)單,相關(guān)之處參見(jiàn)方法實(shí)施例的部分說(shuō)明即可。

本說(shuō)明書(shū)中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說(shuō)明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見(jiàn)即可。

本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明實(shí)施例的實(shí)施例可提供為方法、裝置、或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明實(shí)施例可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明實(shí)施例可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤(pán)存儲(chǔ)器、CD-ROM、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。

本發(fā)明實(shí)施例是參照根據(jù)本發(fā)明實(shí)施例的方法、終端設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來(lái)描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專(zhuān)用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理終端設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過(guò)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理終端設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。

這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理終端設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。

這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理終端設(shè)備上,使得在計(jì)算機(jī)或其他可編程終端設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程終端設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。

盡管已描述了本發(fā)明實(shí)施例的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對(duì)這些實(shí)施例做出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本發(fā)明實(shí)施例范圍的所有變更和修改。

最后,還需要說(shuō)明的是,在本文中,諸如第一和第二等之類(lèi)的關(guān)系術(shù)語(yǔ)僅僅用來(lái)將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開(kāi)來(lái),而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過(guò)程、方法、物品或者終端設(shè)備不僅包括那些要素,而且還包括沒(méi)有明確列出的其他要素,或者是還包括為這種過(guò)程、方法、物品或者終端設(shè)備所固有的要素。在沒(méi)有更多限制的情況下,由語(yǔ)句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過(guò)程、方法、物品或者終端設(shè)備中還存在另外的相同要素。

以上對(duì)本發(fā)明所提供的一種數(shù)據(jù)庫(kù)的寫(xiě)方法和一種數(shù)據(jù)庫(kù)的寫(xiě)裝置,進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說(shuō)明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說(shuō)明書(shū)內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制。

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1