關(guān)系數(shù)據(jù)庫(kù)依靠某些屬性來(lái)確保數(shù)據(jù)的可靠性和可信度。這些屬性用首字母縮略詞 ACID 來(lái)概括,分別代表原子性、一致性、隔離性和持久性。在本博客中,我們將使用現(xiàn)實(shí)生活中的場(chǎng)景和示例深入研究這些屬性。
原子性:全部或無(wú)
原子性確保事務(wù)被視為單個(gè)單元,該單元要么完全完成,要么完全中止。
示例:考慮一個(gè)場(chǎng)景,您將 100 美元從用戶 A 轉(zhuǎn)賬給用戶 B:
初始狀態(tài):
用戶A:1000美元
用戶B:500美元
如果在傳輸過(guò)程中,數(shù)據(jù)庫(kù)在從用戶 A 扣除 100 美元之后但在將其添加到用戶 B 之前崩潰,則原子性可確保事務(wù)回滾到原始狀態(tài):
回滾狀態(tài):
用戶A:1000美元
用戶B:500美元
隔離:保護(hù)您的交易不受彼此影響
數(shù)據(jù)庫(kù)中術(shù)語(yǔ)“隔離”的核心是保護(hù)的概念。將每筆交易想象成一個(gè)小泡沫。隔離可確保這些氣泡不會(huì)破裂或相互混合。通過(guò)這樣做,它可以保證我們的數(shù)據(jù)安全無(wú)害。
揭開(kāi)閱讀現(xiàn)象:
當(dāng)我們談?wù)摗白x取現(xiàn)象”時(shí),我們討論的是事務(wù)重疊時(shí)可能發(fā)生的意外情況。讓我們逐一看看:
臟讀:想象一下有人正在打掃房間時(shí)偷看房間。一切都散了,一片狼藉。類(lèi)似地,臟讀就像查看另一個(gè)事務(wù)仍在更改的數(shù)據(jù)。由于這種變化可能會(huì)逆轉(zhuǎn),因此您所看到的內(nèi)容可能不會(huì)持續(xù)存在。
不可重復(fù)讀取:想象一下您記下籃子里蘋(píng)果的數(shù)量。一分鐘后,你再次數(shù)數(shù),但數(shù)字發(fā)生了變化,因?yàn)橛腥四米吡嘶蛱砑恿艘粋€(gè)蘋(píng)果。這就是這里發(fā)生的事情;您在事務(wù)開(kāi)始時(shí)讀取的數(shù)據(jù)可能會(huì)在事務(wù)完成時(shí)發(fā)生變化。
幻讀:這就像檢查一籃子里有蘋(píng)果,然后在下一次檢查中發(fā)現(xiàn)橘子。真是出乎意料?。‘?dāng)事務(wù)期間出現(xiàn)新數(shù)據(jù)(如那些神秘的橙子)時(shí),就會(huì)發(fā)生幻讀。
丟失的更新:想象一下兩位藝術(shù)家在同一張畫(huà)布上繪畫(huà)。如果他們?cè)诒舜说淖髌飞献鳟?huà),他們的貢獻(xiàn)之一可能會(huì)消失。同樣,當(dāng)兩個(gè)事務(wù)嘗試更改同一數(shù)據(jù)時(shí),其中一個(gè)更改可能會(huì)被忽略。
隔離級(jí)別 - 設(shè)置邊界:
不同的隔離級(jí)別決定了我們保護(hù)交易泡沫的嚴(yán)格程度:
未提交的閱讀:這就像一個(gè)門(mén)開(kāi)著的房間。你可以看到里面發(fā)生的一切,無(wú)論它是否完成。您可以看到其他事務(wù)正在進(jìn)行的(未提交的)更改和已完成的(已提交的)更改。
已讀承諾:現(xiàn)在,門(mén)已微閉。只有當(dāng)事情完成并解決后你才能看到它們。此級(jí)別允許您僅查看其他事務(wù)中已完成的更改。
可重復(fù)閱讀:想象一下,數(shù)一下籃子里的蘋(píng)果,然后在籃子周?chē)乓粋€(gè)防護(hù)罩,這樣就沒(méi)有人可以改變計(jì)數(shù)。在此級(jí)別下,您讀取的任何數(shù)據(jù)在整個(gè)交易過(guò)程中都保持一致。
快照:這就像給房間拍一張照片。即使內(nèi)部情況發(fā)生變化,您也會(huì)始終查看照片,保持一致。從交易開(kāi)始,您就會(huì)看到數(shù)據(jù)的“凍結(jié)”視圖。
可序列化:想象一座狹窄的橋,一次只能一個(gè)人通過(guò)。交易排隊(duì)等候,確保它們不會(huì)相互干擾。
隔離級(jí)別比較:
一致性:將其想象為事實(shí)檢查器
在數(shù)據(jù)庫(kù)的世界里,“一致性”就像有一個(gè)細(xì)致的事實(shí)檢查員,確保一切都匹配并且沒(méi)有矛盾。它確保數(shù)據(jù)庫(kù)中的每條信息都是可靠且值得信賴的。
用一個(gè)簡(jiǎn)單的類(lèi)比來(lái)理解數(shù)據(jù)一致性:
想象一下您正在翻閱一本相冊(cè)。每張照片下方都有一個(gè)數(shù)字,表示該照片在社交媒體平臺(tái)上被點(diǎn)贊的次數(shù)。
現(xiàn)在,除了這張相冊(cè)之外,您還有一本日記,記錄了誰(shuí)喜歡了哪張照片。如果相冊(cè)中的一張照片有 5 個(gè)贊,那么您的日記中應(yīng)該有 5 條喜歡該照片的人的條目。如果專(zhuān)輯說(shuō)有5個(gè)贊,但日記里只列出了3個(gè)名字,那就沒(méi)有意義了,對(duì)吧?這就是我們所說(shuō)的數(shù)據(jù)一致性——確保數(shù)據(jù)庫(kù)中不同位置的相關(guān)數(shù)據(jù)匹配。
簡(jiǎn)單來(lái)說(shuō)數(shù)據(jù)一致性:
相冊(cè)(表一):貓的照片 - 5 贊
日記(表2):愛(ài)麗絲喜歡這張貓的照片。鮑勃喜歡這張貓的照片。卡拉喜歡這張貓的照片。大衛(wèi)喜歡這張貓的照片。艾瑪喜歡這張貓的照片。
如果相冊(cè)和日記之間存在任何不匹配,我們值得信賴的事實(shí)檢查員(一致性)會(huì)指出并說(shuō):“嘿,這里有些不對(duì)勁!”
了解書(shū)籍示例的閱讀一致性:
現(xiàn)在,假設(shè)您已經(jīng)寫(xiě)了一本書(shū)并且擁有主副本(主要)。為了讓更多人閱讀它,您創(chuàng)建了這本書(shū)的副本(副本)。
如果您對(duì)主副本進(jìn)行更改(例如編輯段落),副本也應(yīng)反映該更改。如果有人在您進(jìn)行編輯后立即拿起副本進(jìn)行閱讀,那么他們最好會(huì)看到最新版本。如果不是立即,那么不久之后。這確保了無(wú)論某人正在閱讀主書(shū)還是其中一本副本,他們都能獲得一致的信息。
用數(shù)據(jù)庫(kù)術(shù)語(yǔ)來(lái)說(shuō),即使有一點(diǎn)點(diǎn)延遲(因?yàn)樵谌魏蔚胤竭M(jìn)行更改都需要一點(diǎn)時(shí)間),我們也應(yīng)該達(dá)到更新每個(gè)副本的程度。這稱(chēng)為“最終一致性”。
耐用性:將其視為保存游戲進(jìn)度
在數(shù)據(jù)庫(kù)世界中,持久性就像保存電子游戲中的進(jìn)度一樣。想象一下,您正在玩一個(gè)具有挑戰(zhàn)性的關(guān)卡,經(jīng)過(guò)數(shù)小時(shí)的努力,您終于征服了它。您不想冒失去進(jìn)度的風(fēng)險(xiǎn),對(duì)嗎?您需要保存游戲,以確保即使發(fā)生斷電或游戲機(jī)重新啟動(dòng),您也不必再次玩該關(guān)卡。這正是持久性對(duì)數(shù)據(jù)庫(kù)所做的事情;它確保一旦進(jìn)行更改,無(wú)論發(fā)生什么情況,都會(huì)保存并保持保存狀態(tài)。
確保保存游戲(數(shù)據(jù))的不同方法:
“自動(dòng)保存”功能(預(yù)寫(xiě)日志):就像某些視頻游戲會(huì)在特定檢查點(diǎn)自動(dòng)保存您的進(jìn)度一樣,數(shù)據(jù)庫(kù)有一個(gè)系統(tǒng),可以在完全更新所有內(nèi)容之前記錄更改。這是一個(gè)快速的自我提示,“記住保存此更改?!?/p>
游戲日記(Journaling):有些玩家會(huì)寫(xiě)日記或日記,記錄他們?cè)谟螒蛑兴龅氖虑?。同樣,?shù)據(jù)庫(kù)可能會(huì)將更改存儲(chǔ)在單獨(dú)的“日記”中,然后再將其永久化。
強(qiáng)制保存選項(xiàng)(數(shù)據(jù)文件同步):您是否曾經(jīng)因?yàn)椴恍湃巫詣?dòng)保存而手動(dòng)選擇保存游戲?在數(shù)據(jù)庫(kù)世界中,有一種方法可以強(qiáng)制系統(tǒng)在更改后立即保存任何新數(shù)據(jù)。
多個(gè)保存文件(復(fù)制):為您的游戲提供多個(gè)保存文件總是一個(gè)好主意。同樣,數(shù)據(jù)庫(kù)通常會(huì)跨不同位置創(chuàng)建數(shù)據(jù)副本。如果一個(gè)“保存文件”出現(xiàn)問(wèn)題,還可以依靠其他文件。
云備份(備份和恢復(fù)):就像您可以在云上備份游戲進(jìn)度一樣,數(shù)據(jù)庫(kù)也有一個(gè)定期在其他地方保存數(shù)據(jù)的系統(tǒng)。這樣,如果出現(xiàn)問(wèn)題,他們可以從之前的點(diǎn)“加載”并恢復(fù)游戲(數(shù)據(jù))。
因此,簡(jiǎn)而言之,數(shù)據(jù)庫(kù)世界中的持久性就是確保一旦取得進(jìn)展(或更改),就不會(huì)丟失它。這是關(guān)于保存、重新保存以及為您的備份進(jìn)行備份!
ACID 屬性為數(shù)據(jù)庫(kù)可靠性提供了支柱。從銀行業(yè)務(wù)到社交媒體更新,這些原則確保我們的數(shù)據(jù)即使在系統(tǒng)故障的情況下也保持一致、可靠和值得信賴。通過(guò)理解這些概念,我們對(duì)現(xiàn)代數(shù)據(jù)庫(kù)系統(tǒng)的穩(wěn)健性和復(fù)雜性有了更深入的認(rèn)識(shí)。文章來(lái)源:http://www.zghlxwxcb.cn/article/385.html
文章來(lái)源地址http://www.zghlxwxcb.cn/article/385.html
到此這篇關(guān)于SQL 中的 ACID 和事務(wù)的文章就介紹到這了,更多相關(guān)內(nèi)容可以在右上角搜索或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!