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

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

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

虹科干貨 | 什么是數(shù)據(jù)庫一致性?

廣州虹科電子 ? 來源:廣州虹科電子 ? 作者:廣州虹科電子 ? 2023-07-13 13:56 ? 次閱讀

數(shù)據(jù)庫一致性(database consistency)由一組值定義,數(shù)據(jù)庫系統(tǒng)中的所有數(shù)據(jù)點都必須與這些值保持一致,才能正確讀取和接受數(shù)據(jù)。如果任何不符合先決條件值的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫,將導(dǎo)致數(shù)據(jù)集出現(xiàn)一致性錯誤。數(shù)據(jù)庫一致性通過建立規(guī)則來實現(xiàn)。任何寫入數(shù)據(jù)庫的數(shù)據(jù)事務(wù)都只能按照數(shù)據(jù)庫開發(fā)人員制定的規(guī)則,包括特定約束、觸發(fā)器、變量、級聯(lián)等來更改受影響的數(shù)據(jù)。

例如,假設(shè)您某地區(qū)的交通安全研究所工作。您的任務(wù)是創(chuàng)建一個新駕照數(shù)據(jù)庫。在過去的十年中,該地區(qū)的人口激增,因此需要為所有首次申領(lǐng)駕照的人提供新的字母和數(shù)字格式。在您的數(shù)據(jù)庫中,該地區(qū)駕照的新設(shè)定值如下:1個字母+ 7個數(shù)字,現(xiàn)在每個條目都必須遵循這一規(guī)則。如果輸入"C08846024",則返回錯誤。為什么?因為輸入的值是1個字母+8個數(shù)字,這實質(zhì)上是一種不一致的數(shù)據(jù)形式。

一致性還意味著,一個表中任何一個特定對象的任何數(shù)據(jù)更改都需要在該對象所在的所有其他表中進(jìn)行更改。繼續(xù)以駕照為例,如果駕駛員的家庭地址發(fā)生變化,則必須在所有存在該地址的表中體現(xiàn)該更新。如果一個表中是舊地址,而其他所有表中卻是新地址,這也是數(shù)據(jù)不一致的典型例子。

注意:數(shù)據(jù)庫一致性并不保證在任何給定事務(wù)中引入的數(shù)據(jù)是正確的,它只保證在系統(tǒng)中寫入和讀取的數(shù)據(jù)符合所有有資格進(jìn)入數(shù)據(jù)庫的數(shù)據(jù)的先決條件。更簡單地說,在上面的示例中,您可以輸入符合1個字母+ 7個數(shù)字規(guī)則的數(shù)據(jù)事務(wù),但這并不能保證數(shù)據(jù)與實際的駕照相對應(yīng)。數(shù)據(jù)庫一致性并不考慮數(shù)據(jù)所代表的內(nèi)容,只考慮其格式。

為什么數(shù)據(jù)庫一致性很重要?

一致的數(shù)據(jù)使數(shù)據(jù)庫能夠像運轉(zhuǎn)良好的機器一樣運行。已建立的規(guī)則/值可將不一致的數(shù)據(jù)排除在主數(shù)據(jù)庫和副本之外,從而保持其操作順利:

準(zhǔn)確性

增加數(shù)據(jù)庫空間

更快、更高效的數(shù)據(jù)檢索

數(shù)據(jù)庫一致性對所有輸入數(shù)據(jù)進(jìn)行管理。因此,盡管數(shù)據(jù)庫在接受新數(shù)據(jù)時會發(fā)生變化,但它至少會根據(jù)一開始制定的驗證規(guī)則一致地發(fā)生變化。如今,全球每天都有數(shù)十億美元的決策是根據(jù)數(shù)據(jù)庫的一致性做出的。當(dāng)實時信息成為現(xiàn)代數(shù)字業(yè)務(wù)的基礎(chǔ)時,制定驗證規(guī)則以確保數(shù)據(jù)集沒有錯誤信息就顯得至關(guān)重要。因為數(shù)據(jù)錯誤增加延遲,損害實時體驗。

