本發(fā)明涉及存儲(chǔ)器領(lǐng)域,尤其涉及一種事務(wù)處理的優(yōu)化處理方法及裝置。
背景技術(shù):
cos的全稱是chipoperatingsystem(片內(nèi)操作系統(tǒng)),主要控制虛擬機(jī)和外界的信息交換,管理智能卡內(nèi)的存儲(chǔ)器并在卡內(nèi)部完成各種命令的處理。在許多大型、關(guān)鍵的應(yīng)用程序中,虛擬機(jī)每秒鐘都在執(zhí)行大量的任務(wù),將這些任務(wù)結(jié)合在一起完成一個(gè)業(yè)務(wù)要求,稱為事務(wù)。事務(wù)處理在cos中至關(guān)重要,在事務(wù)處理過程中,cos需要不斷設(shè)置標(biāo)記、備份數(shù)據(jù)、改變非易失性存儲(chǔ)區(qū)的數(shù)據(jù)、恢復(fù)數(shù)據(jù)等操作,由于每一次在非易失性存儲(chǔ)區(qū)的寫操作相對(duì)于讀操作是相當(dāng)耗時(shí)的,因此應(yīng)用的大部分時(shí)間消耗在非易失性存儲(chǔ)區(qū)的寫操作上。
非易失性存儲(chǔ)區(qū)里存儲(chǔ)了大量的應(yīng)用程序、數(shù)據(jù)及文件掉電后其存儲(chǔ)的信息不會(huì)丟失;隨機(jī)存取存儲(chǔ)區(qū)用于保存虛擬機(jī)處理的數(shù)據(jù)信息,里面的內(nèi)容可以隨時(shí)刷新,訪問速度快,但是掉電后其存儲(chǔ)的信息會(huì)丟失。
現(xiàn)有的事務(wù)處理機(jī)制,當(dāng)處理數(shù)據(jù)較多或處理數(shù)據(jù)零散的分布在多個(gè)頁(yè)中時(shí),尤其是在應(yīng)用的下載與個(gè)人化過程中,非易失性存儲(chǔ)區(qū)效率低下且不夠靈活,浪費(fèi)較多的時(shí)間和空間,且對(duì)非易失性存儲(chǔ)器的寫操作次數(shù)過多,導(dǎo)致產(chǎn)品的壽命大大減少。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是為了解決現(xiàn)有技術(shù)中存在的問題,提供了一種事務(wù)處理的優(yōu)化處理方法及裝置。
本發(fā)明采用的技術(shù)方案是:
一方面,一種事務(wù)處理的優(yōu)化處理方法,方法包括:
步驟s1:虛擬機(jī)執(zhí)行應(yīng)用指令,當(dāng)執(zhí)行到第一應(yīng)用接口時(shí),初始化事務(wù)狀態(tài)為開始事務(wù);當(dāng)創(chuàng)建對(duì)象數(shù)據(jù)時(shí),執(zhí)行步驟s2;當(dāng)修改對(duì)象數(shù)據(jù)時(shí),執(zhí)行步驟s3;當(dāng)執(zhí)行到第二應(yīng)用程序接口時(shí),執(zhí)行步驟s4;
步驟s2:虛擬機(jī)判斷非易失性存儲(chǔ)區(qū)的剩余空間是否足夠存儲(chǔ)接收到的新創(chuàng)建的對(duì)象數(shù)據(jù)和索引信息,如果空間不足,則報(bào)錯(cuò),返回步驟s1,如果空間充足,則根據(jù)對(duì)象數(shù)據(jù)生成索引信息,在非易失性存儲(chǔ)區(qū)添加索引信息和對(duì)象數(shù)據(jù),并在隨機(jī)存取存儲(chǔ)區(qū)中更新索引信息的位置信息和對(duì)象數(shù)據(jù)的位置信息后,判斷事務(wù)狀態(tài)是否為開始事務(wù),如果不是,則在非易失性存儲(chǔ)區(qū)中存儲(chǔ)索引信息的位置信息和對(duì)象數(shù)據(jù)的位置信息,如果是,則返回步驟s1;
步驟s3:虛擬機(jī)根據(jù)接收到的唯一標(biāo)識(shí)符確定需要修改的對(duì)象數(shù)據(jù)的位置信息后,判斷事務(wù)狀態(tài)是否為開始事務(wù),如果不是,則根據(jù)位置信息在非易失性存儲(chǔ)區(qū)修改對(duì)象數(shù)據(jù);如果是,則在存儲(chǔ)存取存儲(chǔ)區(qū)中更新需要修改的對(duì)象的修改記錄,返回步驟s1;
步驟s4:虛擬機(jī)判斷事務(wù)狀態(tài)是否為開始事務(wù),如果不是,則報(bào)錯(cuò);如果是,則遍歷非易失性存儲(chǔ)區(qū)和隨機(jī)存取存儲(chǔ)區(qū)的修改記錄并統(tǒng)計(jì)修改頁(yè)數(shù)量,將修改數(shù)據(jù)直接寫入到非易失性存儲(chǔ)區(qū)中,將事務(wù)狀態(tài)更新為結(jié)束事務(wù),返回步驟s1。
另一方面,一種事務(wù)處理的優(yōu)化處理裝置,裝置包括:
執(zhí)行模塊,用于執(zhí)行應(yīng)用指令;用于當(dāng)?shù)诙袛嗄K判斷事務(wù)狀態(tài)是開始事務(wù)時(shí)執(zhí)行應(yīng)用指令;用于當(dāng)?shù)诙履K在存儲(chǔ)存取存儲(chǔ)區(qū)中更新需要修改的對(duì)象的修改記錄后執(zhí)行應(yīng)用指令;還用于當(dāng)?shù)谌履K將事務(wù)狀態(tài)更新為結(jié)束事務(wù)后執(zhí)行應(yīng)用指令;
第一初始化模塊,用于當(dāng)執(zhí)行模塊執(zhí)行到第一應(yīng)用接口時(shí),初始化事務(wù)狀態(tài)為開始事務(wù);
第一判斷模塊,用于當(dāng)執(zhí)行模塊執(zhí)行創(chuàng)建對(duì)象數(shù)據(jù)時(shí),判斷非易失性存儲(chǔ)區(qū)的剩余空間是否足夠存儲(chǔ)接收到的新創(chuàng)建的對(duì)象數(shù)據(jù)和索引信息;
報(bào)錯(cuò)模塊,用于當(dāng)?shù)谝慌袛嗄K判斷非易失性存儲(chǔ)區(qū)的剩余空間不夠存儲(chǔ)接收到的新創(chuàng)建的對(duì)象數(shù)據(jù)和索引信息時(shí),報(bào)錯(cuò);還用于當(dāng)?shù)诙袛嗄K判斷事務(wù)狀態(tài)不是開始事務(wù)時(shí),報(bào)錯(cuò);
生成模塊,用于當(dāng)?shù)谝慌袛嗄K判斷非易失性存儲(chǔ)區(qū)的剩余空間足夠存儲(chǔ)接收到的新創(chuàng)建的對(duì)象數(shù)據(jù)和索引信息時(shí),根據(jù)對(duì)象數(shù)據(jù)生成索引信息;
第一添加模塊,用于在非易失性存儲(chǔ)區(qū)存儲(chǔ)生成模塊生成的索引信息和對(duì)象數(shù)據(jù);
第一更新模塊,用于在隨機(jī)存取存儲(chǔ)區(qū)中更新索引信息的位置信息和對(duì)象數(shù)據(jù)的位置信息;
第二判斷模塊,用于當(dāng)?shù)谝桓履K在隨機(jī)存取存儲(chǔ)區(qū)中更新索引信息的位置信息和對(duì)象數(shù)據(jù)的位置信息后,判斷事務(wù)狀態(tài)是否為開始事務(wù);用于當(dāng)?shù)谝欢ㄎ荒K確定需要修改的對(duì)象數(shù)據(jù)的位置信息后,判斷事務(wù)狀態(tài)是否為開始事務(wù);還用于當(dāng)執(zhí)行模塊到第二應(yīng)用程序接口時(shí),判斷事務(wù)狀態(tài)是否為開始事務(wù);
存儲(chǔ)模塊,用于當(dāng)?shù)诙袛嗄K判斷事務(wù)狀態(tài)不是為開始事務(wù)時(shí),在非易失性存儲(chǔ)區(qū)中存儲(chǔ)索引信息的位置信息和對(duì)象數(shù)據(jù)的位置信息;
第一定位模塊,用于當(dāng)執(zhí)行模塊執(zhí)行修改對(duì)象數(shù)據(jù)的指令后,根據(jù)接收到的唯一標(biāo)識(shí)符確定需要修改的對(duì)象數(shù)據(jù)的位置信息;
修改模塊,用于當(dāng)?shù)诙袛嗄K判斷事務(wù)狀態(tài)不是開始事務(wù)時(shí),根據(jù)位置信息在非易失性存儲(chǔ)區(qū)修改對(duì)象數(shù)據(jù);
第二更新模塊,用于當(dāng)執(zhí)行模塊執(zhí)行修改對(duì)象數(shù)據(jù)的指令時(shí)且當(dāng)?shù)诙袛嗄K判斷事務(wù)狀態(tài)是開始事務(wù)時(shí),在存儲(chǔ)存取存儲(chǔ)區(qū)中更新需要修改的對(duì)象的修改記錄;
第一遍歷模塊,用于當(dāng)執(zhí)行模塊執(zhí)行到第二應(yīng)用程序接口時(shí)且當(dāng)?shù)诙袛嗄K判斷事務(wù)狀態(tài)為開始事務(wù)時(shí),遍歷非易失性存儲(chǔ)區(qū)和隨機(jī)存取存儲(chǔ)區(qū)的修改記錄;
統(tǒng)計(jì)模塊,用于當(dāng)?shù)谝槐闅v模塊遍歷非易失性存儲(chǔ)區(qū)和隨機(jī)存取存儲(chǔ)區(qū)的修改記錄后,統(tǒng)計(jì)修改頁(yè)數(shù)量;
第一寫數(shù)據(jù)模塊,用于將修改數(shù)據(jù)直接寫入到非易失性存儲(chǔ)區(qū)中;
第三更新模塊,用于當(dāng)?shù)谝粚憯?shù)據(jù)模塊將修改數(shù)據(jù)直接寫入到非易失性存儲(chǔ)區(qū)后,將事務(wù)狀態(tài)更新為結(jié)束事務(wù)。
本發(fā)明取得的有益效果是:
采用本發(fā)明的技術(shù)方案,在處理數(shù)據(jù)較多或數(shù)據(jù)分布比較零散時(shí),利用隨機(jī)存取存儲(chǔ)區(qū)提高事務(wù)的處理效率,大大提高讀寫數(shù)據(jù)的性能,并且通過減少對(duì)非易失性存儲(chǔ)區(qū)的寫操作,提高產(chǎn)品的壽命。
附圖說(shuō)明
為了更清楚的說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單的介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為發(fā)明實(shí)施例一中提供的一種事務(wù)處理的優(yōu)化處理方法的流程圖;
圖2為發(fā)明實(shí)施例二中提供的一種事務(wù)處理的優(yōu)化處理方法中第一應(yīng)用程序接口被調(diào)用后的操作流程圖;
圖3為發(fā)明實(shí)施例二中提供的一種事務(wù)處理的優(yōu)化處理方法中第一函數(shù)被調(diào)用后的操作流程圖;
圖4為發(fā)明實(shí)施例二中提供的一種事務(wù)處理的優(yōu)化處理方法中第二函數(shù)被調(diào)用后的操作流程圖;
圖5為發(fā)明實(shí)施例二中提供的一種事務(wù)處理的優(yōu)化處理方法中第三函數(shù)被調(diào)用后的操作流程圖;
圖6為發(fā)明實(shí)施例二中提供的一種事務(wù)處理的優(yōu)化處理方法中第二應(yīng)用程序接口被調(diào)用后的操作流程圖;
圖7為發(fā)明實(shí)施例二中提供的一種事務(wù)處理的優(yōu)化處理方法中第三應(yīng)用程序接口被調(diào)用后的操作流程圖;
圖8為發(fā)明實(shí)施例二中提供的一種事務(wù)處理的優(yōu)化處理方法中虛擬機(jī)掉電后重新上電的操作流程圖;
圖9為發(fā)明實(shí)施例四中提供的一種事務(wù)處理的優(yōu)化處理的裝置。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
在以下實(shí)施例中,包括虛擬機(jī)、第一存儲(chǔ)區(qū)和第二存儲(chǔ)區(qū),虛擬機(jī)的第一存儲(chǔ)區(qū)包括:對(duì)象數(shù)據(jù)存儲(chǔ)區(qū)、數(shù)據(jù)全局信息區(qū)、數(shù)據(jù)備份區(qū)。對(duì)象數(shù)據(jù)存儲(chǔ)區(qū)包括:對(duì)象索引區(qū)域、空白區(qū)域、對(duì)象數(shù)據(jù)區(qū)域。其中,第一存儲(chǔ)區(qū)域?yàn)榉且资源鎯?chǔ)器,如eeprom,第二存儲(chǔ)區(qū)域?yàn)橐资源鎯?chǔ)器,如ram。
實(shí)施例一
本發(fā)明實(shí)施例一提供了一種事務(wù)處理的優(yōu)化處理方法,包括開始事務(wù)、執(zhí)行事務(wù)、提交事務(wù)、取消事務(wù)和掉電保護(hù)過程,其中執(zhí)行事務(wù)包括創(chuàng)建數(shù)據(jù)的操作、修改數(shù)據(jù)的操作和讀取數(shù)據(jù)的操作。
如圖1所示,包括:
步驟101:虛擬機(jī)上電,判斷上次斷電時(shí),是否存在未完成的事務(wù),是則啟動(dòng)掉電保護(hù),否則執(zhí)行步驟102;
步驟102:虛擬機(jī)進(jìn)行事務(wù)處理初始化;
具體地,在本實(shí)施例中,事務(wù)處理初始化具體包括:清除第二存儲(chǔ)區(qū)中的數(shù)據(jù),將事務(wù)處理標(biāo)志位置為無(wú)效。
步驟103:虛擬機(jī)執(zhí)行應(yīng)用指令,當(dāng)執(zhí)行到第一應(yīng)用程序接口時(shí)執(zhí)行步驟105,當(dāng)執(zhí)行到第一函數(shù)時(shí)執(zhí)行步驟106,當(dāng)執(zhí)行到第二函數(shù)時(shí)執(zhí)行步驟107,當(dāng)執(zhí)行到第三函數(shù)時(shí)執(zhí)行步驟108,當(dāng)執(zhí)行到第二應(yīng)用程序接口時(shí)執(zhí)行步驟109,當(dāng)執(zhí)行到第三應(yīng)用程序接口時(shí)執(zhí)行步驟110,當(dāng)執(zhí)行到其它命令時(shí)執(zhí)行步驟111,;
步驟105:調(diào)用第一應(yīng)用程序接口開始事務(wù),返回執(zhí)行步驟103;
所述開始事務(wù)具體包括:
檢查事務(wù)處理標(biāo)志位,當(dāng)事務(wù)處理標(biāo)志位有效時(shí)報(bào)錯(cuò),返回執(zhí)行步驟103;當(dāng)事務(wù)處理標(biāo)志位無(wú)效時(shí)將事務(wù)處理標(biāo)志位置為有效,返回執(zhí)行步驟103;
步驟106:調(diào)用第一函數(shù)創(chuàng)建數(shù)據(jù),返回執(zhí)行步驟103;
所述創(chuàng)建數(shù)據(jù)具體包括:
根據(jù)新創(chuàng)建的對(duì)象數(shù)據(jù)生成新創(chuàng)建的索引信息,判斷新創(chuàng)建的索引信息的大小加上新創(chuàng)建的對(duì)象數(shù)據(jù)大小是否小于或者等于第一存儲(chǔ)區(qū)的空白區(qū)域的大小,如果是,在第一存儲(chǔ)區(qū)添加新創(chuàng)建的索引信息和新創(chuàng)建的對(duì)象數(shù)據(jù),否則報(bào)錯(cuò),返回執(zhí)行步驟103;當(dāng)事務(wù)處理標(biāo)志位有效時(shí),返回執(zhí)行步驟103;當(dāng)事務(wù)處理標(biāo)志位無(wú)效時(shí),將對(duì)象索引區(qū)域的位置信息和對(duì)象數(shù)據(jù)區(qū)域的位置信息存儲(chǔ)到所述第一存儲(chǔ)區(qū)的數(shù)據(jù)全局信息區(qū);
步驟107:調(diào)用第二函數(shù)修改數(shù)據(jù),返回執(zhí)行步驟103;
所述修改數(shù)據(jù)具體包括:
根據(jù)唯一標(biāo)識(shí)符確定需要修改的對(duì)象數(shù)據(jù)的位置,并將需要修改的對(duì)象數(shù)據(jù)的位置信息和修改數(shù)據(jù)作為修改記錄存儲(chǔ)到第二存儲(chǔ)區(qū);當(dāng)事務(wù)處理標(biāo)志位無(wú)效時(shí),在第一存儲(chǔ)區(qū)中直接修改對(duì)象數(shù)據(jù);當(dāng)事務(wù)處理標(biāo)志位有效時(shí),判斷在所述第二存儲(chǔ)區(qū)中是否包含當(dāng)前所有修改記錄,如果是,則更新所述第二存儲(chǔ)區(qū)中的需要修改的數(shù)據(jù)信息,否則當(dāng)所述第二存儲(chǔ)區(qū)剩余空間不足且第一存儲(chǔ)區(qū)的數(shù)據(jù)備份區(qū)空間未滿時(shí),將所述第二存儲(chǔ)區(qū)中的數(shù)據(jù)提交到所述數(shù)據(jù)備份區(qū)并清空所述第二存儲(chǔ)區(qū)中的修改記錄后,繼續(xù)在所述第二存儲(chǔ)區(qū)中增加未包含的修改記錄,返回執(zhí)行步驟103;
步驟108:調(diào)用第三函數(shù)讀取數(shù)據(jù),返回執(zhí)行步驟103;
所述讀取事務(wù)具體包括:
根據(jù)唯一標(biāo)識(shí)符確定需要讀取的對(duì)象數(shù)據(jù)的位置,讀取第一存儲(chǔ)區(qū)的對(duì)象數(shù)據(jù)區(qū)相應(yīng)地址中的數(shù)據(jù)作為目標(biāo)數(shù)據(jù),當(dāng)事務(wù)處理標(biāo)志位有效時(shí),在所述第一存儲(chǔ)區(qū)的數(shù)據(jù)備份區(qū)查找并讀取與讀取地址范圍相交的數(shù)據(jù),與所述目標(biāo)數(shù)據(jù)進(jìn)行合并后,在第二存儲(chǔ)區(qū)查找與讀取地址范圍相交的數(shù)據(jù),與合并后的目標(biāo)數(shù)據(jù)再次進(jìn)行合并得到需要讀取的數(shù)據(jù),返回執(zhí)行步驟103;
步驟109:調(diào)用第二應(yīng)用程序接口提交事務(wù),返回執(zhí)行步驟103;
所述提交事務(wù)具體包括:
當(dāng)事務(wù)處理標(biāo)志位有效且第二存儲(chǔ)區(qū)存在數(shù)據(jù)時(shí),遍歷第二存儲(chǔ)區(qū)和第一存儲(chǔ)區(qū)的數(shù)據(jù)備份區(qū)中的修改記錄,判斷修改記錄是否只存在一個(gè)頁(yè)面的數(shù)據(jù)修改,如果是,將修改數(shù)據(jù)直接寫入到所述第一存儲(chǔ)區(qū)的對(duì)象數(shù)據(jù)區(qū)中,否則將所述第二存儲(chǔ)區(qū)中的修改記錄提交到所述數(shù)據(jù)備份區(qū)后,遍歷讀取所述數(shù)據(jù)備份區(qū)的修改記錄,將所述修改數(shù)據(jù)寫入到對(duì)象數(shù)據(jù)區(qū)中,返回執(zhí)行步驟103;
步驟110:調(diào)用第三應(yīng)用程序接口取消事務(wù),返回執(zhí)行步驟103;
所述取消事務(wù)具體包括:
當(dāng)事務(wù)處理標(biāo)志位有效時(shí)判斷數(shù)據(jù)備份區(qū)是否有修改記錄,如果沒有,則清空第二存儲(chǔ)區(qū)的修改記錄、清除事務(wù)處理標(biāo)志位,否則先清除數(shù)據(jù)備份區(qū)的修改記錄后再清除緩存區(qū)的修改記錄、清除事務(wù)處理標(biāo)志位。
步驟111:根據(jù)所述執(zhí)行命令進(jìn)行相應(yīng)操作,返回執(zhí)行步驟103。
在本實(shí)施例中,所述第一存儲(chǔ)區(qū)域?yàn)閑eprom,第二存儲(chǔ)區(qū)域?yàn)閞am,第二存儲(chǔ)器的讀寫速度較第一存儲(chǔ)器快,本發(fā)明提供的基于緩存的卡片虛擬機(jī)處理事務(wù)的方法,采用創(chuàng)建數(shù)據(jù)和修改數(shù)據(jù)進(jìn)行分離處理,將參與事務(wù)處理的數(shù)據(jù)量大量減少,同時(shí)將大部分對(duì)第一存儲(chǔ)修改的操作轉(zhuǎn)換為對(duì)第二存儲(chǔ)區(qū)的操作,提高了虛擬機(jī)的運(yùn)行速度。
實(shí)施例二
在本實(shí)施例中,第一存儲(chǔ)區(qū)包括:對(duì)象數(shù)據(jù)存儲(chǔ)區(qū)、數(shù)據(jù)全局信息區(qū)、數(shù)據(jù)備份區(qū)。對(duì)象數(shù)據(jù)存儲(chǔ)區(qū)包括:對(duì)象索引區(qū)域、空白區(qū)域、對(duì)象數(shù)據(jù)區(qū)域。值得說(shuō)明的是,第一存儲(chǔ)區(qū)和第二存儲(chǔ)區(qū)根據(jù)自身的大小按照固定的字節(jié)數(shù)將其劃分為若干頁(yè)。
參見圖2,事務(wù)處理機(jī)制中當(dāng)?shù)谝粦?yīng)用程序接口被調(diào)用時(shí)開始事務(wù),具體步驟如下:
步驟201:當(dāng)虛擬機(jī)第一應(yīng)用程序接口被調(diào)用時(shí),判斷事務(wù)處理標(biāo)志位的值是否為true,是則報(bào)錯(cuò),否則執(zhí)行步驟202;
優(yōu)選地,在本實(shí)施例中,所述第一應(yīng)用程序接口具體為開始事務(wù)(begintranscation)接口。
步驟202:將事務(wù)處理標(biāo)志位的值置為true。
參見圖3,事務(wù)處理機(jī)制中當(dāng)?shù)谝缓瘮?shù)被調(diào)用時(shí)執(zhí)行創(chuàng)建數(shù)據(jù)操作:
在本實(shí)施例中,對(duì)象索引區(qū)域里面存放的是一條條的索引信息,索引信息記錄了與索引信息一一對(duì)應(yīng)的對(duì)象數(shù)據(jù)的位置和大小信息,對(duì)象數(shù)據(jù)區(qū)域存放與索引信息一一對(duì)應(yīng)的對(duì)象數(shù)據(jù)。值得注意的是,對(duì)象索引區(qū)域存索引信息時(shí),由低地址向高地址遞增式進(jìn)行存儲(chǔ),對(duì)象數(shù)據(jù)區(qū)域存儲(chǔ)對(duì)象數(shù)據(jù)時(shí),由高地址向低地址遞減式進(jìn)行存儲(chǔ)。數(shù)據(jù)全局信息區(qū)用于存儲(chǔ)對(duì)象索引區(qū)域和對(duì)象數(shù)據(jù)區(qū)域的起始位置信息和偏移。
步驟301:當(dāng)?shù)谝缓瘮?shù)被調(diào)用時(shí),判斷新創(chuàng)建的索引信息的大小加上新創(chuàng)建的對(duì)象數(shù)據(jù)大小是否小于等于第一存儲(chǔ)區(qū)的空白區(qū)域的大小,是則執(zhí)行步驟303,否則執(zhí)行步驟302;
優(yōu)選地,在本實(shí)施例中,所述第一函數(shù)具體為創(chuàng)建事務(wù)函數(shù)。
在本實(shí)施例中,每一條索引信息的大小是確定的,所以對(duì)象索引區(qū)域的一頁(yè)所能存放的索引信息的個(gè)數(shù)也是確定的。為避免對(duì)象索引區(qū)域存儲(chǔ)出現(xiàn)索引信息時(shí)出現(xiàn)跨頁(yè)存儲(chǔ)的情況,將索引信息的大小設(shè)置為頁(yè)面大小的某個(gè)約數(shù)。新創(chuàng)建的對(duì)象數(shù)據(jù)的大小沒有固定的大小。
例如,在本實(shí)施例中,頁(yè)面大小為256個(gè)字節(jié),索引信息的大小為4個(gè)字節(jié),其中,索引信息主要包括:索引信息對(duì)應(yīng)的對(duì)象數(shù)據(jù)的所在的位置以及對(duì)象數(shù)據(jù)的大小,兩者各占2字節(jié)。
步驟302:判斷事務(wù)處理標(biāo)志位的值是否為true,是則取消事務(wù),報(bào)錯(cuò),返回執(zhí)行步驟103;否則報(bào)錯(cuò),返回執(zhí)行步驟103;
步驟303:在對(duì)象索引區(qū)域添加新創(chuàng)建對(duì)象數(shù)據(jù)的索引信息;
在本實(shí)施例中,本步驟具體為:
步驟a1:從數(shù)據(jù)全局信息區(qū)中獲取對(duì)象索引區(qū)域的偏移地址,并根據(jù)末位地址找到最后一條索引信息所在的頁(yè);
步驟a2:將當(dāng)前對(duì)象索引區(qū)域里的最后一條索引信息所在的頁(yè)作為當(dāng)前頁(yè)面,將當(dāng)前頁(yè)面的所有信息載入內(nèi)存;
步驟a3:判斷當(dāng)前頁(yè)面是否能存儲(chǔ)一條索引信息,如果是,則將新創(chuàng)建的索引信息存入內(nèi)存,否則,執(zhí)行步驟a4;
步驟a4:將當(dāng)前頁(yè)面的下一頁(yè)面作為當(dāng)前頁(yè)面,將當(dāng)前頁(yè)面的所有信息載入內(nèi)存,將新創(chuàng)建的索引信息存入內(nèi)存;
具體地,在本實(shí)施例中,將新創(chuàng)建的對(duì)象數(shù)據(jù)的地址信息和對(duì)象數(shù)據(jù)大小作為索引信息,記錄到對(duì)象索引區(qū)域中。
步驟a5:將當(dāng)前頁(yè)面的信息寫回對(duì)象索引區(qū)域,索引序號(hào)+1。
步驟304:在對(duì)象數(shù)據(jù)區(qū)域添加新創(chuàng)建的對(duì)象數(shù)據(jù);
在本實(shí)施例中,本步驟具體為:
步驟b1:從對(duì)象索引區(qū)域中獲得新創(chuàng)建的對(duì)象數(shù)據(jù)的偏移地址和大??;
步驟b2:將當(dāng)前對(duì)象索引區(qū)域中最后一條對(duì)象數(shù)據(jù)的最后一個(gè)字節(jié)所在的頁(yè)作為當(dāng)前頁(yè)面,將當(dāng)前頁(yè)面的所有信息載入內(nèi)存;
步驟b3:判斷當(dāng)前頁(yè)面是否能夠存儲(chǔ)新創(chuàng)建對(duì)象數(shù)據(jù),如果是,則將新創(chuàng)建對(duì)象數(shù)據(jù)存入內(nèi)存,將當(dāng)前頁(yè)面的數(shù)據(jù)寫回對(duì)象數(shù)據(jù)區(qū);否則,將當(dāng)前頁(yè)面存滿后,將當(dāng)前頁(yè)面的數(shù)據(jù)寫回對(duì)象數(shù)據(jù)區(qū),執(zhí)行步驟b4;
步驟b4:將當(dāng)前頁(yè)面的下一頁(yè)面作為當(dāng)前頁(yè)面,將新創(chuàng)建的對(duì)象數(shù)據(jù)存入內(nèi)存,判斷新創(chuàng)建的數(shù)據(jù)是否存完,如果存完,將當(dāng)前頁(yè)面的數(shù)據(jù)寫回對(duì)象數(shù)據(jù)區(qū),如果未存完,繼續(xù)執(zhí)行步驟b4;
步驟305:更新第二存儲(chǔ)區(qū)中的對(duì)象索引區(qū)域的位置信息和對(duì)象數(shù)據(jù)區(qū)域的位置信息;
具體地,在本實(shí)施例中,更新對(duì)象索引區(qū)域的位置信息,具體為更新對(duì)象索引區(qū)域里新創(chuàng)建的索引信息的末尾位置的偏移;更新對(duì)象數(shù)據(jù)區(qū)域的位置信息,具體為更新對(duì)象數(shù)據(jù)區(qū)域里新創(chuàng)建的對(duì)象數(shù)據(jù)的末尾位置的偏移。值得說(shuō)明的是,這里的偏移是起始位置相對(duì)于低地址(0)的偏移。
步驟306:判斷事務(wù)處理標(biāo)志位的值是否為true,是則返回執(zhí)行步驟103,否則執(zhí)行步驟307;
步驟307:將對(duì)象索引區(qū)域的位置信息和對(duì)象數(shù)據(jù)區(qū)域的位置信息存儲(chǔ)到第一存儲(chǔ)區(qū)的數(shù)據(jù)全局信息區(qū)域,返回執(zhí)行步驟103;
參見圖4,事務(wù)處理機(jī)制中當(dāng)?shù)诙瘮?shù)被調(diào)用時(shí)執(zhí)行修改數(shù)據(jù)操作:
步驟401:在對(duì)象索引區(qū)域通過索引序號(hào)查找需要修改的對(duì)象數(shù)據(jù)對(duì)應(yīng)的索引信息;
優(yōu)選地,在本實(shí)施例中,所述第二函數(shù)具體為修改函數(shù)。
具體地,在本實(shí)施例中,虛擬機(jī)將上層傳來(lái)的數(shù)據(jù)進(jìn)行解析,解析后得到需要修改的數(shù)據(jù)相對(duì)應(yīng)的索引信息的索引序號(hào),根據(jù)索引序號(hào),在對(duì)象索引區(qū)域查找需要修改的對(duì)象數(shù)據(jù)對(duì)應(yīng)的索引信息。
步驟402:通過索引信息在對(duì)象數(shù)據(jù)區(qū)域查找需要修改的對(duì)象數(shù)據(jù)所在的位置;
具體地,通過讀取索引信息里的關(guān)于對(duì)象數(shù)據(jù)的位置信息在對(duì)象數(shù)據(jù)區(qū)找到修改的對(duì)象數(shù)據(jù)所在的位置,即通過對(duì)象數(shù)據(jù)的偏移地址確定對(duì)象數(shù)據(jù)所在的頁(yè)號(hào)和頁(yè)內(nèi)偏移地址,具體為:
通過計(jì)算公式:(偏移地址+頁(yè)面大小-1)/頁(yè)面大小,得到的最終結(jié)果向下取整數(shù)得到需要修改的數(shù)據(jù)所在的頁(yè)號(hào);通過計(jì)算公式:偏移地址%頁(yè)面大小,得到需要修改的數(shù)據(jù)所在頁(yè)的頁(yè)內(nèi)偏移地址。
步驟403:判斷事務(wù)處理標(biāo)志位的值是否為true,是則執(zhí)行步驟405,否則執(zhí)行步驟404;
步驟404:直接修改第一存儲(chǔ)區(qū)域的相應(yīng)地址中的數(shù)據(jù),返回執(zhí)行步驟103;
步驟405:在第二存儲(chǔ)區(qū)中查找是否包含現(xiàn)有修改數(shù)據(jù)的修改記錄塊,是則執(zhí)行步驟406,否則執(zhí)行步驟407;
在本實(shí)施例中,第二存儲(chǔ)區(qū)中的修改記錄塊里面記錄了一處需要修改的對(duì)象數(shù)據(jù)的偏移地址、修改的長(zhǎng)度以及需要更新的數(shù)據(jù)。這里的偏移地址,是修改數(shù)據(jù)的首地址。
需要說(shuō)明的是,在本實(shí)施例中,當(dāng)需要修改數(shù)據(jù)時(shí),可能只對(duì)對(duì)象數(shù)據(jù)區(qū)的其中一個(gè)頁(yè)面的數(shù)據(jù)進(jìn)行一次或多次修改,也可能存在對(duì)對(duì)象數(shù)據(jù)區(qū)的多個(gè)頁(yè)面的數(shù)據(jù)進(jìn)行修改。
步驟406:更新第二存儲(chǔ)區(qū)中的需要修改的數(shù)據(jù)信息,返回執(zhí)行步驟103;
具體地,在本實(shí)施例中,有可能存在對(duì)一處數(shù)據(jù)進(jìn)行多次的修改,當(dāng)判斷第二存儲(chǔ)區(qū)中存有現(xiàn)有修改數(shù)據(jù)時(shí),為保證第二存儲(chǔ)區(qū)的修改記錄塊中的需要更新的數(shù)據(jù)是最新的,需要將更新的數(shù)據(jù)再次進(jìn)行更新。
步驟407:判斷第二存儲(chǔ)區(qū)剩余空間是否小于修改記錄塊的大小,如果是,則執(zhí)行步驟408,否則執(zhí)行步驟410;
具體地,當(dāng)判斷到第二存儲(chǔ)區(qū)中沒有包含現(xiàn)有的修改區(qū)域時(shí),需要將未包含的修改記錄存到第二存儲(chǔ)區(qū)中的修改記錄塊中,如果此時(shí)第二存儲(chǔ)區(qū)中不足以存下此修改記錄,則執(zhí)行步驟409,否則執(zhí)行步驟410。
步驟408:判斷數(shù)據(jù)備份區(qū)是否已滿,如果是,則取消事務(wù),報(bào)錯(cuò),返回執(zhí)行步驟103,否則執(zhí)行步驟409;
步驟409:將第二存儲(chǔ)區(qū)中的數(shù)據(jù)添加到數(shù)據(jù)備份區(qū),清除第二存儲(chǔ)區(qū)中的數(shù)據(jù),執(zhí)行步驟410;
步驟410:在第二存儲(chǔ)區(qū)中增加未包含的修改數(shù)據(jù)的修改記錄塊,返回執(zhí)行步驟103;
參見圖5,事務(wù)處理機(jī)制中當(dāng)?shù)谌瘮?shù)被調(diào)用時(shí)執(zhí)行讀取數(shù)據(jù)操作:
優(yōu)選地,在本實(shí)施例中,所述第三函數(shù)具體為讀取事務(wù)函數(shù)。
步驟501:在對(duì)象索引區(qū)域通過索引序號(hào)查找需要讀取的對(duì)象數(shù)據(jù)對(duì)應(yīng)的索引信息;
步驟502:根據(jù)索引信息在對(duì)象數(shù)據(jù)區(qū)域查找需要修改的對(duì)象數(shù)據(jù)所在的位置;
步驟503:讀取第一存儲(chǔ)區(qū)的相應(yīng)地址中的數(shù)據(jù),作為目標(biāo)數(shù)據(jù);
步驟504:判斷事務(wù)處理標(biāo)志位的值是否為true,是則執(zhí)行步驟505,否則返回執(zhí)行步驟103;
具體地,在本實(shí)施例中,如果事務(wù)處理標(biāo)志位的值是否為true,要讀取的數(shù)據(jù)可能部分包含在備份區(qū)和緩存區(qū)中,因此先讀取原始數(shù)據(jù)后,再讀取備份區(qū)和緩存中的數(shù)據(jù)與之合并。
步驟505:遍歷第一存儲(chǔ)區(qū)的數(shù)據(jù)備份區(qū)與讀取地址范圍相交的記錄塊,讀出相關(guān)記錄塊的數(shù)據(jù)與目標(biāo)數(shù)據(jù)進(jìn)行合并;
步驟506:遍歷第二存儲(chǔ)區(qū)中與讀取地址范圍相交的記錄塊,讀出相關(guān)記錄塊的數(shù)據(jù)與目標(biāo)數(shù)據(jù)進(jìn)行合并,返回執(zhí)行步驟103;
具體地,在本實(shí)施例中,在遍歷第二存儲(chǔ)區(qū)中與讀取地址范圍相交的記錄塊,讀出相關(guān)記錄塊的數(shù)據(jù)與目標(biāo)數(shù)據(jù)進(jìn)行合并后的數(shù)據(jù)作為最終讀取的數(shù)據(jù)。
參見圖6,在事務(wù)處理機(jī)制中當(dāng)?shù)诙?yīng)用程序接口被調(diào)用時(shí)提交事務(wù),具體步驟如下:
步驟601:判斷事務(wù)處理標(biāo)志事務(wù)處理標(biāo)志位的值是否為true,是則執(zhí)行步驟602,否則報(bào)錯(cuò),返回執(zhí)行步驟103;
優(yōu)選地,在本實(shí)施例中,所述第二應(yīng)用程序接口具體為提交事務(wù)(committranscation)接口。
步驟602:判斷第二存儲(chǔ)區(qū)是否存在數(shù)據(jù),如果是,則執(zhí)行步驟603,否則將事務(wù)標(biāo)標(biāo)志位設(shè)置成false,返回執(zhí)行步驟103;
步驟603:判斷第二存儲(chǔ)區(qū)中和第一存儲(chǔ)區(qū)中的數(shù)據(jù)備份區(qū)里是否只存在一個(gè)頁(yè)面數(shù)據(jù)的修改,如果是,則執(zhí)行步驟604,否則執(zhí)行步驟605;
在本實(shí)施例中,通過修改記錄塊里面的需要修改的對(duì)象數(shù)據(jù)的偏移地址、修改的長(zhǎng)度進(jìn)行判斷。偏移地址是指修改數(shù)據(jù)的首地址,按照修改的長(zhǎng)度從低地址到高地址的順序,找到需要修改的數(shù)據(jù)的起始地址,根據(jù)計(jì)算公式:(偏移地址+頁(yè)面大小-1)/頁(yè)面大小,得到的最終結(jié)果向下取整數(shù)得到需要修改的數(shù)據(jù)的所在的頁(yè)號(hào);(起始地址+頁(yè)面大小-1)/頁(yè)面大小,得到的最終結(jié)果向下取整數(shù)得到需要修改的數(shù)據(jù)所在的頁(yè)號(hào);
需要說(shuō)明的是,如果事務(wù)中,有新的對(duì)象被創(chuàng)建,則對(duì)象索引區(qū)和對(duì)象數(shù)據(jù)區(qū)的末尾位置信息會(huì)發(fā)生改變,這個(gè)變化先存在第二存儲(chǔ)區(qū),只有在事務(wù)提交時(shí),才真正存儲(chǔ)到第一存儲(chǔ)區(qū)的數(shù)據(jù)全局信息區(qū)。因此,在執(zhí)行完步驟603之后,還需判斷對(duì)象索引區(qū)位置信息和數(shù)據(jù)區(qū)位置信息沒有改變,即對(duì)第二存儲(chǔ)區(qū)的臨時(shí)全局信息和第一存儲(chǔ)區(qū)的全局信息進(jìn)行比較,如果是,則執(zhí)行步驟604,否則執(zhí)行步驟605。
步驟604:將修改后的數(shù)據(jù)寫入到對(duì)應(yīng)的對(duì)象數(shù)據(jù)區(qū)中,將事務(wù)標(biāo)志位設(shè)置成false,返回執(zhí)行步驟103;
具體地,在本實(shí)施例中,根據(jù)第二存儲(chǔ)區(qū)中修改記錄塊記錄的數(shù)據(jù),將對(duì)象數(shù)據(jù)區(qū)里需要修改的數(shù)據(jù)讀到內(nèi)存中并進(jìn)行修改,然后將修改后的數(shù)據(jù)寫回對(duì)象數(shù)據(jù)區(qū)的相應(yīng)頁(yè)面里,然后將第二存儲(chǔ)區(qū)里的數(shù)據(jù)清空,結(jié)束提交事務(wù)。
步驟605:將第二存儲(chǔ)區(qū)中的修改記錄塊提交到數(shù)據(jù)備份區(qū);
具體地,在本實(shí)施例中,如果是對(duì)對(duì)象數(shù)據(jù)區(qū)的多個(gè)頁(yè)面的數(shù)據(jù)進(jìn)行修改,即使第二存儲(chǔ)區(qū)沒有存滿,也需要將第二存儲(chǔ)區(qū)的數(shù)據(jù)提交到數(shù)據(jù)備份區(qū),防止提交過程中虛擬機(jī)掉電后,第二存儲(chǔ)區(qū)中的數(shù)據(jù)全部丟失,等到下次上電,第二存儲(chǔ)區(qū)會(huì)從數(shù)據(jù)備份區(qū)讀取之前保存的數(shù)據(jù),繼續(xù)進(jìn)行修改。
需要說(shuō)明的是,將第二存儲(chǔ)區(qū)中的數(shù)據(jù)提交到數(shù)據(jù)備份區(qū)時(shí),還包括:將事務(wù)提交標(biāo)識(shí)開始的標(biāo)識(shí)提交到數(shù)據(jù)備份區(qū)。
步驟606:將第二存儲(chǔ)區(qū)中的對(duì)象索引區(qū)位置信息、數(shù)據(jù)區(qū)位置信息、事務(wù)標(biāo)志值寫入到第一存儲(chǔ)區(qū)中的數(shù)據(jù)全局信息區(qū);
步驟607:遍歷讀取所有數(shù)據(jù)備份區(qū)中的修改記錄塊,并將修改后的數(shù)據(jù)寫入到對(duì)應(yīng)的對(duì)象數(shù)據(jù)區(qū)中;
具體地,在本實(shí)施例中,遍歷讀取所有數(shù)據(jù)備份區(qū)中的修改記錄塊,根據(jù)修改記錄塊里的記錄將對(duì)象數(shù)據(jù)區(qū)里需要修改的數(shù)據(jù)讀到內(nèi)存中并進(jìn)行修改,然后將修改后的數(shù)據(jù)寫回對(duì)象數(shù)據(jù)區(qū)的相應(yīng)頁(yè)面里。
進(jìn)一步地,在遍歷讀取所有數(shù)據(jù)備份區(qū)中的修改記錄塊后,將事務(wù)提交完成標(biāo)志提交到數(shù)據(jù)備份區(qū)。
步驟608:將事務(wù)標(biāo)志值設(shè)置成false,并將事務(wù)標(biāo)志值寫入到數(shù)據(jù)全局信息區(qū);
步驟609:清空第二存儲(chǔ)區(qū)中的所有數(shù)據(jù),清除數(shù)據(jù)備份區(qū)數(shù)據(jù),返回執(zhí)行步驟103。
參見圖7,在事務(wù)處理機(jī)制中當(dāng)?shù)谌龖?yīng)用程序接口被調(diào)用時(shí)取消事務(wù),具體步驟如下:
步驟701:判斷事務(wù)處理標(biāo)志位的值是否為true,是則執(zhí)行步驟702,否則返回執(zhí)行步驟103;
優(yōu)選地,在本實(shí)施例中,所述第三應(yīng)用程序接口具體為終止事務(wù)(aborttranscation)接口。
步驟702:判斷是否有數(shù)據(jù)在數(shù)據(jù)備份區(qū),如果有,清除數(shù)據(jù)備份區(qū)的數(shù)據(jù)后,執(zhí)行步驟703,否則直接執(zhí)行步驟703;
步驟703:將事務(wù)處理標(biāo)志位設(shè)置為false,清除緩存區(qū)的數(shù)據(jù),返回步驟103。
參見圖8,本發(fā)明實(shí)施例提供了一種事務(wù)處理的優(yōu)化處理方法中掉電保護(hù)的方法,具體步驟如下:
步驟801:從數(shù)據(jù)全局信息區(qū)域獲得事務(wù)處理標(biāo)志位;
步驟802:判斷事務(wù)處理標(biāo)志位的值是否為true,如果是,則執(zhí)行步驟803,否則返回執(zhí)行步驟103;
步驟803:獲取數(shù)據(jù)備份區(qū)的第一個(gè)修改記錄塊,作為當(dāng)前修改記錄塊;
優(yōu)選地,由數(shù)據(jù)備份區(qū)的高地址開始,向低地址依次獲取修改記錄塊的數(shù)據(jù),直至遍歷完數(shù)據(jù)備份區(qū)的所有修改記錄塊。
步驟804:判斷當(dāng)前修改記錄塊是否有修改數(shù)據(jù),如果是則執(zhí)行步驟805,否則,執(zhí)行步驟807;
步驟805:從當(dāng)前修改記錄塊里獲得需要修改對(duì)象數(shù)據(jù)的數(shù)據(jù),將修改后的數(shù)據(jù)寫入到對(duì)應(yīng)的對(duì)象數(shù)據(jù)區(qū)中;
具體地,在本實(shí)施例中,從當(dāng)前修改記錄塊里獲得需要修改對(duì)象數(shù)據(jù)的數(shù)據(jù)后,根據(jù)修改記錄塊里的記錄將對(duì)象數(shù)據(jù)區(qū)里需要修改的數(shù)據(jù)讀到內(nèi)存中并進(jìn)行修改,然后將修改后的數(shù)據(jù)寫回對(duì)象數(shù)據(jù)區(qū)的相應(yīng)頁(yè)面里。
步驟806:獲取當(dāng)前修改記錄塊的下一個(gè)修改記錄塊,返回步驟804;
步驟807:設(shè)置事務(wù)處理標(biāo)志值為false,清除數(shù)據(jù)備份區(qū)的數(shù)據(jù),返回執(zhí)行步驟103。
實(shí)施例三
本實(shí)施例提供一種虛擬機(jī)事務(wù)處理的優(yōu)化處理方法,方法具體包括:
步驟s1:虛擬機(jī)執(zhí)行應(yīng)用指令,當(dāng)執(zhí)行到第一應(yīng)用接口時(shí),初始化事務(wù)狀態(tài)為開始事務(wù);當(dāng)創(chuàng)建對(duì)象數(shù)據(jù)時(shí),執(zhí)行步驟s2;當(dāng)修改對(duì)象數(shù)據(jù)時(shí),執(zhí)行步驟s3;當(dāng)執(zhí)行到第二應(yīng)用程序接口時(shí),執(zhí)行步驟s4;
步驟s2:虛擬機(jī)判斷非易失性存儲(chǔ)區(qū)的剩余空間是否足夠存儲(chǔ)接收到的新創(chuàng)建的對(duì)象數(shù)據(jù)和索引信息,如果空間不足,則報(bào)錯(cuò),返回步驟s1,如果空間充足,則根據(jù)對(duì)象數(shù)據(jù)生成索引信息,在非易失性存儲(chǔ)區(qū)添加索引信息和對(duì)象數(shù)據(jù),并在隨機(jī)存取存儲(chǔ)區(qū)中更新索引信息的位置信息和對(duì)象數(shù)據(jù)的位置信息后,判斷事務(wù)狀態(tài)是否為開始事務(wù),如果不是,則在非易失性存儲(chǔ)區(qū)中存儲(chǔ)索引信息的位置信息和對(duì)象數(shù)據(jù)的位置信息,如果是,則返回步驟s1;
步驟s3:虛擬機(jī)根據(jù)接收到的唯一標(biāo)識(shí)符確定需要修改的對(duì)象數(shù)據(jù)的位置信息,判斷事務(wù)狀態(tài)是否為開始事務(wù),如果不是,則根據(jù)位置信息在非易失性存儲(chǔ)區(qū)修改對(duì)象數(shù)據(jù);如果是,則在存儲(chǔ)存取存儲(chǔ)區(qū)中更新需要修改的對(duì)象的修改記錄,返回步驟s1;
步驟s4:虛擬機(jī)判斷事務(wù)狀態(tài)是否為開始事務(wù),如果不是,則報(bào)錯(cuò);如果是,則遍歷非易失性存儲(chǔ)區(qū)和隨機(jī)存取存儲(chǔ)區(qū)的修改記錄并統(tǒng)計(jì)修改頁(yè)數(shù)量,將修改數(shù)據(jù)直接寫入到非易失性存儲(chǔ)區(qū)中,將事務(wù)狀態(tài)更新為結(jié)束事務(wù),返回步驟s1。
具體地,步驟s2中,在非易失性存儲(chǔ)區(qū)添加索引信息和對(duì)象數(shù)據(jù),具體為:
在非易失性存儲(chǔ)區(qū)的對(duì)象索引區(qū)域添加索引信息,在非易失性存儲(chǔ)區(qū)的對(duì)象數(shù)據(jù)區(qū)域添加對(duì)象數(shù)據(jù)。
在本實(shí)施例中,在非易失性存儲(chǔ)區(qū)的對(duì)象索引區(qū)域添加索引信息,具體為:
步驟x1:從非易失性存儲(chǔ)區(qū)的數(shù)據(jù)全局信息區(qū)中獲取當(dāng)前對(duì)象索引區(qū)域的偏移地址,并根據(jù)偏移地址找到最后一條索引信息所在的頁(yè)面;
步驟x2:將當(dāng)前對(duì)象索引區(qū)域里的最后一條索引信息所在的頁(yè)面作為當(dāng)前頁(yè)面,將當(dāng)前頁(yè)面的所有信息載入隨機(jī)存取存儲(chǔ)區(qū)中;
步驟x3:判斷當(dāng)前頁(yè)面是否還能存儲(chǔ)一條索引信息,如果是,則將索引信息存入隨機(jī)存取存儲(chǔ)區(qū)中,否則,執(zhí)行步驟x4;
步驟x4:將當(dāng)前頁(yè)面的下一頁(yè)面作為當(dāng)前頁(yè)面,將當(dāng)前頁(yè)面的所有信息載入隨機(jī)存取存儲(chǔ)區(qū)中,將索引信息存入隨機(jī)存取存儲(chǔ)區(qū)中;
步驟x5:將當(dāng)前頁(yè)面的所有信息寫回對(duì)象索引區(qū)域;
在非易失性存儲(chǔ)區(qū)的對(duì)象數(shù)據(jù)區(qū)域添加對(duì)象數(shù)據(jù),具體為:
步驟y1:從索引信息中獲得接收到的新創(chuàng)建的對(duì)象數(shù)據(jù)的偏移地址和大??;
步驟y2:將當(dāng)前對(duì)象索引區(qū)域中最后一條對(duì)象數(shù)據(jù)的最后一個(gè)字節(jié)所在的頁(yè)面作為當(dāng)前頁(yè)面,將當(dāng)前頁(yè)面的所有信息載入隨機(jī)存取存儲(chǔ)區(qū)中;
步驟y3:判斷當(dāng)前頁(yè)面是否能夠存儲(chǔ)新創(chuàng)建對(duì)象數(shù)據(jù),如果是,則將新創(chuàng)建對(duì)象數(shù)據(jù)存入隨機(jī)存取存儲(chǔ)區(qū)中,將當(dāng)前頁(yè)面的數(shù)據(jù)寫回對(duì)象數(shù)據(jù)區(qū);否則,將當(dāng)前頁(yè)面存滿后,將當(dāng)前頁(yè)面的數(shù)據(jù)寫回對(duì)象數(shù)據(jù)區(qū),執(zhí)行步驟y4;
步驟y4:將當(dāng)前頁(yè)面的下一頁(yè)面作為當(dāng)前頁(yè)面,將接收到的新創(chuàng)建的對(duì)象數(shù)據(jù)存入隨機(jī)存取存儲(chǔ)區(qū)中,判斷新創(chuàng)建的數(shù)據(jù)是否存完,如果存完,將當(dāng)前頁(yè)面的數(shù)據(jù)寫回對(duì)象數(shù)據(jù)區(qū)域,如果未存完,繼續(xù)執(zhí)行步驟y4。
優(yōu)選地,步驟s2中,在隨機(jī)存取存儲(chǔ)區(qū)中更新索引信息和對(duì)象數(shù)據(jù)的位置信息,具體包括:更新隨機(jī)存取存儲(chǔ)區(qū)中對(duì)象索引區(qū)域的位置信息和對(duì)象數(shù)據(jù)區(qū)域的位置信息;
在非易失性存儲(chǔ)區(qū)中存儲(chǔ)索引信息和對(duì)象數(shù)據(jù)的位置信息,具體包括:在非易失性存儲(chǔ)區(qū)中存儲(chǔ)索引區(qū)域的位置信息和對(duì)象數(shù)據(jù)區(qū)域的位置信息;
判斷非易失性存儲(chǔ)區(qū)的剩余空間是否足夠存儲(chǔ)接收到的新創(chuàng)建的對(duì)象數(shù)據(jù)和索引信息,具體為:根據(jù)隨機(jī)存取存儲(chǔ)區(qū)中對(duì)象索引區(qū)域和對(duì)象數(shù)據(jù)區(qū)域的位置信息確定非易失性存儲(chǔ)區(qū)域剩余空間的大小后,判斷非易失性存儲(chǔ)區(qū)的剩余空間是否足夠存儲(chǔ)接收到的新創(chuàng)建的對(duì)象數(shù)據(jù)和索引信息。
具體地,步驟s2中,判斷非易失性存儲(chǔ)區(qū)的剩余空間是否足夠存儲(chǔ)接收到的新創(chuàng)建的對(duì)象數(shù)據(jù)和索引信息,具體為:根據(jù)隨機(jī)存取存儲(chǔ)區(qū)中對(duì)象索引區(qū)域和對(duì)象數(shù)據(jù)區(qū)域的位置信息確定非易失性存儲(chǔ)區(qū)域剩余空間的大小后,判斷索引信息的大小加上接收到的新創(chuàng)建的對(duì)象數(shù)據(jù)大小是否小于或者等于非易失性存儲(chǔ)區(qū)的空白區(qū)域的大小。
優(yōu)選地,步驟s3中,根據(jù)接收到的唯一標(biāo)識(shí)符確定需要修改的對(duì)象數(shù)據(jù)的位置信息,具體為:
根據(jù)接收到的唯一標(biāo)識(shí)符確定需要修改的對(duì)象數(shù)據(jù)的索引信息,根據(jù)索引信息確定需要修改的對(duì)象數(shù)據(jù)在非易失性存儲(chǔ)區(qū)中的位置信息。
在本實(shí)施例中,根據(jù)索引信息確定需要修改的對(duì)象數(shù)據(jù)在非易失性存儲(chǔ)區(qū)中的位置信息,具體為:
通過讀取索引信息里對(duì)象數(shù)據(jù)的偏移地址確定需要修改的對(duì)象數(shù)據(jù)在非易失性存儲(chǔ)區(qū)中所在的頁(yè)號(hào)和頁(yè)內(nèi)偏移地址。
在本實(shí)施例中,確定需要修改的對(duì)象數(shù)據(jù)在非易失性存儲(chǔ)區(qū)中所在的頁(yè)號(hào)和頁(yè)內(nèi)偏移地址,具體為:
用頁(yè)面大小減去1的差值與偏移地址相加,得到的和除以頁(yè)面的大小,所得最終結(jié)果向下取整數(shù)得到需要修改的數(shù)據(jù)所在的頁(yè)號(hào);用偏移地址對(duì)頁(yè)面大小取余,所得最終結(jié)果即為需要修改的數(shù)據(jù)所在頁(yè)的頁(yè)內(nèi)偏移地址。
優(yōu)選地,步驟s3中,在存儲(chǔ)存取存儲(chǔ)區(qū)中更新需要修改的對(duì)象的修改記錄之前,還包括:虛擬機(jī)判斷隨機(jī)存取存儲(chǔ)區(qū)中是否存在包含位置信息的修改記錄,如果存在修改記錄,則更新修改記錄中的修改數(shù)據(jù)為接收到的修改數(shù)據(jù),返回步驟s1;如果不存在,則在隨機(jī)存取存儲(chǔ)區(qū)中添加包含需要修改的對(duì)象數(shù)據(jù)的位置信息、大小和接收到的修改數(shù)據(jù)的修改記錄,返回步驟s1。
具體地,在隨機(jī)存取存儲(chǔ)區(qū)中添加包含需要修改的對(duì)象數(shù)據(jù)的位置信息、大小和接收到的修改數(shù)據(jù)的修改記錄之前,還包括:
步驟c1:判斷隨機(jī)存取存儲(chǔ)區(qū)剩余空間是否足夠存儲(chǔ)包含需要修改的對(duì)象數(shù)據(jù)的位置信息、大小和修改數(shù)據(jù)的修改記錄,如果空間不足,則執(zhí)行步驟c2,如果空間足夠,則執(zhí)行步驟c4;
步驟c2:判斷非易失性存儲(chǔ)區(qū)中的數(shù)據(jù)備份區(qū)是否已滿,如果是,則取消事務(wù),報(bào)錯(cuò),返回執(zhí)行步驟s1,否則執(zhí)行步驟c3;
步驟c3:將隨機(jī)存取存儲(chǔ)區(qū)中的修改記錄提交到數(shù)據(jù)備份區(qū),并清空隨機(jī)存取存儲(chǔ)區(qū)中的修改記錄,執(zhí)行步驟c4;
步驟c4:在隨機(jī)存取存儲(chǔ)區(qū)中增加包含需要修改的對(duì)象數(shù)據(jù)的位置信息、大小和接收到的修改數(shù)據(jù)的修改記錄。
更具體地,步驟c1具體為:判斷隨機(jī)存取存儲(chǔ)區(qū)剩余空間是否足夠存儲(chǔ)包含需要修改的對(duì)象數(shù)據(jù)的位置信息、大小和修改數(shù)據(jù)的修改記錄塊,如果空間不足,則執(zhí)行步驟c2,如果空間足夠,則執(zhí)行步驟c4;
步驟c3具體為:將隨機(jī)存取存儲(chǔ)區(qū)中的修改記錄塊提交到數(shù)據(jù)備份區(qū),并清空隨機(jī)存取存儲(chǔ)區(qū)中的修改記錄塊,執(zhí)行步驟c4;
步驟c4具體為:在隨機(jī)存取存儲(chǔ)區(qū)中增加包含需要修改的對(duì)象數(shù)據(jù)的位置信息、大小和接收到的修改數(shù)據(jù)的修改記錄塊。
進(jìn)一步地,步驟s4中,遍歷非易失性存儲(chǔ)區(qū)和隨機(jī)存取存儲(chǔ)區(qū)的修改記錄,具體為:遍歷數(shù)據(jù)備份區(qū)和隨機(jī)存取存儲(chǔ)區(qū)的修改記錄塊,讀取修改記錄塊的修改記錄,得到各個(gè)修改記錄中需要修改的對(duì)象數(shù)據(jù)的位置信息和大小。
優(yōu)選地,步驟s4中,遍歷非易失性存儲(chǔ)區(qū)和隨機(jī)存取存儲(chǔ)區(qū)的修改記錄之前,還包括:判斷隨機(jī)存取存儲(chǔ)區(qū)是否存在修改記錄,如果不存在修改記錄,則將事務(wù)狀態(tài)更新為結(jié)束事務(wù),返回步驟s1,如果存在修改記錄,則執(zhí)行遍歷非易失性存儲(chǔ)區(qū)和隨機(jī)存取存儲(chǔ)區(qū)的修改記錄。
在本實(shí)施例中,步驟s4中,統(tǒng)計(jì)修改頁(yè)數(shù)量,具體為:虛擬機(jī)遍歷非易失性存儲(chǔ)區(qū)和隨機(jī)存取存儲(chǔ)區(qū)的修改記錄,得到各個(gè)修改記錄中需要修改的對(duì)象數(shù)據(jù)的位置信息和大小后,虛擬機(jī)根據(jù)各個(gè)修改記錄中需要修改的對(duì)象數(shù)據(jù)的位置信息和大小統(tǒng)計(jì)修改頁(yè)的數(shù)量。
優(yōu)選地,步驟s4中,將修改數(shù)據(jù)直接寫入到非易失性存儲(chǔ)區(qū)中之前,還包括:虛擬機(jī)判斷修改頁(yè)的數(shù)量是否大于預(yù)定值,如果虛擬機(jī)判斷修改頁(yè)的數(shù)量大于預(yù)定值,則將隨機(jī)存取存儲(chǔ)區(qū)中的修改記錄提交到非易失性存儲(chǔ)區(qū)后,遍歷讀取非易失性存儲(chǔ)區(qū)中的修改記錄,并將接收到的修改數(shù)據(jù)寫入到非易失性存儲(chǔ)區(qū)中,將事務(wù)狀態(tài)更新為結(jié)束事務(wù),返回步驟s1;如果虛擬機(jī)判斷修改頁(yè)的數(shù)量小于或等于預(yù)定值,則將修改數(shù)據(jù)直接寫入到非易失性存儲(chǔ)區(qū)中,將事務(wù)狀態(tài)更新為結(jié)束事務(wù),返回步驟s1。
在本實(shí)施例中,步驟s1中還包括:
當(dāng)讀取對(duì)象數(shù)據(jù)時(shí),執(zhí)行步驟s5;當(dāng)執(zhí)行到第三應(yīng)用接口時(shí),執(zhí)行步驟s6;當(dāng)執(zhí)行到其它指令時(shí),根據(jù)執(zhí)行指令進(jìn)行相應(yīng)操作;
步驟s5:虛擬機(jī)根據(jù)接收到的唯一標(biāo)識(shí)符確定需要讀取的對(duì)象數(shù)據(jù)的位置信息,讀取非易失性存儲(chǔ)區(qū)位置信息中的對(duì)象數(shù)據(jù)作為目標(biāo)數(shù)據(jù),判斷事務(wù)狀態(tài)是否為開始事務(wù),如果不是,則報(bào)錯(cuò),返回步驟s1,如果是,則在非易失性存儲(chǔ)區(qū)和隨機(jī)存取存儲(chǔ)區(qū)查找并讀取與位置信息相同的對(duì)象數(shù)據(jù),并與目標(biāo)數(shù)據(jù)進(jìn)行合并得到需要讀取的數(shù)據(jù),將事務(wù)狀態(tài)更新為結(jié)束事務(wù),返回步驟s1;
步驟s6:虛擬機(jī)判斷事務(wù)狀態(tài)是否為開始事務(wù),如果不是,則報(bào)錯(cuò),返回步驟s1,如果是,則判斷數(shù)據(jù)備份區(qū)是否有修改記錄,如果有,則先清除數(shù)據(jù)備份區(qū)的修改記錄后,將事務(wù)狀態(tài)更新為結(jié)束事務(wù),再清除隨機(jī)存取存儲(chǔ)區(qū)的修改記錄,返回步驟s1;如果沒有,則將事務(wù)狀態(tài)更新為結(jié)束事務(wù),清除隨機(jī)存取存儲(chǔ)區(qū)的修改記錄后,返回步驟s1。
在本實(shí)施例中,步驟s5中,根據(jù)接收到的唯一標(biāo)識(shí)符確定需要讀取的對(duì)象數(shù)據(jù)的位置信息,具體為:
根據(jù)接收到的唯一標(biāo)識(shí)符確定需要讀取的對(duì)象數(shù)據(jù)的索引信息,根據(jù)索引信息確定需要讀取的對(duì)象數(shù)據(jù)在非易失性存儲(chǔ)區(qū)中的位置信息。
在本實(shí)施例中,步驟s5中,在非易失性存儲(chǔ)區(qū)和隨機(jī)存取存儲(chǔ)區(qū)查找并讀取與位置相同的對(duì)象數(shù)據(jù),具體包括:遍歷非易失性存儲(chǔ)區(qū)中的數(shù)據(jù)備份區(qū)和隨機(jī)存取存儲(chǔ)區(qū)查找包含位置的修改記錄塊,讀出修改記錄塊的修改數(shù)據(jù)并與目標(biāo)數(shù)據(jù)合并。
優(yōu)選地,步驟s1之前還包括:
步驟f1:判斷是否啟動(dòng)掉電保護(hù),是則啟動(dòng)掉電保護(hù),執(zhí)行步驟s1,否則執(zhí)行步驟f2;
步驟f2:虛擬機(jī)進(jìn)行事務(wù)處理初始化,執(zhí)行步驟s1。
具體地,啟動(dòng)掉電保護(hù)具體包括:
判斷事務(wù)狀態(tài)是否為開始事務(wù),如果不是,則報(bào)錯(cuò),返回步驟s1,如果是,則獲取數(shù)據(jù)備份區(qū)的第一條修改記錄,作為當(dāng)前修改記錄,判斷當(dāng)前修改記錄是否存有修改數(shù)據(jù),如果沒有,則將事務(wù)狀態(tài)更新為結(jié)束事務(wù),清除數(shù)據(jù)備份區(qū)的數(shù)據(jù)后,返回步驟s1,如果有,則從當(dāng)前修改記錄里獲得修改數(shù)據(jù),根據(jù)修改記錄中的位置信息將修改數(shù)據(jù)寫入到非易失性存儲(chǔ)區(qū)中,并獲取當(dāng)前修改記錄的下一條修改記錄,作為當(dāng)前修改記錄,繼續(xù)判斷當(dāng)前修改記錄是否存有修改數(shù)據(jù)。
在本實(shí)施例中,步驟s2中判斷事務(wù)狀態(tài)是否為開始事務(wù),具體為:判斷事務(wù)處理標(biāo)志位的值是否有效,是則返回步驟s1,否則在非易失性存儲(chǔ)區(qū)中存儲(chǔ)索引信息的位置信息和對(duì)象數(shù)據(jù)的位置信息;
步驟s3中判斷事務(wù)狀態(tài)是否為開始事務(wù),具體為:判斷事務(wù)處理標(biāo)志位的值是否有效,是則在存儲(chǔ)存取存儲(chǔ)區(qū)中更新需要修改的對(duì)象的修改記錄,返回步驟s1,否則根據(jù)位置信息在非易失性存儲(chǔ)區(qū)修改對(duì)象數(shù)據(jù);
步驟s4中判斷事務(wù)狀態(tài)是否為開始事務(wù),具體為:判斷事務(wù)處理標(biāo)志位的值是否有效,是則遍歷非易失性存儲(chǔ)區(qū)和隨機(jī)存取存儲(chǔ)區(qū)的修改記錄并統(tǒng)計(jì)修改頁(yè)數(shù)量,否則報(bào)錯(cuò);
將事務(wù)狀態(tài)更新為結(jié)束事務(wù),具體為:將事務(wù)處理標(biāo)志位的值置為無(wú)效。
具體地,步驟s4中,將修改數(shù)據(jù)直接寫入到非易失性存儲(chǔ)區(qū)之前,還包括:將事務(wù)處理標(biāo)志位的值寫入到非易失性存儲(chǔ)區(qū);
步驟f1中啟動(dòng)掉電保護(hù)后,還包括:從非易失性存儲(chǔ)區(qū)獲得事務(wù)處理標(biāo)志位的值。
在本實(shí)施例中,步驟f2具體包括:清除隨機(jī)存取存儲(chǔ)區(qū)中的所有數(shù)據(jù),將事務(wù)處理標(biāo)志位的值置為無(wú)效。
實(shí)施例四
本實(shí)施例提供一種虛擬機(jī)事務(wù)處理的優(yōu)化處理裝置,參見圖9,裝置具體包括:
執(zhí)行模塊401,用于執(zhí)行應(yīng)用指令;用于當(dāng)?shù)诙袛嗄K408判斷事務(wù)狀態(tài)是開始事務(wù)時(shí)執(zhí)行應(yīng)用指令;用于當(dāng)?shù)诙履K412在存儲(chǔ)存取存儲(chǔ)區(qū)中更新需要修改的對(duì)象的修改記錄后執(zhí)行應(yīng)用指令;還用于當(dāng)?shù)谌履K416將事務(wù)狀態(tài)更新為結(jié)束事務(wù)后執(zhí)行應(yīng)用指令;
第一初始化模塊402,用于當(dāng)執(zhí)行模塊401執(zhí)行到第一應(yīng)用接口時(shí),初始化事務(wù)狀態(tài)為開始事務(wù);
第一判斷模塊403,用于當(dāng)執(zhí)行模塊401執(zhí)行創(chuàng)建對(duì)象數(shù)據(jù)時(shí),判斷非易失性存儲(chǔ)區(qū)的剩余空間是否足夠存儲(chǔ)接收到的新創(chuàng)建的對(duì)象數(shù)據(jù)和索引信息;
報(bào)錯(cuò)模塊404,用于當(dāng)?shù)谝慌袛嗄K403判斷非易失性存儲(chǔ)區(qū)的剩余空間不夠存儲(chǔ)接收到的新創(chuàng)建的對(duì)象數(shù)據(jù)和索引信息時(shí),報(bào)錯(cuò);還用于當(dāng)?shù)诙袛嗄K408判斷事務(wù)狀態(tài)不是開始事務(wù)時(shí),報(bào)錯(cuò);
生成模塊405,用于當(dāng)?shù)谝慌袛嗄K403判斷非易失性存儲(chǔ)區(qū)的剩余空間足夠存儲(chǔ)接收到的新創(chuàng)建的對(duì)象數(shù)據(jù)和索引信息時(shí),根據(jù)對(duì)象數(shù)據(jù)生成索引信息;
第一添加模塊406,用于在非易失性存儲(chǔ)區(qū)存儲(chǔ)生成模塊405生成的索引信息和對(duì)象數(shù)據(jù);
第一更新模塊407,用于在隨機(jī)存取存儲(chǔ)區(qū)中更新索引信息的位置信息和對(duì)象數(shù)據(jù)的位置信息;
第二判斷模塊408,用于當(dāng)?shù)谝桓履K407在隨機(jī)存取存儲(chǔ)區(qū)中更新索引信息的位置信息和對(duì)象數(shù)據(jù)的位置信息后,判斷事務(wù)狀態(tài)是否為開始事務(wù);用于當(dāng)?shù)谝欢ㄎ荒K410確定需要修改的對(duì)象數(shù)據(jù)的位置信息后,判斷事務(wù)狀態(tài)是否為開始事務(wù);還用于當(dāng)執(zhí)行模塊401到第二應(yīng)用程序接口時(shí),判斷事務(wù)狀態(tài)是否為開始事務(wù);
存儲(chǔ)模塊409,用于當(dāng)?shù)诙袛嗄K408判斷事務(wù)狀態(tài)不是為開始事務(wù)時(shí),在非易失性存儲(chǔ)區(qū)中存儲(chǔ)索引信息的位置信息和對(duì)象數(shù)據(jù)的位置信息;
第一定位模塊410,用于當(dāng)執(zhí)行模塊401執(zhí)行修改對(duì)象數(shù)據(jù)的指令后,根據(jù)接收到的唯一標(biāo)識(shí)符確定需要修改的對(duì)象數(shù)據(jù)的位置信息;
修改模塊411,用于當(dāng)?shù)诙袛嗄K408判斷事務(wù)狀態(tài)不是開始事務(wù)時(shí),根據(jù)位置信息在非易失性存儲(chǔ)區(qū)修改對(duì)象數(shù)據(jù);
第二更新模塊412,用于當(dāng)執(zhí)行模塊401執(zhí)行修改對(duì)象數(shù)據(jù)的指令時(shí)且當(dāng)?shù)诙袛嗄K408判斷事務(wù)狀態(tài)是開始事務(wù)時(shí),在存儲(chǔ)存取存儲(chǔ)區(qū)中更新需要修改的對(duì)象的修改記錄;
第一遍歷模塊413,用于當(dāng)執(zhí)行模塊401執(zhí)行到第二應(yīng)用程序接口時(shí)且當(dāng)?shù)诙袛嗄K408判斷事務(wù)狀態(tài)為開始事務(wù)時(shí),遍歷非易失性存儲(chǔ)區(qū)和隨機(jī)存取存儲(chǔ)區(qū)的修改記錄;
統(tǒng)計(jì)模塊414,用于當(dāng)?shù)谝槐闅v模塊413遍歷非易失性存儲(chǔ)區(qū)和隨機(jī)存取存儲(chǔ)區(qū)的修改記錄后,統(tǒng)計(jì)修改頁(yè)數(shù)量;
第一寫數(shù)據(jù)模塊415,用于將修改數(shù)據(jù)直接寫入到非易失性存儲(chǔ)區(qū)中;
第三更新模塊416,用于當(dāng)?shù)谝粚憯?shù)據(jù)模塊415將修改數(shù)據(jù)直接寫入到非易失性存儲(chǔ)區(qū)后,將事務(wù)狀態(tài)更新為結(jié)束事務(wù)。
在本實(shí)施例中,第一添加模塊406具體包括:第一添加子模塊和第二添加子模塊;
第一添加子模塊,用于在非易失性存儲(chǔ)區(qū)的對(duì)象索引區(qū)域添加索引信息;
第二添加子模塊,用于在非易失性存儲(chǔ)區(qū)的對(duì)象數(shù)據(jù)區(qū)域添加對(duì)象數(shù)據(jù)。
具體地,第一添加子模塊,具體包括:查找單元、第一作為單元、第一判斷單元、存儲(chǔ)單元、第二作為單元、第二存儲(chǔ)單元、第一寫數(shù)據(jù)單元;第二添加子模塊具體包括:接收單元、第三作為單元、第二判斷單元、第二寫數(shù)據(jù)單元、第三寫數(shù)據(jù)單元、第四作為單元、第三判斷單元和第四寫數(shù)據(jù)單元;
查找單元,用于從非易失性存儲(chǔ)區(qū)的數(shù)據(jù)全局信息區(qū)中獲取當(dāng)前對(duì)象索引區(qū)域的偏移地址,并根據(jù)偏移地址找到最后一條索引信息所在的頁(yè)面;
第一作為單元,用于將當(dāng)前對(duì)象索引區(qū)域里的最后一條索引信息所在的頁(yè)面作為當(dāng)前頁(yè)面,將當(dāng)前頁(yè)面的所有信息載入隨機(jī)存取存儲(chǔ)區(qū)中;
第一判斷單元,用于判斷當(dāng)前頁(yè)面是否還能存儲(chǔ)一條索引信息;
第一存儲(chǔ)單元,用于當(dāng)?shù)谝慌袛鄦卧袛喈?dāng)前頁(yè)面還能存儲(chǔ)一條索引信息時(shí),將索引信息存入隨機(jī)存取存儲(chǔ)區(qū)中;
第二作為單元,用于當(dāng)?shù)谝慌袛鄦卧袛喈?dāng)前頁(yè)面不能存儲(chǔ)一條索引信息時(shí),將當(dāng)前頁(yè)面的下一頁(yè)面作為當(dāng)前頁(yè)面;
第二存儲(chǔ)單元,用于將當(dāng)前頁(yè)面的所有信息載入隨機(jī)存取存儲(chǔ)區(qū)中,將索引信息存入隨機(jī)存取存儲(chǔ)區(qū)中;
第一寫數(shù)據(jù)單元,用于將當(dāng)前頁(yè)面的信息寫回對(duì)象索引區(qū)域;
接收單元,用于從索引信息中獲得接收到的新創(chuàng)建的對(duì)象數(shù)據(jù)的偏移地址和大?。?/p>
第三作為單元,用于將當(dāng)前對(duì)象索引區(qū)域中最后一條對(duì)象數(shù)據(jù)的最后一個(gè)字節(jié)所在的頁(yè)面作為當(dāng)前頁(yè)面,將當(dāng)前頁(yè)面的所有信息載入隨機(jī)存取存儲(chǔ)區(qū)中;
第二判斷單元,用于判斷當(dāng)前頁(yè)面是否能夠存儲(chǔ)新創(chuàng)建對(duì)象數(shù)據(jù);
第二寫數(shù)據(jù)單元,用于當(dāng)?shù)诙袛鄦卧袛喈?dāng)前頁(yè)面能夠存儲(chǔ)新創(chuàng)建對(duì)象數(shù)據(jù)時(shí),將新創(chuàng)建對(duì)象數(shù)據(jù)存入隨機(jī)存取存儲(chǔ)區(qū)中,將當(dāng)前頁(yè)面的數(shù)據(jù)寫回對(duì)象數(shù)據(jù)區(qū);
第三寫數(shù)據(jù)單元,用于當(dāng)?shù)诙袛鄦卧袛喈?dāng)前頁(yè)面不能夠存儲(chǔ)新創(chuàng)建對(duì)象數(shù)據(jù)時(shí),將當(dāng)前頁(yè)面存滿后,將當(dāng)前頁(yè)面的數(shù)據(jù)寫回對(duì)象數(shù)據(jù)區(qū);
第四作為單元,用于將當(dāng)前頁(yè)面的下一頁(yè)面作為當(dāng)前頁(yè)面,將接收到的新創(chuàng)建的對(duì)象數(shù)據(jù)存入隨機(jī)存取存儲(chǔ)區(qū)中;還用于當(dāng)?shù)谌袛鄦卧袛嘈聞?chuàng)建的數(shù)據(jù)未存完時(shí),將當(dāng)前頁(yè)面的下一頁(yè)面作為當(dāng)前頁(yè)面,將接收到的新創(chuàng)建的對(duì)象數(shù)據(jù)存入隨機(jī)存取存儲(chǔ)區(qū)中;
第三判斷單元,用于當(dāng)?shù)谒淖鳛閱卧獙⒔邮盏降男聞?chuàng)建的對(duì)象數(shù)據(jù)存入隨機(jī)存取存儲(chǔ)區(qū)中之后判斷新創(chuàng)建的數(shù)據(jù)是否存完;
第四寫數(shù)據(jù)單元,用于當(dāng)?shù)谌袛鄦卧袛嘈聞?chuàng)建的數(shù)據(jù)存完時(shí),將當(dāng)前頁(yè)面的數(shù)據(jù)寫回對(duì)象數(shù)據(jù)區(qū)域。
優(yōu)選地,第一更新模塊407,具體用于:更新隨機(jī)存取存儲(chǔ)區(qū)中對(duì)象索引區(qū)域的位置信息和對(duì)象數(shù)據(jù)區(qū)域的位置信息;
存儲(chǔ)模塊409,具體用于:在非易失性存儲(chǔ)區(qū)中存儲(chǔ)索引區(qū)域的位置信息和對(duì)象數(shù)據(jù)區(qū)域的位置信息;
第一判斷模塊403,具體用于:根據(jù)隨機(jī)存取存儲(chǔ)區(qū)中對(duì)象索引區(qū)域和對(duì)象數(shù)據(jù)區(qū)域的位置信息確定非易失性存儲(chǔ)區(qū)域剩余空間的大小后,判斷非易失性存儲(chǔ)區(qū)的剩余空間是否足夠存儲(chǔ)接收到的新創(chuàng)建的對(duì)象數(shù)據(jù)和索引信息。
在本實(shí)施例中,第一判斷模塊403,包括:確定單元和第四判斷單元;
確定單元,用于根據(jù)隨機(jī)存取存儲(chǔ)區(qū)中對(duì)象索引區(qū)域和對(duì)象數(shù)據(jù)區(qū)域的位置信息確定非易失性存儲(chǔ)區(qū)域剩余空間的大小;
第四判斷單元,用于判斷索引信息的大小加上接收到的新創(chuàng)建的對(duì)象數(shù)據(jù)大小是否小于或者等于非易失性存儲(chǔ)區(qū)的空白區(qū)域的大小。
在本實(shí)施例中,第一定位模塊410,具體包括:第一確定子模塊和第二確定子模塊;
第一確定子模塊,用于根據(jù)接收到的唯一標(biāo)識(shí)符確定需要修改的對(duì)象數(shù)據(jù)的索引信息;
第二確定子模塊,用于根據(jù)第一確定子模塊確定的索引信息確定需要修改的對(duì)象數(shù)據(jù)在非易失性存儲(chǔ)區(qū)中的位置信息。
優(yōu)選地,第二確定子模塊,包括:讀取單元和確定單元;
讀取單元,用于讀取索引信息里對(duì)象數(shù)據(jù)的偏移地址;
確定單元,用于根據(jù)讀取單元確定讀取的偏移地址,確定需要修改的對(duì)象數(shù)據(jù)在非易失性存儲(chǔ)區(qū)中所在的頁(yè)號(hào)和頁(yè)內(nèi)偏移地址。
優(yōu)選地,確定單元,具體用于:用頁(yè)面大小減去1的差值與偏移地址相加,得到的和除以頁(yè)面的大小,所得最終結(jié)果向下取整數(shù)得到需要修改的數(shù)據(jù)所在的頁(yè)號(hào);用偏移地址對(duì)頁(yè)面大小取余,所得最終結(jié)果即為需要修改的數(shù)據(jù)所在頁(yè)的頁(yè)內(nèi)偏移地址。
在本實(shí)施例中,裝置還包括:第三判斷模塊、第四更新模塊和第二添加模塊;;
第三判斷模塊,用于判斷隨機(jī)存取存儲(chǔ)區(qū)中是否存在包含位置信息的修改記錄。
第四更新模塊,用于當(dāng)?shù)谌袛嗄K判斷隨機(jī)存取存儲(chǔ)區(qū)中存在包含位置信息的修改記錄,則更新修改記錄中的修改數(shù)據(jù)為接收到的修改數(shù)據(jù);
執(zhí)行模塊401,用于當(dāng)?shù)谒母履K更新修改記錄中的修改數(shù)據(jù)為接收到的修改數(shù)據(jù)后執(zhí)行應(yīng)用指令;還用于當(dāng)?shù)诙砑幽K在隨機(jī)存取存儲(chǔ)區(qū)中添加包含需要修改的對(duì)象數(shù)據(jù)的位置信息、大小和接收到的修改數(shù)據(jù)的修改記錄后執(zhí)行應(yīng)用指令;
第二添加模塊,用于當(dāng)?shù)谌袛嗄K判斷隨機(jī)存取存儲(chǔ)區(qū)中不存在包含位置信息的修改記錄,則在隨機(jī)存取存儲(chǔ)區(qū)中添加包含需要修改的對(duì)象數(shù)據(jù)的位置信息、大小和接收到的修改數(shù)據(jù)的修改記錄。
具體地,裝置還包括:第四判斷模塊、第五判斷模塊、第一提交模塊和添加模塊;
第四判斷模塊,用于判斷隨機(jī)存取存儲(chǔ)區(qū)剩余空間是否足夠存儲(chǔ)包含需要修改的對(duì)象數(shù)據(jù)的位置信息、大小和修改數(shù)據(jù)的修改記錄;
第五判斷模塊,用于當(dāng)?shù)谒呐袛嗄K判斷空間不足時(shí),判斷非易失性存儲(chǔ)區(qū)中的數(shù)據(jù)備份區(qū)是否已滿;
第一提交模塊,用于當(dāng)?shù)谖迮袛嗄K判斷非易失性存儲(chǔ)區(qū)中的數(shù)據(jù)備份區(qū)沒滿時(shí),將隨機(jī)存取存儲(chǔ)區(qū)中的修改記錄提交到數(shù)據(jù)備份區(qū),并清空隨機(jī)存取存儲(chǔ)區(qū)中的修改記錄;
添加模塊,用于當(dāng)?shù)谒呐袛嗄K判斷空間走足夠時(shí),在隨機(jī)存取存儲(chǔ)區(qū)中增加包含需要修改的對(duì)象數(shù)據(jù)的位置信息、大小和接收到的修改數(shù)據(jù)的修改記錄;還用于當(dāng)?shù)谝惶峤荒K清空隨機(jī)存取存儲(chǔ)區(qū)中的修改記錄后,隨機(jī)存取存儲(chǔ)區(qū)中增加包含需要修改的對(duì)象數(shù)據(jù)的位置信息、大小和接收到的修改數(shù)據(jù)的修改記錄。
在本實(shí)施例中,第四判斷模塊,具體用于:判斷隨機(jī)存取存儲(chǔ)區(qū)剩余空間是否足夠存儲(chǔ)包含需要修改的對(duì)象數(shù)據(jù)的位置信息、大小和修改數(shù)據(jù)的修改記錄塊;
第一提交模塊,具體用于:當(dāng)?shù)谖迮袛嗄K判斷非易失性存儲(chǔ)區(qū)中的數(shù)據(jù)備份區(qū)沒滿時(shí),將隨機(jī)存取存儲(chǔ)區(qū)中的修改記錄塊提交到數(shù)據(jù)備份區(qū),并清空隨機(jī)存取存儲(chǔ)區(qū)中的修改記錄塊;
添加模塊,具體用于:在隨機(jī)存取存儲(chǔ)區(qū)中增添加包含需要修改的對(duì)象數(shù)據(jù)的位置信息、大小和接收到的修改數(shù)據(jù)的修改記錄塊。
具體地,第一遍歷模塊413,具體用于:遍歷數(shù)據(jù)備份區(qū)和隨機(jī)存取存儲(chǔ)區(qū)的修改記錄塊,讀取修改記錄塊的修改記錄,得到各個(gè)修改記錄中需要修改的對(duì)象數(shù)據(jù)的位置信息和大小。
在本實(shí)施例中,裝置還包括:第六判斷模塊;
第六判斷模塊,具體用于:判斷隨機(jī)存取存儲(chǔ)區(qū)是否存在修改記錄;
第一遍歷模塊413,具體用于當(dāng)?shù)诹袛嗄K判斷隨機(jī)存取存儲(chǔ)區(qū)存在修改記錄時(shí),遍歷非易失性存儲(chǔ)區(qū)和隨機(jī)存取存儲(chǔ)區(qū)的修改記錄;
第三更新模塊416,第六判斷模塊判斷隨機(jī)存取存儲(chǔ)區(qū)不存在修改記錄時(shí),將事務(wù)狀態(tài)更新為結(jié)束事務(wù);
執(zhí)行模塊401,用于當(dāng)?shù)谌履K416將事務(wù)狀態(tài)更新為結(jié)束事務(wù)后執(zhí)行應(yīng)用指令。
在本實(shí)施例中,統(tǒng)計(jì)模塊414,具體包括:遍歷單元和統(tǒng)計(jì)單元;
遍歷單元,用于當(dāng)?shù)谝槐闅v模塊413遍歷非易失性存儲(chǔ)區(qū)和隨機(jī)存取存儲(chǔ)區(qū)后,遍歷非易失性存儲(chǔ)區(qū)和隨機(jī)存取存儲(chǔ)區(qū)的修改記錄,得到各個(gè)修改記錄中需要修改的對(duì)象數(shù)據(jù)的位置信息和大?。?/p>
統(tǒng)計(jì)單元,用于根據(jù)遍歷單元得到的各個(gè)修改記錄中需要修改的對(duì)象數(shù)據(jù)的位置信息和大小統(tǒng)計(jì)修改頁(yè)的數(shù)量。
具體地,裝置還包括:第七判斷模塊、第二提交模塊、第二遍歷模塊和第三寫數(shù)據(jù)模塊;
第七判斷模塊,用于判斷修改頁(yè)的數(shù)量是否大于預(yù)定值。
第二提交模塊,用于當(dāng)?shù)谄吲袛嗄K判斷修改頁(yè)的數(shù)量大于預(yù)定值時(shí),將隨機(jī)存取存儲(chǔ)區(qū)中的修改記錄提交到非易失性存儲(chǔ)區(qū);
第二遍歷模塊,用于當(dāng)?shù)诙峤荒K將隨機(jī)存取存儲(chǔ)區(qū)中的修改記錄提交到非易失性存儲(chǔ)區(qū)后,遍歷讀取非易失性存儲(chǔ)區(qū)中的修改記錄;
第三寫數(shù)據(jù)模塊,用于將接收到的修改數(shù)據(jù)寫入到非易失性存儲(chǔ)區(qū)中;還用于當(dāng)?shù)谄吲袛嗄K判斷修改頁(yè)的數(shù)量小于或等于預(yù)定值時(shí),將修改數(shù)據(jù)直接寫入到非易失性存儲(chǔ)區(qū)中;
第三更新模塊416,還用于當(dāng)?shù)谌龑憯?shù)據(jù)模塊將接收到的修改數(shù)據(jù)寫入到非易失性存儲(chǔ)區(qū)中后,將事務(wù)狀態(tài)更新為結(jié)束事務(wù);
執(zhí)行模塊401,用于當(dāng)?shù)谌履K416將事務(wù)狀態(tài)更新為結(jié)束事務(wù)后執(zhí)行應(yīng)用指令。
具體地,裝置還包括:第二定位模塊、讀取模塊、作為模塊、查找模塊、合并模塊、第八判斷模塊和清除模塊;
第二定位模塊,用于當(dāng)執(zhí)行模塊401執(zhí)行讀取對(duì)象數(shù)據(jù)的指令時(shí),根據(jù)接收到的唯一標(biāo)識(shí)符確定需要讀取的對(duì)象數(shù)據(jù)的位置信息;
讀取模塊,用于讀取非易失性存儲(chǔ)區(qū)位置信息中的對(duì)象數(shù)據(jù);
作為模塊,用于讀取非易失性存儲(chǔ)區(qū)位置信息中的對(duì)象數(shù)據(jù)作為目標(biāo)數(shù)據(jù);
查找模塊,用于當(dāng)?shù)诙袛嗄K408判斷事務(wù)狀態(tài)是開始事務(wù)時(shí),在非易失性存儲(chǔ)區(qū)和隨機(jī)存取存儲(chǔ)區(qū)查找并讀取與位置信息相同的對(duì)象數(shù)據(jù);
合并模塊,用于將查找模塊查找并讀取與位置信息相同的對(duì)象數(shù)據(jù)與目標(biāo)數(shù)據(jù)進(jìn)行合并得到需要讀取的數(shù)據(jù);
第三更新模塊416,用于將事務(wù)狀態(tài)更新為結(jié)束事務(wù);還用于當(dāng)?shù)诎伺袛嗄K判斷數(shù)據(jù)備份區(qū)是沒有修改記錄時(shí),將事務(wù)狀態(tài)更新為結(jié)束事務(wù);
執(zhí)行模塊401,用于當(dāng)?shù)谌履K416將事務(wù)狀態(tài)更新為結(jié)束事務(wù)后執(zhí)行應(yīng)用指令;用于當(dāng)報(bào)錯(cuò)模塊404報(bào)錯(cuò)后執(zhí)行應(yīng)用指令;用于當(dāng)清除模塊清除隨機(jī)存取存儲(chǔ)區(qū)的修改記錄后執(zhí)行應(yīng)用指令;
報(bào)錯(cuò)模塊404,用于當(dāng)?shù)诙袛嗄K408判斷事務(wù)狀態(tài)不是開始事務(wù)時(shí),報(bào)錯(cuò);
第八判斷模塊,用于當(dāng)?shù)诙袛嗄K408判斷事務(wù)狀態(tài)是開始事務(wù)時(shí),則判斷數(shù)據(jù)備份區(qū)是否有修改記錄;
清除模塊,用于第八判斷模塊判斷數(shù)據(jù)備份區(qū)有修改記錄時(shí),清除數(shù)據(jù)備份區(qū)的修改記錄;用于當(dāng)?shù)谌履K416將事務(wù)狀態(tài)更新為結(jié)束事務(wù)時(shí),清除隨機(jī)存取存儲(chǔ)區(qū)的修改記錄。
具體地,第二定位包括:第一定位單元和第二定位單元;
第一定位單元,用于當(dāng)執(zhí)行模塊401執(zhí)行讀取對(duì)象數(shù)據(jù)的指令時(shí),根據(jù)接收到的唯一標(biāo)識(shí)符確定需要讀取的對(duì)象數(shù)據(jù)的索引信息;
第二定位單元,用于根據(jù)第一定位單元確定的索引信息確定需要讀取的對(duì)象數(shù)據(jù)在非易失性存儲(chǔ)區(qū)中的位置信息。
在本實(shí)施例中,查找模塊包括:第一遍歷單元和第一讀取單元;
第一遍歷單元,用于遍歷非易失性存儲(chǔ)區(qū)中的數(shù)據(jù)備份區(qū)和隨機(jī)存取存儲(chǔ)區(qū)查找包含位置的修改記錄塊;
第一讀取單元,用于讀出第一遍歷單元查找到的修改記錄塊的修改數(shù)據(jù)并與目標(biāo)數(shù)據(jù)合并。
具體地,裝置還包括:第九判斷模塊、啟動(dòng)模塊和第二初始化模塊;
第九判斷模塊,用于判斷是否啟動(dòng)掉電保護(hù);
啟動(dòng)模塊,用于當(dāng)?shù)诰排袛嗄K判斷啟動(dòng)掉電保護(hù)時(shí),啟動(dòng)掉電保護(hù);
第二初始化模塊,用于當(dāng)?shù)诰排袛嗄K判斷啟動(dòng)掉電保護(hù)時(shí),進(jìn)行事務(wù)處理初始化。
優(yōu)選地,啟動(dòng)模塊具體包括:獲取單元、第五作為單元、第五判斷單元、第一清除單元、第一獲取單元、寫入單元、第二獲取單元和第六作為單元;
第二判斷模塊408,用于判斷事務(wù)狀態(tài)是否為開始事務(wù);
獲取單元,用于第二判斷模塊408判斷事物狀態(tài)是開始狀態(tài)時(shí),獲取數(shù)據(jù)備份區(qū)的第一條修改記錄;
第五作為單元,用于將獲取單元獲取數(shù)據(jù)備份區(qū)的第一條修改記錄,作為當(dāng)前修改記錄;
第五判斷單元,用于判斷當(dāng)前修改記錄是否存有修改數(shù)據(jù);
第三更新模塊416,用于當(dāng)?shù)谖迮袛嗄K判斷當(dāng)前修改記錄不存有修改數(shù)據(jù)時(shí),將事務(wù)狀態(tài)更新為結(jié)束事務(wù);
第一清除單元,用于當(dāng)?shù)谌履K416將事務(wù)狀態(tài)更新為結(jié)束事務(wù)后,清除數(shù)據(jù)備份區(qū)的數(shù)據(jù);
第一獲取單元,用于當(dāng)?shù)谖迮袛鄦卧袛喈?dāng)前修改記錄存有修改數(shù)據(jù)時(shí),從當(dāng)前修改記錄里獲得修改數(shù)據(jù);
寫入單元,用于根據(jù)修改記錄中的位置信息將修改數(shù)據(jù)寫入到非易失性存儲(chǔ)區(qū)中;
第二獲取單元,用于獲取當(dāng)前修改記錄的下一條修改記錄;
第六作為單元,用于將第二獲取單元獲取的下一條修改記錄,作為當(dāng)前修改記錄,觸發(fā)第五判斷單元。
具體地,第二判斷模塊408,具體用于判斷事務(wù)處理標(biāo)志位的值是否有效;
第三更新模塊416,具體用于將事務(wù)處理標(biāo)志位的值置為無(wú)效。
進(jìn)一步地,裝置還包括:寫入模塊和獲得模塊;
寫入模塊,用于將事務(wù)處理標(biāo)志位的值寫入到非易失性存儲(chǔ)區(qū);
獲得模塊,用于從非易失性存儲(chǔ)區(qū)獲得事務(wù)處理標(biāo)志位的值。
更進(jìn)一步地,其特征在于,第二初始化模塊包括:第二清除單元;
第二清除單元,用于清除隨機(jī)存取存儲(chǔ)區(qū)中的所有數(shù)據(jù);
第三更新模塊416,具體用于將事務(wù)處理標(biāo)志位的值置為無(wú)效。
以上所述,僅為本發(fā)明較佳的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以權(quán)利要求的保護(hù)范圍為準(zhǔn)。