0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

嵌入式數(shù)據(jù)庫(kù)中的變更數(shù)據(jù)捕獲

星星科技指導(dǎo)員 ? 來(lái)源:嵌入式計(jì)算設(shè)計(jì) ? 作者:Steve Graves ? 2022-11-24 16:36 ? 次閱讀

變更數(shù)據(jù)捕獲 (CDC) 廣義上定義為跟蹤數(shù)據(jù)庫(kù)中的變更。跟蹤更改的目的多種多樣。嵌入式數(shù)據(jù)庫(kù)系統(tǒng)中的 CDC 可以通過(guò)幾種不同的方式實(shí)現(xiàn),這些方式有時(shí)對(duì)應(yīng)用程序是不可見(jiàn)的,也可以通過(guò)這些方式實(shí)現(xiàn)應(yīng)用程序用于數(shù)據(jù)共享、響應(yīng)事件和增量備份。

在嵌入式數(shù)據(jù)庫(kù)中實(shí)現(xiàn)CDC的第一個(gè)(也可能是最明顯的)是實(shí)現(xiàn)事務(wù)的ACID屬性的一部分:原子性,一致性,隔離性和持久性。將事務(wù)成功應(yīng)用于數(shù)據(jù)庫(kù)會(huì)將該數(shù)據(jù)庫(kù)從一個(gè)一致?tīng)顟B(tài)移動(dòng)到一個(gè)新的一致?tīng)顟B(tài)。相反,不成功將事務(wù)應(yīng)用于數(shù)據(jù)庫(kù)必須將數(shù)據(jù)庫(kù)返回到在成功應(yīng)用事務(wù)之前存在的一致?tīng)顟B(tài)。為了滿足這些要求,數(shù)據(jù)庫(kù)管理系統(tǒng)必須跟蹤更改。實(shí)現(xiàn)細(xì)節(jié)因數(shù)據(jù)庫(kù)系統(tǒng)而異,甚至在數(shù)據(jù)庫(kù)系統(tǒng)系列中,從純內(nèi)存中數(shù)據(jù)庫(kù)、持久內(nèi)存中數(shù)據(jù)庫(kù)以及部分或完全持久數(shù)據(jù)庫(kù)(混合數(shù)據(jù)庫(kù))也有所不同。

對(duì)于純內(nèi)存數(shù)據(jù)庫(kù),沒(méi)有記錄更改的事務(wù)日志。因此,在事務(wù)處于活動(dòng)狀態(tài)時(shí),更改或更改記錄的前映像都需要保存在緩沖區(qū)中,以便在事務(wù)中止時(shí)可以將數(shù)據(jù)庫(kù)還原到其事務(wù)前狀態(tài)。

對(duì)于具有持久性的內(nèi)存中數(shù)據(jù)庫(kù),所有更改也會(huì)追加到存儲(chǔ)在持久性媒體上的事務(wù)日志中,該事務(wù)日志可在崩潰后重播以進(jìn)行恢復(fù)。

對(duì)于持久性(基于磁盤的)數(shù)據(jù)庫(kù),還利用事務(wù)日志記錄來(lái)優(yōu)化性能和支持從崩潰中恢復(fù)。在這種情況下,可以提供兩種形式的事務(wù)日志記錄:撤消日志記錄和預(yù)寫日志記錄 (WAL)。WAL 如上一段所述。撤消日志記錄將已更改記錄的前映像寫入事務(wù)日志文件。在發(fā)生崩潰時(shí),UNDO 日志信息用于回滾不完整的事務(wù)(即將數(shù)據(jù)庫(kù)返回到上一個(gè)一致?tīng)顟B(tài))。

CDC在某些數(shù)據(jù)庫(kù)系統(tǒng)中的另一個(gè)內(nèi)部用途是通過(guò)MVCC(多版本并發(fā)控制)實(shí)現(xiàn)樂(lè)觀并發(fā)控制。樂(lè)觀并發(fā)控制意味著應(yīng)用程序不必獲取鎖,這也意味著應(yīng)用程序永遠(yuǎn)不必等待另一個(gè)應(yīng)用程序持有的鎖。這要求數(shù)據(jù)庫(kù)系統(tǒng)知道兩個(gè)應(yīng)用程序是否同時(shí)嘗試修改同一個(gè)數(shù)據(jù)庫(kù)對(duì)象。這是通過(guò)跟蹤提交事務(wù)時(shí)檢查的版本號(hào)來(lái)完成的(因此稱為多版本并發(fā)控制)。如果對(duì)象的版本在應(yīng)用程序獲取對(duì)象副本和應(yīng)用程序想要提交對(duì)該對(duì)象的更改之間發(fā)生了更改,則意味著另一個(gè)應(yīng)用程序首先修改了基礎(chǔ)對(duì)象,必須中止并重試此事務(wù)。MVCC 背后的理論是,這種沖突很少見(jiàn),并且偶爾重試比總是必須獲取鎖并可能使用這些鎖阻止其他應(yīng)用程序更有效。