數(shù)據(jù)庫一致性示例

現(xiàn)實世界中有哪些數(shù)據(jù)庫一致性操作的例子?我們已經(jīng)在上文的駕照數(shù)據(jù)庫場景中探討了一個例子?,F(xiàn)在我們轉(zhuǎn)向銀行業(yè)看看。

假設(shè)您正在將資金從一個賬戶轉(zhuǎn)入另一個賬戶。您剛剛將12000元轉(zhuǎn)入一個已有3000元的賬戶中。假設(shè)正確刷新后,賬戶余額會顯示為15000元。但是,新余額現(xiàn)在顯示為0元,說明最新的操作并沒有反映在您的余額中。這種技術(shù)上的疏忽是數(shù)據(jù)庫弱一致性的一個典型例子。諸如此類的問題可能會損害銀行聲譽并造成巨大損失。對于任何行業(yè)的數(shù)據(jù)庫開發(fā)人員和消費者來說,數(shù)據(jù)庫系統(tǒng)的強一致性正變得越來越不可或缺。

強一致性 vs 弱一致性

強一致性:主節(jié)點、副本及其所有相應(yīng)節(jié)點中的所有數(shù)據(jù)都符合驗證規(guī)則,并且在任何給定時間內(nèi)都是相同的。有了強數(shù)據(jù)庫一致性,無論從哪個客戶端訪問數(shù)據(jù)—客戶將始終看到遵循數(shù)據(jù)庫既定規(guī)則的更新版本數(shù)據(jù)。

弱一致性:無法保證主節(jié)點、副本節(jié)點或節(jié)點中的數(shù)據(jù)在任何時刻都是相同的。某個客戶可以訪問數(shù)據(jù),并看到通過驗證規(guī)則的信息,但可能不是最近更新的數(shù)據(jù),從而導(dǎo)致一致性錯誤。

Redis Enterprise(Redis企業(yè)版數(shù)據(jù)庫)的Active-Active地理分布允許多個主數(shù)據(jù)庫,使您能夠靈活地處理越來越大的工作負(fù)載。所謂"Active-Active",是指數(shù)據(jù)庫的每個實例都可以接受對任何鍵的讀寫操作。每個數(shù)據(jù)庫實例,無論距離多遠(yuǎn),都是網(wǎng)絡(luò)上的一個對等節(jié)點。這意味著,當(dāng)對任何實例進(jìn)行寫操作時,該節(jié)點會自動向網(wǎng)絡(luò)上的所有其他實例發(fā)送消息,說明緩存中的哪些內(nèi)容發(fā)生了更改,并確保所有實例保留一致的緩存數(shù)據(jù)集。

Redis Enterprise獨特的Active-Active地理分布采用了復(fù)雜的算法,旨在處理可能導(dǎo)致緩存不一致的潛在寫入沖突。這些算法基于無沖突復(fù)制數(shù)據(jù)類型(CRDT),確保來自多個副本的寫入數(shù)據(jù)能夠以有效保持一致性的方式進(jìn)行合并。

虹科是Redis企業(yè)版數(shù)據(jù)庫中國區(qū)戰(zhàn)略合作伙伴,可為您提供技術(shù)支持和解決方案服務(wù)。Redis企業(yè)版軟件(Redis Enterprise)是企業(yè)級的數(shù)據(jù)庫軟件,也是一款實時數(shù)據(jù)平臺,為全球超過8500家知名企業(yè)提供實時數(shù)據(jù)服務(wù)。具有線性可擴(kuò)展性、高可用性、持久性、備份和恢復(fù)、地理分布、分層內(nèi)存訪問、多租戶、安全性等8大核心功能、擁有RediSearch、RedisJSON等7大【Redis企業(yè)版特有模塊】,可以任何規(guī)模在云、本地和混合部署中運行現(xiàn)代應(yīng)用程序,提供無服務(wù)器、多模型的數(shù)據(jù)庫解決方案。

