專利名稱:一種數(shù)據(jù)庫(kù)的事務(wù)提交方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及多媒體技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)庫(kù)的事務(wù)提交方法和裝置。
背景技術(shù):
視頻監(jiān)控是安全防范系統(tǒng)的重要組成部分,它是一種防范能力較強(qiáng)的綜合系統(tǒng)。 視頻監(jiān)控以其直觀、準(zhǔn)確、及時(shí)和信息內(nèi)容豐富而廣泛應(yīng)用于許多場(chǎng)合。近年來(lái),隨著計(jì)算 機(jī)、網(wǎng)絡(luò)以及圖像處理、傳輸技術(shù)的飛速發(fā)展,視頻監(jiān)控技術(shù)也有了長(zhǎng)足的發(fā)展,其是以計(jì) 算機(jī)為核心的多媒體監(jiān)控,把管理權(quán)交給計(jì)算機(jī),不以人的主觀意識(shí)為轉(zhuǎn)移。
借助現(xiàn)代網(wǎng)絡(luò)技術(shù),視頻監(jiān)控系統(tǒng)從傳統(tǒng)的本地化走向網(wǎng)絡(luò)化,從集中式發(fā)展 到分布式。分布式視頻監(jiān)控系統(tǒng)由業(yè)務(wù)節(jié)點(diǎn)群rgmgroup (通常包含N個(gè)業(yè)務(wù)處理節(jié) 點(diǎn)rgmnode)和中心服務(wù)節(jié)點(diǎn)組cmsgroup (通常包含M個(gè)中心服務(wù)節(jié)點(diǎn)cmsnode)構(gòu)成, rgmgroup負(fù)責(zé)系統(tǒng)的實(shí)際業(yè)務(wù),cmsgroup負(fù)責(zé)系統(tǒng)的數(shù)據(jù)維護(hù),具體的,分布式視頻監(jiān)控 系統(tǒng)的具體架構(gòu)如圖l所示。 以上分布式視頻監(jiān)控系統(tǒng)的數(shù)據(jù)管理者是64位主存分布式數(shù)據(jù)庫(kù)。64位主 存分布式數(shù)據(jù)庫(kù)分為前端服務(wù)進(jìn)程(圖1中為dbproxy)和后端服務(wù)進(jìn)程(圖1中為 dbcorethrd),前端服務(wù)進(jìn)程部署在業(yè)務(wù)處理節(jié)點(diǎn)上,后端服務(wù)進(jìn)程部署在中心服務(wù)節(jié)點(diǎn) 上,具體的,該數(shù)據(jù)庫(kù)部署圖如圖2所示。 作為數(shù)據(jù)庫(kù)管理系統(tǒng),64位主存分布式數(shù)據(jù)庫(kù)需要在數(shù)據(jù)庫(kù)層面上提供事務(wù)處理 能力,即滿足事務(wù)的ACID特性。其中,A表示Atomic,原子性指整個(gè)數(shù)據(jù)庫(kù)事務(wù)是不可分 割的工作單元,"要么全部,要么全不";C表示Consistency, —致性即數(shù)據(jù)庫(kù)事務(wù)不能破壞 關(guān)系的完整性以及業(yè)務(wù)邏輯上的一致性;I表示Isolation隔離性當(dāng)不同的事務(wù)同時(shí)操縱 相同的數(shù)據(jù)時(shí),每個(gè)事務(wù)都有互不相交的完整數(shù)據(jù)空間;而D指Durability,持久性只要 事務(wù)成功結(jié)束,它對(duì)數(shù)據(jù)庫(kù)所作的更新就必須永久保存下來(lái)。 電信級(jí)的現(xiàn)網(wǎng)業(yè)務(wù)需要系統(tǒng)以極高的吞吐量運(yùn)轉(zhuǎn),傳統(tǒng)的數(shù)據(jù)庫(kù)事務(wù)提交策略往 往依賴本地記錄日志文件以備UNDO (回滾)和REDO (恢復(fù)),而在追求高速的電信級(jí)視頻監(jiān) 控系統(tǒng)中,這樣的頻繁磁盤IO操作是不合適的。針對(duì)高吞吐量要求的監(jiān)控業(yè)務(wù)環(huán)境,與之 配套的主存數(shù)據(jù)庫(kù)如何在事務(wù)的執(zhí)行性能和穩(wěn)定提交之間取得平衡,是亟待解決的問(wèn)題。
發(fā)明內(nèi)容
本發(fā)明提供一種數(shù)據(jù)庫(kù)的事務(wù)提交方法和裝置,用以解決傳統(tǒng)的數(shù)據(jù)庫(kù)事務(wù)提交 策略往往依賴本地記錄日志文件,不能滿足當(dāng)前監(jiān)控業(yè)務(wù)高吞吐量要求的問(wèn)題。
本發(fā)明一種數(shù)據(jù)庫(kù)的事務(wù)提交方法,應(yīng)用在分布式視頻監(jiān)控系統(tǒng)中,包括
步驟1、前端服務(wù)進(jìn)程加載事務(wù),建立對(duì)應(yīng)的事務(wù)映像空間,并執(zhí)行所述事務(wù),若所 述事務(wù)執(zhí)行結(jié)束后,事務(wù)映像空間內(nèi)存在更新數(shù)據(jù),則構(gòu)造事務(wù)提交包,并向?qū)?yīng)的后端服 務(wù)進(jìn)程發(fā)起事務(wù)提交請(qǐng)求,若提交成功,執(zhí)行步驟2,否則,執(zhí)行步驟3 ; 步驟2、判斷所述事務(wù)是否為首次提交,若是,利用所述事務(wù)映像空間中的更新數(shù)據(jù)覆蓋本地內(nèi)存中的主版本,否則,向本地flash寫入本地事務(wù)日志,刪除本地磁盤和延遲 事務(wù)管理器中的與所述事務(wù)對(duì)應(yīng)的信息,并利用所述事務(wù)映像空間中的更新數(shù)據(jù)覆蓋本地 內(nèi)存中的主版本,轉(zhuǎn)步驟4; 步驟3、將所述事務(wù)提交包存入本地磁盤內(nèi)、向本地flash寫入本地事務(wù)日志,并 將所述事務(wù)的事務(wù)標(biāo)識(shí)信息插入延遲事務(wù)管理器后,利用所述事務(wù)映像空間中的更新數(shù)據(jù) 覆蓋本地內(nèi)存中的主版本,轉(zhuǎn)步驟4 ; 步驟4、定時(shí)遍歷所述延遲事務(wù)管理器,根據(jù)所述延遲事務(wù)管理器中記錄的事務(wù)標(biāo) 識(shí)信息,獲取事務(wù)提交包后再次發(fā)起事務(wù)提交請(qǐng)求。
進(jìn)一步的,所述步驟1中還包括 在執(zhí)行所述事務(wù)時(shí),判斷所述事務(wù)是否被用戶回滾,若是,則釋放所述事務(wù)映像空 間,結(jié)束操作,否則,繼續(xù)執(zhí)行所述事務(wù)。 所述步驟1中,構(gòu)造事務(wù)提交包的過(guò)程具體為所述前端服務(wù)進(jìn)程壓縮所述事務(wù) 映像空間內(nèi)的更新數(shù)據(jù)得到提交數(shù)據(jù),并根據(jù)該提交數(shù)據(jù)構(gòu)造事務(wù)提交包,所述事務(wù)提交 包包括事務(wù)標(biāo)識(shí)信息和提交數(shù)據(jù)。 所述步驟1中,當(dāng)所述前端服務(wù)進(jìn)程在預(yù)設(shè)時(shí)間內(nèi)接收到后端服務(wù)進(jìn)程發(fā)送的提 交成功消息時(shí),判定所述事務(wù)提交成功;當(dāng)所述前端服務(wù)進(jìn)程在預(yù)設(shè)時(shí)間內(nèi)接收到后端服 務(wù)進(jìn)程發(fā)送的提交失敗消息或在預(yù)設(shè)時(shí)間內(nèi)未接收到后端服務(wù)進(jìn)程發(fā)送的消息時(shí),判定所 述事務(wù)提交失敗。 其中,所述后端服務(wù)進(jìn)程接收到所述前端服務(wù)進(jìn)程發(fā)起的事務(wù)提交請(qǐng)求時(shí),將事 務(wù)提交包寫入自身維護(hù)的flash物理日志文件、將事務(wù)標(biāo)識(shí)信息和全局提交開(kāi)始信息寫入 自身維護(hù)的flash邏輯日志文件,當(dāng)兩次寫入日志均成功時(shí),向所述前端服務(wù)進(jìn)程反饋提 交成功消息,并將所述事務(wù)標(biāo)識(shí)信息插入自身維護(hù)的事務(wù)提交管理器,否則,向所述前端服 務(wù)進(jìn)程反饋提交失敗消息。 進(jìn)一步的,所述后端服務(wù)進(jìn)程定時(shí)遍歷所述事務(wù)提交管理器,將所述flash物理
日志文件內(nèi)寫入的事務(wù)提交包寫入自身維護(hù)的磁盤內(nèi),將事務(wù)標(biāo)識(shí)信息和全局提交結(jié)束信
息寫入flash邏輯日志文件,并刪除所述事務(wù)提交管理器內(nèi)插入的事務(wù)標(biāo)識(shí)信息。 所述步驟2中,向所述本地flash寫入所述事務(wù)對(duì)應(yīng)的事務(wù)標(biāo)識(shí)信息、事務(wù)提交包
的文件名信息和本地提交結(jié)束信息,并刪除本地磁盤中存儲(chǔ)的與所述事務(wù)對(duì)應(yīng)的事務(wù)提交
包和延遲事務(wù)管理器中的與所述事務(wù)對(duì)應(yīng)的事務(wù)標(biāo)識(shí)信息; 所述步驟3中,向所述本地flash寫入本地事務(wù)日志具體為向本地flash寫入與
所述事務(wù)對(duì)應(yīng)的事務(wù)標(biāo)識(shí)信息、事務(wù)提交包的文件名信息和本地提交開(kāi)始信息。 所述步驟4中,根據(jù)延遲事務(wù)管理器中記錄的事務(wù)標(biāo)識(shí)信息,獲取事務(wù)提交包具
體為根據(jù)所述事務(wù)標(biāo)識(shí)信息,查找所述本地flash,獲取記錄的事務(wù)提交包的文件名,并
根據(jù)該提交包的文件名查找所述本地磁盤,獲取對(duì)應(yīng)的事務(wù)提交包。 進(jìn)一步的,所述步驟4中還包括將所述延遲事務(wù)管理器中的事務(wù)標(biāo)識(shí)信息和定
時(shí)時(shí)間到達(dá)時(shí)刻的時(shí)間戳寫入所述本地flash。 本發(fā)明還提供一種數(shù)據(jù)庫(kù)的事務(wù)提交裝置,包括 事務(wù)加載模塊,用于加載事務(wù),建立對(duì)應(yīng)的事務(wù)映像空間,執(zhí)行所述事務(wù); 事務(wù)提交包構(gòu)造模塊,用于在事務(wù)執(zhí)行結(jié)束后,判斷所述事務(wù)映像空間內(nèi)是否有更新數(shù)據(jù),當(dāng)存在更新數(shù)據(jù)時(shí),構(gòu)造事務(wù)提交包; 事務(wù)提交請(qǐng)求下發(fā)模塊,用于向?qū)?yīng)的后端服務(wù)進(jìn)程發(fā)起事務(wù)提交請(qǐng)求,并判斷 所述事務(wù)是否提交成功,若是,觸發(fā)事務(wù)提交成功處理模塊,否則,觸發(fā)事務(wù)提交失敗處理 模塊; 事務(wù)提交成功處理模塊,用于判斷所述事務(wù)是否為首次提交,若是,利用所述事務(wù) 映像空間中的更新數(shù)據(jù)覆蓋本地內(nèi)存中的主版本,否則,向本地flash寫入本地事務(wù)日志, 刪除本地磁盤和延遲事務(wù)管理器中的與所述事務(wù)對(duì)應(yīng)的信息,并利用所述事務(wù)映像空間中 的更新數(shù)據(jù)覆蓋本地內(nèi)存中的主版本,觸發(fā)定時(shí)遍歷模塊; 事務(wù)提交失敗處理模塊,用于將所述事務(wù)提交包存入本地磁盤內(nèi)、向本地flash 寫入本地事務(wù)日志,并將所述事務(wù)的事務(wù)標(biāo)識(shí)信息插入延遲事務(wù)管理器后,利用所述事務(wù) 映像空間中的更新數(shù)據(jù)覆蓋本地內(nèi)存中的主版本,觸發(fā)定時(shí)遍歷模塊; 定時(shí)遍歷模塊,用于定時(shí)遍歷所述延遲事務(wù)管理器,根據(jù)所述延遲事務(wù)管理器中
記錄的事務(wù)標(biāo)識(shí)信息,獲取事務(wù)提交包后觸發(fā)所述事務(wù)提交請(qǐng)求下發(fā)模塊。 進(jìn)一步的,本發(fā)明提供的裝置還包括 事務(wù)回滾判斷模塊,用于在執(zhí)行所述事務(wù)時(shí),判斷所述事務(wù)是否被用戶回滾,若 是,則釋放所述事務(wù)映像空間,結(jié)束操作,否則,觸發(fā)所述事務(wù)提交包構(gòu)造模塊。
進(jìn)一步的,所述事務(wù)提交包構(gòu)造模塊,還用于當(dāng)所述事務(wù)映像空間內(nèi)沒(méi)更新數(shù)據(jù) 時(shí),釋放所述事務(wù)映像空間,結(jié)束操作; 所述定時(shí)遍歷模塊,還用于將所述延遲事務(wù)管理器中的事務(wù)標(biāo)識(shí)信息和定時(shí)時(shí)間
到達(dá)時(shí)刻的時(shí)間戳寫入所述本地flash。 與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn) 本發(fā)明提供的方法緊密結(jié)合3G視頻監(jiān)控業(yè)務(wù)的需求,設(shè)計(jì)的框架滿足事務(wù)提 交的高速需求,通過(guò)給出內(nèi)存、flash、磁盤的三層存儲(chǔ)方案,合理分配系統(tǒng)的事務(wù)持久化 開(kāi)銷;進(jìn)一步的,本發(fā)明還提出前端服務(wù)進(jìn)程的事務(wù)映像空間提交空間的概念,避免記錄 皿do日志o
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖進(jìn)行簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是 本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可 以根據(jù)這些附圖獲得其他的附圖。
圖1為現(xiàn)有技術(shù)中分布式視頻監(jiān)控系統(tǒng)的具體架構(gòu)圖;
圖2為現(xiàn)有技術(shù)中分布式數(shù)據(jù)庫(kù)部署圖; 圖3為本發(fā)明提供的一種數(shù)據(jù)庫(kù)的事務(wù)提交方法的流程圖;
圖4為本發(fā)明實(shí)施例提供的前端服務(wù)進(jìn)程事務(wù)提交流程圖;
圖5為本發(fā)明實(shí)施例提供的后端服務(wù)進(jìn)程接收事務(wù)處理流稱圖;
圖6為本發(fā)明提供的一種數(shù)據(jù)庫(kù)的事務(wù)提交裝置的結(jié)構(gòu)圖。
具體實(shí)施例方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完 整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;?本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他 實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。 本發(fā)明提供一種數(shù)據(jù)庫(kù)的事務(wù)提交方法和裝置,用以解決傳統(tǒng)的數(shù)據(jù)庫(kù)事務(wù)提交 策略往往依賴本地記錄日志文件,不能滿足當(dāng)前監(jiān)控業(yè)務(wù)高吞吐量要求的問(wèn)題。
具體的,本發(fā)明提供的數(shù)據(jù)庫(kù)的事務(wù)提交方法,如圖3所示,包括以下步驟
步驟S301、前端服務(wù)進(jìn)程加載事務(wù),建立該事務(wù)的事務(wù)映像空間,并執(zhí)行該事務(wù)。
優(yōu)選的,在該步驟之后還進(jìn)行以下操作事務(wù)執(zhí)行過(guò)程中,判斷該事務(wù)是否被用戶 回滾,若是,則釋放事務(wù)映像空間,結(jié)束操作,否則,執(zhí)行步驟S302。 步驟S302、在事務(wù)執(zhí)行結(jié)束后,判斷事務(wù)映像空間內(nèi)是否有更新數(shù)據(jù),當(dāng)存在更新 數(shù)據(jù)時(shí),根據(jù)該更新數(shù)據(jù)構(gòu)造事務(wù)提交包。 進(jìn)一步的,該步驟中,當(dāng)事務(wù)映像空間內(nèi)沒(méi)更新數(shù)據(jù)時(shí),釋放事務(wù)映像空間,結(jié)束 操作。 步驟S303、前端服務(wù)進(jìn)程向?qū)?yīng)的一個(gè)或多個(gè)后端服務(wù)進(jìn)程發(fā)起事務(wù)提交請(qǐng)求,
并判斷該事務(wù)是否提交成功,若是,執(zhí)行步驟S304,否則,執(zhí)行步驟S305。 步驟S304、判斷該事務(wù)是否為首次提交,若是,利用事務(wù)映像空間中的更新數(shù)據(jù)覆
蓋本地內(nèi)存中的主版本,否則,向本地flash寫入本地事務(wù)日志,刪除本地磁盤和延遲事務(wù)
管理器中的與該事務(wù)對(duì)應(yīng)的信息,并利用事務(wù)映像空間中的更新數(shù)據(jù)覆蓋本地內(nèi)存中的主
版本,轉(zhuǎn)步驟S306。 該步驟中,向本地flash寫入本地事務(wù)日志,并刪除本地磁盤和延遲事務(wù)管理器 中的與該事務(wù)對(duì)應(yīng)的信息具體為向本地flash寫入該事務(wù)對(duì)應(yīng)的事務(wù)標(biāo)識(shí)信息、事務(wù)提 交包的文件名信息和本地提交結(jié)束信息,并刪除本地磁盤中存儲(chǔ)的與該事務(wù)對(duì)應(yīng)的事務(wù)提 交包和延遲事務(wù)管理器中的與該事務(wù)對(duì)應(yīng)的事務(wù)標(biāo)識(shí)信息。 步驟S305、將事務(wù)提交包存入本地磁盤內(nèi)、向本地flash寫入本地事務(wù)日志,并將 事務(wù)的事務(wù)標(biāo)識(shí)信息插入延遲事務(wù)管理器后,利用事務(wù)映像空間中的更新數(shù)據(jù)覆蓋本地內(nèi) 存中的主版本,轉(zhuǎn)步驟S306。 該步驟中,向本地flash寫入本地事務(wù)日志具體為向本地flash寫入與該事務(wù)對(duì) 應(yīng)的事務(wù)標(biāo)識(shí)信息、事務(wù)提交包的文件名信息和本地提交開(kāi)始信息。 步驟S306、定時(shí)遍歷延遲事務(wù)管理器,根據(jù)延遲事務(wù)管理器中記錄的事務(wù)標(biāo)識(shí)信 息,獲取事務(wù)提交包后轉(zhuǎn)步驟S303。 本發(fā)明提供的方法緊密結(jié)合3G視頻監(jiān)控業(yè)務(wù)的需求,設(shè)計(jì)的框架滿足事務(wù)提 交的高速需求,通過(guò)給出內(nèi)存、flash、磁盤的三層存儲(chǔ)方案,合理分配系統(tǒng)的事務(wù)持久化 開(kāi)銷;進(jìn)一步的,本發(fā)明還提出前端服務(wù)進(jìn)程的事務(wù)映像空間提交空間的概念,避免記錄 undo日志o 下面通過(guò)一具體實(shí)施例來(lái)詳細(xì)闡述本發(fā)明提供的方法的具體實(shí)現(xiàn)過(guò)程。 本發(fā)明實(shí)施例提供如下的事務(wù)提交組織框架前端服務(wù)進(jìn)程作為數(shù)據(jù)引擎為業(yè)務(wù)
處理節(jié)點(diǎn)提供服務(wù),系統(tǒng)運(yùn)行中產(chǎn)生的數(shù)據(jù)更新按規(guī)則提交到中心服務(wù)節(jié)點(diǎn)上的后端服務(wù)進(jìn)程進(jìn)行持久化。 其中,前端服務(wù)進(jìn)程串行執(zhí)行事務(wù),避免額外的數(shù)據(jù)庫(kù)鎖定和解鎖操作,這樣每個(gè) 時(shí)間點(diǎn),在前端服務(wù)進(jìn)程執(zhí)行的事務(wù)不超過(guò)1個(gè),符合事務(wù)的Isolation原則,執(zhí)行完畢后 向后端服務(wù)進(jìn)程提交; 后端服務(wù)進(jìn)程則執(zhí)行事務(wù)固化操作,將事務(wù)的日志和數(shù)據(jù)登記到不宜丟失的介質(zhì) 中;以上兩者的操作可以保持Atomic和Durability,當(dāng)A、 I、 D特性均滿足時(shí),如果業(yè)務(wù)操 作本身不違背數(shù)據(jù)庫(kù)Consistency,則ACID特性全部滿足。 本發(fā)明實(shí)施例中,實(shí)現(xiàn)高吞吐量需求的關(guān)鍵點(diǎn)在于合理利用存儲(chǔ)設(shè)備,構(gòu)造三級(jí)存 儲(chǔ)空間,分別為系統(tǒng)運(yùn)算的內(nèi)存、事務(wù)日志的登記載體flash、實(shí)際數(shù)據(jù)的駐留載體磁盤。
具體的,本發(fā)明實(shí)施例分為兩個(gè)執(zhí)行階段,分別為前端服務(wù)進(jìn)程執(zhí)行的前段和后 端服務(wù)進(jìn)程執(zhí)行的后段。 如圖4所示,事務(wù)提交的前段具體實(shí)施步驟如下 步驟S401、前端服務(wù)進(jìn)程加載事務(wù),并以全局唯一序列號(hào)Session ID標(biāo)示各 事務(wù),即事務(wù)標(biāo)識(shí)信息,建立本事務(wù)專有的事務(wù)映像空間,該映像空間稱為Session— dataspace,事務(wù)對(duì)系統(tǒng)的數(shù)據(jù)請(qǐng)求都將轉(zhuǎn)化到本空間。 步驟S402、前端服務(wù)進(jìn)程執(zhí)行事務(wù),此過(guò)程中對(duì)原有數(shù)據(jù)的修改都記錄在事務(wù)映 像空間內(nèi)。 具體的,該事務(wù)映像空間以記錄列表的形式組織,其包含一組記錄信息 Recordlnfo,形如Primary Row ID :Session ID :Row Data。 步驟S403、判斷事務(wù)執(zhí)行過(guò)程中是否被用戶回滾,例如用戶選擇進(jìn)行rollback, 若是,由于前端服務(wù)進(jìn)程內(nèi)存中的主版本數(shù)據(jù)未被修改,所以不需要做UNDO操作,直接執(zhí) 行步驟S415 ;否則,執(zhí)行步驟S404。 步驟S404、在事務(wù)執(zhí)行結(jié)束后,判斷事務(wù)映像空間是否產(chǎn)生更新數(shù)據(jù),若是,執(zhí) 行步驟S405 ;否則,說(shuō)明本次事務(wù)并未對(duì)系統(tǒng)數(shù)據(jù)產(chǎn)生影響,例如,此次事務(wù)執(zhí)行的是 Select,直接執(zhí)行步驟S415。 步驟S405、事務(wù)執(zhí)行結(jié)束后且事務(wù)映像空間中有更新數(shù)據(jù),例如,此次事務(wù)執(zhí)行的 是update、 delete或insert,說(shuō)明本次事務(wù)需要提交,此時(shí)壓縮事務(wù)映像空間中的更新數(shù) 據(jù)得到提交數(shù)據(jù)Commit Data,并構(gòu)造事務(wù)提交包Commit_Packet。
其中,Commit—Packet包括Session ID :Commit Data。 步驟S406、前端服務(wù)進(jìn)程向后端服務(wù)進(jìn)程發(fā)起事務(wù)請(qǐng)求,并啟動(dòng)定時(shí)器,等待后端 服務(wù)進(jìn)程的回應(yīng),其中,事務(wù)請(qǐng)求中攜帶有事務(wù)提交包。 優(yōu)選的,該步驟中前端服務(wù)進(jìn)程可以向多個(gè)后端服務(wù)進(jìn)程發(fā)起事務(wù)請(qǐng)求,在這種 情況下,即使某個(gè)后端服務(wù)進(jìn)程由于網(wǎng)絡(luò)等問(wèn)題未回應(yīng)該請(qǐng)求,只要有一個(gè)后端服務(wù)進(jìn)程 回應(yīng)該請(qǐng)求,即證明提交成功,前端服務(wù)進(jìn)程可以繼續(xù)后續(xù)操作,而不需等待,該方法也在 一定程度上增加了事務(wù)提交的成功率。 同時(shí),前端服務(wù)進(jìn)程還可以記錄各個(gè)后端服務(wù)進(jìn)程的平均返回時(shí)間,根據(jù)該時(shí)間, 前端服務(wù)進(jìn)程還可以選擇后端服務(wù)進(jìn)程,在后續(xù)提交的過(guò)程中可以優(yōu)選返回時(shí)間短的后端 服務(wù)進(jìn)程,也在一定程度上提高了事務(wù)提交效率。 另外,上述的后端服務(wù)進(jìn)程還可以組成一組進(jìn)程組,該進(jìn)程組內(nèi)部通過(guò)負(fù)載平衡來(lái)調(diào)整由哪個(gè)后端服務(wù)進(jìn)程接收前端服務(wù)進(jìn)程的事務(wù)請(qǐng)求。當(dāng)然,在這種情況下就不涉及 平均返回時(shí)間的問(wèn)題。 步驟S407、判斷在設(shè)定的時(shí)間段內(nèi)是否接收到后端服務(wù)進(jìn)程回應(yīng)的提交成功消 息,若是,執(zhí)行步驟S411 ,否則,執(zhí)行步驟S408。 步驟S408、將事務(wù)提交包Commit_Packet按文件名Local File ID存入磁盤。
步驟S409、向本地flash寫入本地事務(wù)日志Local Session Log,記錄SessionID 和Local File ID,標(biāo)示為"本地提交開(kāi)始,具體的"格式為〈Session ID :C0MMIT_Local_ Begin丄ocal File ID>。 步驟S410、將該事務(wù)的Session ID插入延遲事務(wù)管理器,執(zhí)行步驟S414。 步驟S411、檢查該事務(wù)的Session ID是否在延遲事務(wù)管理器中,若是,執(zhí)行步驟
S412,否則,執(zhí)行步驟S414。 步驟S412、檢查出該事務(wù)的Session ID在延遲事務(wù)管理器中,說(shuō)明此事務(wù)前次 提交失敗,其物理數(shù)據(jù)和邏輯日志已經(jīng)保存在本地,此次提交利用了本地保存的日志和數(shù) 據(jù),并具體執(zhí)行以下操作向本地flash寫入本地事務(wù)日志,記錄該事務(wù)的Session ID和 Local File ID,標(biāo)示為"本地提交結(jié)束",具體的格式為L(zhǎng)ocal Session Log〈Session ID: C0MMIT_Local_End :Local File ID>。 步驟S413、根據(jù)該事務(wù)的Session ID查出Local File ID,并將磁盤內(nèi)的 LocalFile ID文件刪除,從延遲事務(wù)管理器中刪除Session ID,執(zhí)行步驟S414。
步驟S414、利用事務(wù)映像空間中數(shù)據(jù)覆蓋前端服務(wù)進(jìn)程內(nèi)存中的主版本。
步驟S415、釋放事務(wù)映像空間,流程結(jié)束。 步驟S416、當(dāng)前端服務(wù)進(jìn)程運(yùn)行到特定時(shí)刻后,即到達(dá)檢查點(diǎn)Check Point時(shí),遍 歷延遲事務(wù)管理器,獲取當(dāng)前時(shí)間時(shí)刻緩存事務(wù)管理器中Session ID信息(該Session ID 信息可能為多個(gè)),將延遲事務(wù)管理器中的Session ID信息和當(dāng)前時(shí)刻對(duì)應(yīng)的時(shí)間戳寫入 Flash上的日志文件,具體格式為丄ocal Session Log〈Check Point :Session ID List>, 其中,Session ID List是此時(shí)在延遲事務(wù)管理器中的Session ID合集,寫入此日志是為 了崩潰恢復(fù),此后根據(jù)事務(wù)的Session ID信息查找flash日志文件中的Local File ID信 息,并根據(jù)該Local File ID信息獲取磁盤中的提交事務(wù)包,轉(zhuǎn)到步驟S406處理。
如圖5所示,事務(wù)提交的后段具體實(shí)施步驟如下 步驟S501、后端服務(wù)進(jìn)程接收前端服務(wù)進(jìn)程發(fā)送的事務(wù)請(qǐng)求,并獲取事務(wù)提交包 Commit—Packet。 步驟S502、后端服務(wù)進(jìn)程將事務(wù)提交包寫入flash物理日志文件Physic Session Log,具體格式為〈Session ID :Commit Data〉;將Session ID信息和"全局提交開(kāi)始"標(biāo) 識(shí)寫入flash邏輯日志文件Logic Session Log,具體格式為〈Session ID :C0MMIT_A11_ begin>。 另外,在執(zhí)行該步驟的同時(shí),后端服務(wù)進(jìn)程還可以將收到的事務(wù)提交包解壓緩存 在內(nèi)存中,在后續(xù)寫入磁盤時(shí),可以不用從flash中讀物理數(shù)據(jù),而是直接從內(nèi)存中讀取, 因?yàn)閒lash的讀取需要擦寫的過(guò)程,而讀取內(nèi)存相對(duì)于讀取flash在讀取效率方面具有一 定的優(yōu)勢(shì)。 步驟S503、判斷上述寫入日志是否成功,若是,執(zhí)行步驟S505 ;否則,執(zhí)行步驟S504。 步驟S504、回應(yīng)前端服務(wù)進(jìn)程提交失敗,并執(zhí)行步驟S507。
步驟S505、回應(yīng)前端服務(wù)進(jìn)程提交成功。 步驟S506、將該事務(wù)的Session ID信息插入本地保存到的事務(wù)提交管理器,并執(zhí) 行步驟S507。 步驟S507、流程結(jié)束。 步驟S508、當(dāng)后端服務(wù)進(jìn)程運(yùn)行到特定時(shí)刻后,即到達(dá)檢查點(diǎn)Check Point時(shí),遍 歷事務(wù)提交管理器,將事務(wù)提交管理器中的Session ID信息和當(dāng)前時(shí)刻對(duì)應(yīng)的時(shí)間戳寫入 邏輯日志文件,具體的格式為L(zhǎng)ogic Session Log〈CheckPoint :Session ID List〉;并將 Session ID對(duì)應(yīng)的提交數(shù)據(jù)Commit Data寫入磁盤,以實(shí)現(xiàn)真正的持久化。
步驟S509、判斷磁盤寫入是否成功,若是執(zhí)行步驟S510,否則,等待下一次遍歷。
步驟S510、磁盤寫入成功后,從事務(wù)提交管理器中刪除Session ID信息,并寫邏 輯日志文件為L(zhǎng)ogicSessionLog〈SessionlD :C0MMIT_All_end>。 以上在檢查點(diǎn)對(duì)flash日志的操作主要是提供一種崩潰恢復(fù)的手段,分別在前端 服務(wù)進(jìn)程側(cè)和后端服務(wù)進(jìn)程側(cè)都有所部署。分別實(shí)現(xiàn)對(duì)本地提交過(guò)程的異常保護(hù)和全局提 交過(guò)程的異常保護(hù)。 需要說(shuō)明的是,上述前端服務(wù)進(jìn)程和后端服務(wù)進(jìn)程進(jìn)行事務(wù)提交操作中的flash 可以采用多個(gè),從而避免了一個(gè)flash的情況下,由于該flash已寫滿或出現(xiàn)故障時(shí)影響提 交成功率的問(wèn)題。 本發(fā)明實(shí)施例緊密結(jié)合3G視頻監(jiān)控業(yè)務(wù)的需求,設(shè)計(jì)的框架滿足事務(wù)提交的高
速需求;給出了主存、flash、磁盤的3層存儲(chǔ)方案,合理分配系統(tǒng)的事務(wù)持久化開(kāi)銷;提出
前端服務(wù)進(jìn)程的串行事務(wù)執(zhí)行方案,有效規(guī)避了提交過(guò)程中的鎖檢測(cè)和鎖恢復(fù);提出前端
服務(wù)進(jìn)程的事務(wù)映像空間提交空間的概念,避免記錄undo日志。 本發(fā)明還提供一種數(shù)據(jù)庫(kù)的事務(wù)提交裝置,如圖6所示,包括 事務(wù)加載模塊610,用于加載事務(wù),建立對(duì)應(yīng)的事務(wù)映像空間,執(zhí)行該事務(wù); 事務(wù)提交包構(gòu)造模塊620,用于在事務(wù)執(zhí)行結(jié)束后,判斷事務(wù)映像空間內(nèi)是否有更
新數(shù)據(jù),當(dāng)存在更新數(shù)據(jù)時(shí),構(gòu)造事務(wù)提交包; 事務(wù)提交請(qǐng)求下發(fā)模塊630,用于向?qū)?yīng)的后端服務(wù)進(jìn)程發(fā)起事務(wù)提交請(qǐng)求,并判 斷該事務(wù)是否提交成功,若是,觸發(fā)事務(wù)提交成功處理模塊640,否則,觸發(fā)事務(wù)提交失敗處 理模塊650 ; 事務(wù)提交成功處理模塊640,用于判斷該事務(wù)是否為首次提交,若是,利用事務(wù)映 像空間中的更新數(shù)據(jù)覆蓋本地內(nèi)存中的主版本,否則,向本地flash寫入本地事務(wù)日志,刪 除本地磁盤和延遲事務(wù)管理器中的與該事務(wù)對(duì)應(yīng)的信息,并利用事務(wù)映像空間中的更新數(shù) 據(jù)覆蓋本地內(nèi)存中的主版本,觸發(fā)定時(shí)遍歷模塊660 ; 事務(wù)提交失敗處理模塊650,用于將事務(wù)提交包存入本地磁盤內(nèi)、向本地flash寫 入本地事務(wù)日志,并將事務(wù)的事務(wù)標(biāo)識(shí)信息插入延遲事務(wù)管理器后,利用事務(wù)映像空間中 的更新數(shù)據(jù)覆蓋本地內(nèi)存中的主版本,觸發(fā)定時(shí)遍歷模塊660 ; 定時(shí)遍歷模塊660,用于定時(shí)遍歷延遲事務(wù)管理器,根據(jù)延遲事務(wù)管理器中記錄的 事務(wù)標(biāo)識(shí)信息,獲取事務(wù)提交包后觸發(fā)事務(wù)提交請(qǐng)求下發(fā)模塊630。
進(jìn)一步的,本發(fā)明提供的裝置還包括 事務(wù)回滾判斷模塊670,用于在執(zhí)行所述事務(wù)時(shí),判斷事務(wù)是否被用戶回滾,若是, 則釋放事務(wù)映像空間,結(jié)束操作,否則,觸發(fā)事務(wù)提交包構(gòu)造模塊620。 進(jìn)一步的,事務(wù)提交包構(gòu)造模塊620,還用于當(dāng)事務(wù)映像空間內(nèi)沒(méi)更新數(shù)據(jù)時(shí),釋 放事務(wù)映像空間,結(jié)束操作; 定時(shí)遍歷模塊660,還用于將延遲事務(wù)管理器中的事務(wù)標(biāo)識(shí)信息和定時(shí)時(shí)間到達(dá) 時(shí)刻的時(shí)間戳寫入本地flash。 顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精 神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍 之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
權(quán)利要求
一種數(shù)據(jù)庫(kù)的事務(wù)提交方法,應(yīng)用在分布式視頻監(jiān)控系統(tǒng)中,其特征在于,包括步驟1、前端服務(wù)進(jìn)程加載事務(wù),建立對(duì)應(yīng)的事務(wù)映像空間,并執(zhí)行所述事務(wù),若所述事務(wù)執(zhí)行結(jié)束后,事務(wù)映像空間內(nèi)存在更新數(shù)據(jù),則構(gòu)造事務(wù)提交包,并向?qū)?yīng)的后端服務(wù)進(jìn)程發(fā)起事務(wù)提交請(qǐng)求,若提交成功,執(zhí)行步驟2,否則,執(zhí)行步驟3;步驟2、判斷所述事務(wù)是否為首次提交,若是,利用所述事務(wù)映像空間中的更新數(shù)據(jù)覆蓋本地內(nèi)存中的主版本,否則,向本地flash寫入本地事務(wù)日志,刪除本地磁盤和延遲事務(wù)管理器中的與所述事務(wù)對(duì)應(yīng)的信息,并利用所述事務(wù)映像空間中的更新數(shù)據(jù)覆蓋本地內(nèi)存中的主版本,轉(zhuǎn)步驟4;步驟3、將所述事務(wù)提交包存入本地磁盤內(nèi)、向本地flash寫入本地事務(wù)日志,并將所述事務(wù)的事務(wù)標(biāo)識(shí)信息插入延遲事務(wù)管理器后,利用所述事務(wù)映像空間中的更新數(shù)據(jù)覆蓋本地內(nèi)存中的主版本,轉(zhuǎn)步驟4;步驟4、定時(shí)遍歷所述延遲事務(wù)管理器,根據(jù)所述延遲事務(wù)管理器中記錄的事務(wù)標(biāo)識(shí)信息,獲取事務(wù)提交包后再次發(fā)起事務(wù)提交請(qǐng)求。
2. 如權(quán)利要求1所述的方法,其特征在于,所述步驟1中還包括在執(zhí)行所述事務(wù)時(shí),判斷所述事務(wù)是否被用戶回滾,若是,則釋放所述事務(wù)映像空間,結(jié)束操作,否則,繼續(xù)執(zhí)行所述事務(wù)。
3. 如權(quán)利要求1或2所述的方法,其特征在于,所述構(gòu)造事務(wù)提交包的過(guò)程具體為所述前端服務(wù)進(jìn)程壓縮所述事務(wù)映像空間內(nèi)的更新數(shù)據(jù)得到提交數(shù)據(jù),并根據(jù)該提交數(shù)據(jù)構(gòu)造事務(wù)提交包,所述事務(wù)提交包包括事務(wù)標(biāo)識(shí)信息和提交數(shù)據(jù)。
4. 如權(quán)利要求1或2所述的方法,其特征在于,所述步驟1中,當(dāng)所述前端服務(wù)進(jìn)程在預(yù)設(shè)時(shí)間內(nèi)接收到后端服務(wù)進(jìn)程發(fā)送的提交成功消息時(shí),判定所述事務(wù)提交成功;當(dāng)所述前端服務(wù)進(jìn)程在預(yù)設(shè)時(shí)間內(nèi)接收到后端服務(wù)進(jìn)程發(fā)送的提交失敗消息或在預(yù)設(shè)時(shí)間內(nèi)未接收到后端服務(wù)進(jìn)程發(fā)送的消息時(shí),判定所述事務(wù)提交失敗。
5. 如權(quán)利要求4所述的方法,其特征在于,所述后端服務(wù)進(jìn)程接收到所述前端服務(wù)進(jìn)程發(fā)起的事務(wù)提交請(qǐng)求時(shí),將事務(wù)提交包寫入自身維護(hù)的flash物理日志文件、將事務(wù)標(biāo)識(shí)信息和全局提交開(kāi)始信息寫入自身維護(hù)的flash邏輯日志文件,當(dāng)兩次寫入日志均成功時(shí),向所述前端服務(wù)進(jìn)程反饋提交成功消息,并將所述事務(wù)標(biāo)識(shí)信息插入自身維護(hù)的事務(wù)提交管理器,否則,向所述前端服務(wù)進(jìn)程反饋提交失敗消息。
6. 如權(quán)利要求5所述的方法,其特征在于,還包括所述后端服務(wù)進(jìn)程定時(shí)遍歷所述事務(wù)提交管理器,將所述flash物理日志文件內(nèi)寫入的事務(wù)提交包寫入自身維護(hù)的磁盤內(nèi),將事務(wù)標(biāo)識(shí)信息和全局提交結(jié)束信息寫入flash邏輯日志文件,并刪除所述事務(wù)提交管理器內(nèi)插入的事務(wù)標(biāo)識(shí)信息。
7. 如權(quán)利要求1或2所述的方法,其特征在于,所述步驟2中,向所述本地flash寫入所述事務(wù)對(duì)應(yīng)的事務(wù)標(biāo)識(shí)信息、事務(wù)提交包的文件名信息和本地提交結(jié)束信息,并刪除本地磁盤中存儲(chǔ)的與所述事務(wù)對(duì)應(yīng)的事務(wù)提交包和延遲事務(wù)管理器中的與所述事務(wù)對(duì)應(yīng)的事務(wù)標(biāo)識(shí)信息;所述步驟3中,向所述本地flash寫入本地事務(wù)日志具體為向本地flash寫入與所述事務(wù)對(duì)應(yīng)的事務(wù)標(biāo)識(shí)信息、事務(wù)提交包的文件名信息和本地提交開(kāi)始信息。
8. 如權(quán)利要求7所述的方法,其特征在于,所述步驟4中,根據(jù)延遲事務(wù)管理器中記錄的事務(wù)標(biāo)識(shí)信息,獲取事務(wù)提交包具體為根據(jù)所述事務(wù)標(biāo)識(shí)信息,查找所述本地flash,獲取記錄的事務(wù)提交包的文件名,并根據(jù)該提交包的文件名查找所述本地磁盤,獲取對(duì)應(yīng)的事務(wù)提交包。
9. 如權(quán)利要求1或2或8所述的方法,其特征在于,所述步驟4中還包括將所述延遲事務(wù)管理器中的事務(wù)標(biāo)識(shí)信息和定時(shí)時(shí)間到達(dá)時(shí)刻的時(shí)間戳寫入所述本地flash。
10. —種數(shù)據(jù)庫(kù)的事務(wù)提交裝置,其特征在于,包括事務(wù)加載模塊,用于加載事務(wù),建立對(duì)應(yīng)的事務(wù)映像空間,執(zhí)行所述事務(wù);事務(wù)提交包構(gòu)造模塊,用于在事務(wù)執(zhí)行結(jié)束后,判斷所述事務(wù)映像空間內(nèi)是否有更新數(shù)據(jù),當(dāng)存在更新數(shù)據(jù)時(shí),構(gòu)造事務(wù)提交包;事務(wù)提交請(qǐng)求下發(fā)模塊,用于向?qū)?yīng)的后端服務(wù)進(jìn)程發(fā)起事務(wù)提交請(qǐng)求,并判斷所述事務(wù)是否提交成功,若是,觸發(fā)事務(wù)提交成功處理模塊,否則,觸發(fā)事務(wù)提交失敗處理模塊;事務(wù)提交成功處理模塊,用于判斷所述事務(wù)是否為首次提交,若是,利用所述事務(wù)映像空間中的更新數(shù)據(jù)覆蓋本地內(nèi)存中的主版本,否則,向本地flash寫入本地事務(wù)日志,刪除本地磁盤和延遲事務(wù)管理器中的與所述事務(wù)對(duì)應(yīng)的信息,并利用所述事務(wù)映像空間中的更新數(shù)據(jù)覆蓋本地內(nèi)存中的主版本,觸發(fā)定時(shí)遍歷模塊;事務(wù)提交失敗處理模塊,用于將所述事務(wù)提交包存入本地磁盤內(nèi)、向本地flash寫入本地事務(wù)日志,并將所述事務(wù)的事務(wù)標(biāo)識(shí)信息插入延遲事務(wù)管理器后,利用所述事務(wù)映像空間中的更新數(shù)據(jù)覆蓋本地內(nèi)存中的主版本,觸發(fā)定時(shí)遍歷模塊;定時(shí)遍歷模塊,用于定時(shí)遍歷所述延遲事務(wù)管理器,根據(jù)所述延遲事務(wù)管理器中記錄的事務(wù)標(biāo)識(shí)信息,獲取事務(wù)提交包后觸發(fā)所述事務(wù)提交請(qǐng)求下發(fā)模塊。
11. 如權(quán)利10所述的裝置,其特征在于,還包括事務(wù)回滾判斷模塊,用于在執(zhí)行所述事務(wù)時(shí),判斷所述事務(wù)是否被用戶回滾,若是,則釋放所述事務(wù)映像空間,結(jié)束操作,否則,觸發(fā)所述事務(wù)提交包構(gòu)造模塊。
12. 如權(quán)利10或11所述的裝置,其特征在于,所述事務(wù)提交包構(gòu)造模塊,還用于當(dāng)所述事務(wù)映像空間內(nèi)沒(méi)更新數(shù)據(jù)時(shí),釋放所述事務(wù)映像空間,結(jié)束操作;所述定時(shí)遍歷模塊,還用于將所述延遲事務(wù)管理器中的事務(wù)標(biāo)識(shí)信息和定時(shí)時(shí)間到達(dá)時(shí)刻的時(shí)間戳寫入所述本地flash。
全文摘要
本發(fā)明公開(kāi)了一種數(shù)據(jù)庫(kù)的事務(wù)提交方法和裝置,該方法包括前端服務(wù)進(jìn)程加載事務(wù),建立事務(wù)映像空間;若事務(wù)執(zhí)行結(jié)束后,事務(wù)映像空間內(nèi)存在更新數(shù)據(jù),則構(gòu)造事務(wù)提交包,并向?qū)?yīng)后端服務(wù)進(jìn)程發(fā)起事務(wù)提交請(qǐng)求,若事務(wù)提交成功,判斷該事務(wù)是否為首次提交,若是,利用事務(wù)映像空間中的更新數(shù)據(jù)覆蓋前端服務(wù)進(jìn)程內(nèi)存中的主版本,否則,清除存儲(chǔ)的與該事務(wù)對(duì)應(yīng)的相關(guān)信息;若事務(wù)提交失敗,存儲(chǔ)該事務(wù)并將事務(wù)的事務(wù)標(biāo)識(shí)信息插入延遲事務(wù)管理器;定時(shí)遍歷延遲事務(wù)管理器,根據(jù)延遲事務(wù)管理器中記錄的事務(wù)標(biāo)識(shí)信息,獲取事務(wù)提交包后開(kāi)始事務(wù)提交。本發(fā)明兼顧事務(wù)的執(zhí)行性能和提交穩(wěn)定性,有效的提高了業(yè)務(wù)的吞吐量。
文檔編號(hào)H04N7/18GK101699439SQ20091022237
公開(kāi)日2010年4月28日 申請(qǐng)日期2009年11月16日 優(yōu)先權(quán)日2009年11月16日
發(fā)明者文韜, 陳亞娟 申請(qǐng)人:中興通訊股份有限公司