CDC 還用于需要“五個(gè) 9”可用性(即 99.999% 正常運(yùn)行時(shí)間)的系統(tǒng)的高可用性 (HA) 實(shí)施中。HA 由不同的數(shù)據(jù)庫(kù)供應(yīng)商以不同的方式實(shí)現(xiàn):實(shí)時(shí)事務(wù)復(fù)制、SQL 語(yǔ)句復(fù)制、日志文件轉(zhuǎn)發(fā)等。有所謂的 1-safe(又名惰性、異步)和 2-safe(又名 eager、同步)實(shí)現(xiàn)。例如,實(shí)時(shí)事務(wù)復(fù)制可以是 1 安全或 2 安全(在eXtremeDB 中,我們將其稱為時(shí)間識(shí)別兩階段提交);日志轉(zhuǎn)發(fā)本質(zhì)上是 1 安全的。

CDC 可在嵌入式數(shù)據(jù)庫(kù)和/或第三方系統(tǒng)中用于可在應(yīng)用程序中使用的其他目的:開(kāi)放復(fù)制、觸發(fā)器/事件通知和增量備份。

一些嵌入式數(shù)據(jù)庫(kù)系統(tǒng)實(shí)現(xiàn)復(fù)制,例如,支持高可用性和/或數(shù)據(jù)庫(kù)集群。此類系統(tǒng)使得在同一數(shù)據(jù)庫(kù)系統(tǒng)的兩個(gè)或多個(gè)實(shí)例之間復(fù)制數(shù)據(jù)或事務(wù)變得容易,但是當(dāng)需要從嵌入式數(shù)據(jù)庫(kù)復(fù)制到任何其他目標(biāo)時(shí),它們不是解決方案。有第三方產(chǎn)品試圖填補(bǔ)這一空白,例如Actian DataConnect和Oracle Golden Gate。或者通過(guò)自定義提取-轉(zhuǎn)換-加載 (ETL) 解決方案,該解決方案可能對(duì)源和/或目標(biāo)數(shù)據(jù)庫(kù)中的更改敏感。

觸發(fā)器和事件通知方案是變更數(shù)據(jù)捕獲的典型用例。畢竟,觸發(fā)器是在指定表的 INSERT、UPDATE 或 DELETE 語(yǔ)句執(zhí)行時(shí)觸發(fā)的。換句話說(shuō),數(shù)據(jù)已經(jīng)改變,觸發(fā)器捕獲了該變化,以便周圍系統(tǒng)以某種方式采取行動(dòng)。

嵌入式數(shù)據(jù)庫(kù)系統(tǒng)中變更數(shù)據(jù)捕獲的最后一個(gè)重要目的是實(shí)現(xiàn)增量備份設(shè)施。增量備份方案必須知道在上次完整快照或上次增量備份之間數(shù)據(jù)庫(kù)中發(fā)生的增量更改。

結(jié)論