一致性級別

一致性級別是另一組先決條件值,它決定了有多少個副本或節(jié)點必須響應(yīng)新的允許數(shù)據(jù),然后才被確認(rèn)為有效事務(wù)。這種操作可以根據(jù)每筆事務(wù)進(jìn)行更改。例如,程序員可以規(guī)定,在確認(rèn)數(shù)據(jù)一致性之前,只有兩個節(jié)點需要讀取新輸入的數(shù)據(jù)。一旦數(shù)據(jù)跨過了這個界限,它就會被認(rèn)為是一致的數(shù)據(jù)。

隔離級別

隔離級別是數(shù)據(jù)庫ACID(原子性、一致性、隔離性、持久性)屬性的一部分。ACID是SQL數(shù)據(jù)庫一致性的基本概念,也是某些數(shù)據(jù)庫為優(yōu)化數(shù)據(jù)庫一致性而遵循的基本概念。隔離(Isolation)是ACID屬性之一,它將某些數(shù)據(jù)塊與特定數(shù)據(jù)庫網(wǎng)絡(luò)中的所有信息隔離開來,使其不會被其他用戶事務(wù)修改。隔離被用來減少并發(fā)事務(wù)中產(chǎn)生的無關(guān)數(shù)據(jù)的讀寫。

有四種類型的隔離級別:

(1)未提交讀?。鹤畹图墑e。如果前一個事務(wù)對該行進(jìn)行了未提交更新,則停止該行的更新。

(2)已提交讀取:不允許"臟讀"。如果事務(wù)已經(jīng)更新,但尚未提交,則會阻止任何讀取或?qū)懭搿?/p>

(3)可重復(fù)讀?。涸摷墑e使正在讀取的數(shù)據(jù)行不會被訪問和更新。

(4)可序列化:最高隔離級別,可序列化通常鎖定整個表,而不是特定的數(shù)據(jù)行。

復(fù)制過程中的一致性

Redis企業(yè)版數(shù)據(jù)庫軟件能夠?qū)?shù)據(jù)復(fù)制到另一個數(shù)據(jù)庫實例,以獲得高可用性,并將內(nèi)存中的數(shù)據(jù)永久持久化到磁盤上,以獲得持久性。使用WAIT命令,可以控制復(fù)制和持久化數(shù)據(jù)庫的一致性和持久性保證。

向數(shù)據(jù)庫發(fā)布的任何更新通常按以下流程執(zhí)行:

(1)應(yīng)用程序發(fā)出寫操作

(2)代理與系統(tǒng)中包含給定鍵的正確主(也稱為“master”)"分片"通信

(3)分片寫入數(shù)據(jù)并向代理發(fā)送回執(zhí)

(4)代理將回執(zhí)發(fā)送給應(yīng)用程序

(5)主分片向副本發(fā)送寫入信息

(6)副本將寫入確認(rèn)發(fā)回給主服務(wù)器

(7)寫入副本的內(nèi)容被持久化到磁盤上

(8)副本內(nèi)部確認(rèn)寫入

wKgZomSvkb6AU24NAADTTR7XeEg201.png

使用WAIT命令,應(yīng)用程序可以要求僅在復(fù)制或持久性在副本上確認(rèn)后等待確認(rèn)。

命令的寫操作流程如下所示:

(1)應(yīng)用程序發(fā)出寫操作

(2)代理與系統(tǒng)中包含給定key的正確主 "分片"通信

(3)復(fù)制將更新傳遞給副本分片

(4)復(fù)制將更新持久化到磁盤(假設(shè)選擇了每次寫入都自動更新)

(5-8)通過步驟5至8,確認(rèn)從副本一直發(fā)回代理。

通過此流程,應(yīng)用程序只有在復(fù)制到副本和持久化存儲實現(xiàn)耐久性后,才能從寫入中獲得確認(rèn)。

wKgZomSvkdiAGzW5AADVnZ09ZqE750.png

使用WAIT命令,應(yīng)用程序可以保證,在節(jié)點故障或節(jié)點重新啟動的情況下也會記錄已確認(rèn)的寫入。

數(shù)據(jù)庫一致性常見問題解答(QA)

Q:數(shù)據(jù)一致性意味著什么?

A:如果數(shù)據(jù)在同一時間出現(xiàn)在所有相應(yīng)的節(jié)點中,無論用戶在哪里訪問數(shù)據(jù),數(shù)據(jù)都是一致的。

Q:數(shù)據(jù)一致性與數(shù)據(jù)庫一致性是一回事嗎?

A:數(shù)據(jù)一致性是指數(shù)據(jù)在整個網(wǎng)絡(luò)中以及在使用該數(shù)據(jù)的眾多應(yīng)用程序之間盡可能保持一致的過程。數(shù)據(jù)庫一致性要求對進(jìn)入網(wǎng)絡(luò)的數(shù)據(jù)制定驗證規(guī)則,以使其在公式上與表中的所有其他數(shù)據(jù)保持一致。

Q:什么是最終一致性?

A:通過最終一致性,經(jīng)過更新的數(shù)據(jù)最終將反映在存儲該數(shù)據(jù)的所有節(jié)點中。最終,通過最終一致性,無論任何客戶端在網(wǎng)絡(luò)中訪問數(shù)據(jù),所有節(jié)點都將生成相同的數(shù)據(jù)。

Q:關(guān)系數(shù)據(jù)庫中的單個表包括?

A:關(guān)系數(shù)據(jù)庫中的所有數(shù)據(jù)都存儲在表中,表由行和列組成。數(shù)據(jù)點被組織在這些行和列中。行通常被稱為 "記錄",代表數(shù)據(jù)類別,而列或 "字段 "則代表 "實例"。在數(shù)據(jù)庫中可以找到表格,其基于主題的設(shè)計有助于防止數(shù)據(jù)冗余。

Q:關(guān)系數(shù)據(jù)庫由哪些部分組成?

A:關(guān)系數(shù)據(jù)庫由表組成

Q:ACID模型與BASE模型相比有何不同?

A:ACID和BASE(基本可用、軟狀態(tài)、最終一致)模型之間的主要區(qū)別在于,ACID致力于優(yōu)化數(shù)據(jù)庫一致性,而BASE則加強高可用性。ACID可保持事務(wù)一致性,因此如果您采用BASE模型,請確保一致性仍是重中之重,并得到徹底解決。

Q:Redis數(shù)據(jù)庫是否一致?

A:當(dāng)Redis用作緩存時,一致性問題可能發(fā)生在Redis實例(主/副本)之間,以及Redis緩存和作為主數(shù)據(jù)庫的Redis之間。在這種情況下,如果兩者之間的數(shù)據(jù)不匹配,數(shù)據(jù)就會不一致。對于開源Redis來說,一致性較弱,但Redis Enterprise的Active-Active Geo-Distribution提供了較強的最終一致性。

審核編輯 黃宇

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

    關(guān)注

    7

    文章

    3800

    瀏覽量

    64402