變更數(shù)據(jù)捕獲是任何數(shù)據(jù)庫(kù)管理系統(tǒng)的核心。它有助于實(shí)現(xiàn)并發(fā)性和持久性、復(fù)制、觸發(fā)器/事件通知以及備份和還原的 ACID 屬性。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5054

    文章

    18917

    瀏覽量

    300961
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    3739

    瀏覽量

    64181
  • 觸發(fā)器
    +關(guān)注

    關(guān)注

    14

    文章

    1992

    瀏覽量

    60981
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫(kù)出現(xiàn)823錯(cuò)誤的數(shù)據(jù)恢復(fù)案例

    SQL Server數(shù)據(jù)庫(kù)故障: SQL Server附加數(shù)據(jù)庫(kù)出現(xiàn)錯(cuò)誤823,附加數(shù)據(jù)庫(kù)失敗。數(shù)據(jù)庫(kù)沒(méi)有備份,無(wú)法通過(guò)備份恢復(fù)數(shù)據(jù)庫(kù)
    的頭像 發(fā)表于 09-20 11:46 ?235次閱讀
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—SQL Server<b class='flag-5'>數(shù)據(jù)庫(kù)</b>出現(xiàn)823錯(cuò)誤的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—raid5陣列上層Sql Server數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)案例

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)環(huán)境: 5塊硬盤組建一組RAID5陣列,劃分LUN供windows系統(tǒng)服務(wù)器使用。windows系統(tǒng)服務(wù)器內(nèi)運(yùn)行了Sql Server數(shù)據(jù)庫(kù),存儲(chǔ)空間在操作系統(tǒng)層面劃分了三個(gè)邏輯分區(qū)
    的頭像 發(fā)表于 05-08 11:43 ?435次閱讀
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—raid5陣列上層Sql Server<b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    ?通過(guò)Modbus讀寫數(shù)據(jù)庫(kù)數(shù)據(jù)

    本文是將數(shù)據(jù)庫(kù)數(shù)據(jù)轉(zhuǎn)為Modbus服務(wù)端/從站,實(shí)現(xiàn)數(shù)據(jù)庫(kù)內(nèi)的數(shù)據(jù)也可以走M(jìn)odbus協(xié)議通過(guò)網(wǎng)口或串口讀寫的案例,下圖是通過(guò)智能網(wǎng)關(guān)的參數(shù)軟件(在附件
    發(fā)表于 03-14 13:44

    GSMA最新資訊:IMEI數(shù)據(jù)庫(kù)平臺(tái)品牌更新與鏈接地址變更告知

    GSMA最新資訊:IMEI數(shù)據(jù)庫(kù)平臺(tái)品牌更新與鏈接地址變更告知
    的頭像 發(fā)表于 02-19 17:07 ?492次閱讀
    GSMA最新資訊:IMEI<b class='flag-5'>數(shù)據(jù)庫(kù)</b>平臺(tái)品牌更新與鏈接地址<b class='flag-5'>變更</b>告知

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)】Oracle數(shù)據(jù)庫(kù)ASM實(shí)例無(wú)法掛載的數(shù)據(jù)恢復(fù)案例

    oracle數(shù)據(jù)庫(kù)ASM磁盤組掉線,ASM實(shí)例不能掛載。數(shù)據(jù)庫(kù)管理員嘗試修復(fù)數(shù)據(jù)庫(kù),但是沒(méi)有成功。
    的頭像 發(fā)表于 02-01 17:39 ?423次閱讀
    【<b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)】Oracle<b class='flag-5'>數(shù)據(jù)庫(kù)</b>ASM實(shí)例無(wú)法掛載的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    基于Rust的嵌入式符合ACID的鍵值數(shù)據(jù)庫(kù)

    surrealkv -- 基于 Rust 的 low level、版本化、嵌入式、符合 ACID 的鍵值數(shù)據(jù)庫(kù)
    的頭像 發(fā)表于 12-28 11:29 ?817次閱讀

    輕量級(jí)數(shù)據(jù)庫(kù)有哪些類型

    輕量級(jí)數(shù)據(jù)庫(kù)是指具有小巧、靈活、高效的特點(diǎn),適用于小規(guī)模項(xiàng)目和嵌入式設(shè)備的數(shù)據(jù)庫(kù)管理系統(tǒng)。下面是對(duì)輕量級(jí)數(shù)據(jù)庫(kù)類型的詳細(xì)介紹,包括關(guān)系型數(shù)據(jù)庫(kù)
    的頭像 發(fā)表于 12-20 11:29 ?1117次閱讀

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—未開(kāi)啟binlog的Mysql數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)案例

    mysql數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)環(huán)境: 本地服務(wù)器,windows server操作系統(tǒng) ,部署有mysql單實(shí)例,數(shù)據(jù)庫(kù)引擎類型為innodb,獨(dú)立表空間,無(wú)數(shù)據(jù)庫(kù)備份,未開(kāi)啟binlog
    的頭像 發(fā)表于 12-08 14:18 ?1009次閱讀
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—未開(kāi)啟binlog的Mysql<b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    關(guān)于JSON數(shù)據(jù)庫(kù)

    如何理解JSON數(shù)據(jù)庫(kù)?作為NoSQL數(shù)據(jù)庫(kù)的一種類型,JSON數(shù)據(jù)庫(kù)有哪些優(yōu)勢(shì)呢?JSON數(shù)據(jù)庫(kù)如何運(yùn)作,它為應(yīng)用程序開(kāi)發(fā)者帶來(lái)了哪些價(jià)值呢?
    的頭像 發(fā)表于 12-06 13:46 ?792次閱讀
    關(guān)于JSON<b class='flag-5'>數(shù)據(jù)庫(kù)</b>

    oracle數(shù)據(jù)庫(kù)的基本操作

    Oracle數(shù)據(jù)庫(kù)是一種關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS),廣泛應(yīng)用于企業(yè)級(jí)應(yīng)用。它具有強(qiáng)大的功能和靈活的配置選項(xiàng),可以滿足復(fù)雜的數(shù)據(jù)處理需求。本文將介紹Oracle
    的頭像 發(fā)表于 12-06 10:14 ?619次閱讀

    什么是JSON數(shù)據(jù)庫(kù)

    如何理解JSON數(shù)據(jù)庫(kù)?作為NoSQL數(shù)據(jù)庫(kù)的一種類型,JSON數(shù)據(jù)庫(kù)有哪些優(yōu)勢(shì)呢?JSON數(shù)據(jù)庫(kù)如何運(yùn)作,它為應(yīng)用程序開(kāi)發(fā)者帶來(lái)了哪些價(jià)值呢?文章速覽:什么是JSON什么是JSON
    的頭像 發(fā)表于 12-02 08:04 ?779次閱讀
    什么是JSON<b class='flag-5'>數(shù)據(jù)庫(kù)</b>

    NoSQL 數(shù)據(jù)庫(kù)如何選型

    什么是NoSQL數(shù)據(jù)庫(kù)?為什么要使用NoSQL數(shù)據(jù)庫(kù)?鍵值數(shù)據(jù)庫(kù)內(nèi)存鍵值數(shù)據(jù)庫(kù)文檔數(shù)據(jù)庫(kù)列式數(shù)據(jù)庫(kù)
    的頭像 發(fā)表于 11-26 08:05 ?403次閱讀
    NoSQL <b class='flag-5'>數(shù)據(jù)庫(kù)</b>如何選型

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—SQLserver數(shù)據(jù)庫(kù)被加密如何恢復(fù)數(shù)據(jù)?

    一臺(tái)服務(wù)器上的SQLserver數(shù)據(jù)庫(kù)被勒索病毒加密,無(wú)法正常使用。該服務(wù)器上部署有多個(gè)SQLserver數(shù)據(jù)庫(kù),其中有2個(gè)數(shù)據(jù)庫(kù)及備份文件被加密,文件名被篡改,數(shù)據(jù)庫(kù)無(wú)法使用。
    的頭像 發(fā)表于 11-23 14:42 ?845次閱讀
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—SQLserver<b class='flag-5'>數(shù)據(jù)庫(kù)</b>被加密如何恢復(fù)<b class='flag-5'>數(shù)據(jù)</b>?

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—MySQL數(shù)據(jù)庫(kù)表誤刪除記錄的數(shù)據(jù)恢復(fù)案例

    binlog。 數(shù)據(jù)庫(kù)故障&分析: 工作人員在執(zhí)行Delete命令刪除數(shù)據(jù)時(shí)未添加where子句進(jìn)行篩選,導(dǎo)致全表數(shù)據(jù)被刪除,刪除后未對(duì)該表進(jìn)行其他操作。 在本案例,由于m
    的頭像 發(fā)表于 11-09 15:16 ?1215次閱讀
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—MySQL<b class='flag-5'>數(shù)據(jù)庫(kù)</b>表誤刪除記錄的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)——MongoDB數(shù)據(jù)庫(kù)介紹和數(shù)據(jù)恢復(fù)案例

    MongoDB數(shù)據(jù)庫(kù)是文檔數(shù)據(jù)存儲(chǔ)庫(kù),將文檔存儲(chǔ)在集合之中,不是像MySQL一樣的關(guān)系型數(shù)據(jù)庫(kù)
    的頭像 發(fā)表于 11-08 15:04 ?817次閱讀
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)——MongoDB<b class='flag-5'>數(shù)據(jù)庫(kù)</b>介紹和<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例