收藏 人收藏

    評論

    相關(guān)推薦

    如何使用cmp進(jìn)行數(shù)據(jù)庫管理的技巧

    使用 cmp 命令進(jìn)行數(shù)據(jù)庫管理可能不是最直觀的方法,因為 cmp 通常用于比較兩個文件是否相同。然而,如果你的意圖是使用 cmp 來檢查數(shù)據(jù)庫文件或備份文件的一致性,以下是些技巧和
    的頭像 發(fā)表于 12-17 09:31 ?114次閱讀

    Oracle報錯“system01.dbf需要更多的恢復(fù)來保持一致性”的數(shù)據(jù)恢復(fù)案例

    Oracle數(shù)據(jù)庫故障&分析: 臺Oracle數(shù)據(jù)庫打開報錯,報錯信息: “system01.dbf需要更多的恢復(fù)來保持一致性,數(shù)據(jù)庫
    的頭像 發(fā)表于 11-27 13:10 ?153次閱讀
    Oracle報錯“system01.dbf需要更多的恢復(fù)來保持<b class='flag-5'>一致性</b>”的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    一致性測試系統(tǒng)的技術(shù)原理和也應(yīng)用場景

    網(wǎng)絡(luò)癱瘓等問題。因此,為了保證CAN FD網(wǎng)絡(luò)的正常安全運行,需要對物理層、數(shù)據(jù)鏈路層和應(yīng)用層進(jìn)行一致性測試。例如,物理層一致性測試主要是對CAN FD網(wǎng)絡(luò)節(jié)點的電阻特性、電容特性和總線終端電阻以及
    發(fā)表于 11-01 15:35

    異構(gòu)計算下緩存一致性的重要

    在眾多回復(fù)中,李博杰同學(xué)的回答被認(rèn)為質(zhì)量最高。他首先將緩存一致性分為兩個主要場景:是主機內(nèi)CPU與設(shè)備間的一致性;二是跨主機的一致性。
    的頭像 發(fā)表于 10-24 17:00 ?551次閱讀
    異構(gòu)計算下緩存<b class='flag-5'>一致性</b>的重要<b class='flag-5'>性</b>

    Oracle數(shù)據(jù)恢復(fù)—異常斷電后Oracle數(shù)據(jù)庫報錯的數(shù)據(jù)恢復(fù)案例

    Oracle數(shù)據(jù)庫故障: 機房異常斷電后,Oracle數(shù)據(jù)庫報錯:“system01.dbf需要更多的恢復(fù)來保持一致性數(shù)據(jù)庫無法打開
    的頭像 發(fā)表于 09-30 13:31 ?307次閱讀
    Oracle<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—異常斷電后Oracle<b class='flag-5'>數(shù)據(jù)庫</b>啟<b class='flag-5'>庫</b>報錯的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—Oracle數(shù)據(jù)庫文件system01.dbf損壞的數(shù)據(jù)恢復(fù)案例

    打開oracle數(shù)據(jù)庫報錯“system01.dbf需要更多的恢復(fù)來保持一致性數(shù)據(jù)庫無法打開”。
    的頭像 發(fā)表于 09-21 14:25 ?361次閱讀
    <b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—Oracle<b class='flag-5'>數(shù)據(jù)庫</b>文件system01.dbf損壞的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    級聯(lián)一致性和移相器校準(zhǔn)應(yīng)用手冊

    電子發(fā)燒友網(wǎng)站提供《級聯(lián)一致性和移相器校準(zhǔn)應(yīng)用手冊.pdf》資料免費下載
    發(fā)表于 08-29 10:48 ?0次下載
    級聯(lián)<b class='flag-5'>一致性</b>和移相器校準(zhǔn)應(yīng)用手冊

    LIN一致性測試規(guī)范2.1

    電子發(fā)燒友網(wǎng)站提供《LIN一致性測試規(guī)范2.1.pdf》資料免費下載
    發(fā)表于 08-15 17:14 ?3次下載

    銅線鍵合焊接一致性:如何突破技術(shù)瓶頸?

    在微電子封裝領(lǐng)域,銅線鍵合技術(shù)以其低成本、高效率和良好的電氣性能等優(yōu)勢,逐漸成為芯片與基板連接的主流方式。然而,銅線鍵合過程中的焊接一致性問題是制約其進(jìn)步發(fā)展和應(yīng)用的關(guān)鍵難題。焊接一致性不僅
    的頭像 發(fā)表于 07-04 10:12 ?1779次閱讀
    銅線鍵合焊接<b class='flag-5'>一致性</b>:如何突破技術(shù)瓶頸?

    請問ESP-NOW對數(shù)據(jù)的完整一致性有校驗嗎?

    當(dāng)使用ESP-NOW時,傳遞的數(shù)據(jù)在傳輸層有對數(shù)據(jù)包的完整(比如對面?zhèn)鹘o我的字節(jié)數(shù)和我收到的字節(jié)數(shù)是否相同)有底層校驗嗎? 還有這個數(shù)據(jù)包是否經(jīng)過了CRC等差錯檢測的校驗?zāi)?就是
    發(fā)表于 06-17 06:55

    為什么主機廠愈來愈重視CAN一致性測試?

    新能源汽車迅猛發(fā)展下整車CAN網(wǎng)絡(luò)架構(gòu)日益復(fù)雜,總線故障等潛在問題時刻影響著運行安全。整車零部件通過CAN一致性測試必將是安全保障的第道門檻。CAN一致性測試,就是要求整車CAN網(wǎng)絡(luò)中的節(jié)點都滿足
    的頭像 發(fā)表于 05-29 08:24 ?1188次閱讀
    為什么主機廠愈來愈重視CAN<b class='flag-5'>一致性</b>測試?

     QSFP一致性測試的專業(yè)測試設(shè)備

    、高速度的光纖接口模塊,廣泛應(yīng)用于數(shù)據(jù)中心、高速以太網(wǎng)和光纖通信等領(lǐng)域。本文將詳細(xì)探討QSFP一致性測試的目的、測試內(nèi)容、測試方法以及測試的重要等方面。 QSFP一致性測試的目的是確
    的頭像 發(fā)表于 03-14 10:40 ?600次閱讀
     QSFP<b class='flag-5'>一致性</b>測試的專業(yè)測試設(shè)備

    企業(yè)數(shù)據(jù)備份體系化方法論的七大原則:深入理解數(shù)據(jù)備份的關(guān)鍵原則:應(yīng)用一致性與崩潰一致性的區(qū)別

    在數(shù)字化時代,數(shù)據(jù)備份成為了企業(yè)信息安全的核心環(huán)節(jié)。但在備份過程中,兩個關(guān)鍵概念——應(yīng)用一致性和崩潰一致性,常常被誤解或混淆。本文旨在闡明這兩個概念的差異,并分析它們在數(shù)據(jù)備份中的重要
    的頭像 發(fā)表于 03-11 14:05 ?473次閱讀
    企業(yè)<b class='flag-5'>數(shù)據(jù)</b>備份體系化方法論的七大原則:深入理解<b class='flag-5'>數(shù)據(jù)</b>備份的關(guān)鍵原則:應(yīng)用<b class='flag-5'>一致性</b>與崩潰<b class='flag-5'>一致性</b>的區(qū)別

    深入理解數(shù)據(jù)備份的關(guān)鍵原則:應(yīng)用一致性與崩潰一致性的區(qū)別

    深入理解數(shù)據(jù)備份的關(guān)鍵原則:應(yīng)用一致性與崩潰一致性的區(qū)別 在數(shù)字化時代,數(shù)據(jù)備份成為了企業(yè)信息安全的核心環(huán)節(jié)。但在備份過程中,兩個關(guān)鍵概念——應(yīng)用
    的頭像 發(fā)表于 03-11 11:29 ?925次閱讀
    深入理解<b class='flag-5'>數(shù)據(jù)</b>備份的關(guān)鍵原則:應(yīng)用<b class='flag-5'>一致性</b>與崩潰<b class='flag-5'>一致性</b>的區(qū)別

    DDR一致性測試的操作步驟

    DDR一致性測試的操作步驟? DDR(雙數(shù)據(jù)率)一致性測試是對DDR內(nèi)存模塊進(jìn)行測試以確保其性能和可靠。在進(jìn)行DDR一致性測試時,需要遵循
    的頭像 發(fā)表于 02-01 16:24 ?1541次閱讀