當前位置:首頁 » 數據倉庫 » 資料庫acid特性
擴展閱讀
腳本搜值為什麼一直是0 2022-08-17 03:00:41
oraclesql怎麼連接 2022-08-17 03:00:38
電腦變wifi軟體 2022-08-17 02:59:12

資料庫acid特性

發布時間: 2022-06-30 15:45:57

A. 大數據時代下Apache Kafka是資料庫

首先明確說明它不是資料庫,它沒有schema,也沒有表,更沒有索引。它僅僅是生產消息流、消費消息流而已。從這個角度來說Kafka的確不像資料庫,至少不像我們熟知的關系型資料庫。
那麼到底什麼是資料庫呢?或者說什麼特性使得一個系統可以被稱為資料庫?經典的教科書是這么說的:資料庫是提供 ACID 特性的,即atomicity、consistency、isolation和rability。好了,現在問題演變成了Apache Kafka支持ACID嗎?如果它支持,Kafka又是怎麼支持的呢?要回答這些問題,我們依次討論下ACID。
1、持久性(rability)
我們先從最容易的持久性開始說起,因為持久性最容易理解。在80年代持久性指的是把數據寫入到磁帶中,這是一種很古老的存儲設備,現在應該已經絕跡了。目前實現持久性更常見的做法是將數據寫入到物理磁碟上,而這也只能實現單機的持久性。當演進到分布式系統時代後,持久性指的是將數據通過備份機制拷貝到多台機器的磁碟上。很多資料庫廠商都有自己的分布式系統解決方案,如GreenPlum和Oracle RAC。它們都提供了這種多機備份的持久性。和它們類似,Apache Kafka天然也是支持這種持久性的,它提供的副本機制在實現原理上幾乎和資料庫廠商的方案是一樣的。
2、原子性(atomicity)
資料庫中的原子性和多線程領域內的原子性不是一回事。我們知道在Java中有AtomicInteger這樣的類能夠提供線程安全的整數操作服務,這里的atomicity關心的是在多個線程並發的情況下如何保證正確性的問題。而在資料庫領域,原子性關心的是如何應對錯誤或異常情況,特別是對於事務的處理。如果服務發生故障,之前提交的事務要保證已經持久化,而當前運行的事務要終止(abort),它執行的所有操作都要回滾,最終的狀態就好像該事務從未運行過那樣。舉個實際的例子,
第三個方法是採用基於日誌結構的消息隊列來實現,比如使用Kafka來做,如下圖所示:
在這個架構中app僅僅是向Kafka寫入消息,而下面的資料庫、cache和index作為獨立的consumer消費這個日誌——Kafka分區的順序性保證了app端更新操作的順序性。如果某個consumer消費速度慢於其他consumer也沒關系,畢竟消息依然在Kafka中保存著。總而言之,有了Kafka所有的異質系統都能以相同的順序應用app端的更新操作,從而實現了數據的最終一致性。這種方法有個專屬的名字,叫capture data change,也稱CDC。

3、隔離性(isolation)
在傳統的關系型資料庫中最強的隔離級別通常是指serializability,國內一般翻譯成可串列化或串列化。表達的思想就是連接資料庫的每個客戶端在執行各自的事務時資料庫會給它們一個假象:彷彿每個客戶端的事務都順序執行的,即執行完一個事務之後再開始執行下一個事務。其實資料庫端同時會處理多個事務,但serializability保證了它們就像單獨執行一樣。舉個例子,在一個論壇系統中,每個新用戶都需要注冊一個唯一的用戶名。一個簡單的app實現邏輯大概是這樣的:
4、一致性(consistency)
最後說說一致性。按照Kelppmann大神的原話,這是一個很奇怪的屬性:在所有ACID特性中,其他三項特性的確屬於資料庫層面需要實現或保證的,但只有一致性是由用戶來保證的。嚴格來說,它不屬於資料庫的特性,而應該屬於使用資料庫的一種方式。坦率說第一次聽到這句話時我本人還是有點震驚的,因為從沒有往這個方面考慮過,但仔細想想還真是這么回事。比如剛才的注冊用戶名的例子中我們要求每個用戶名是唯一的。這種一致性約束是由我們用戶做出的,而不是資料庫本身。資料庫本身並不關心或並不知道用戶名是否應該是唯一的。針對Kafka而言,這種一致性又意味著什麼呢?Kelppmann沒有具體展開,但我個人認為他應該指的是linearizability、消息順序之間的一致性以及分布式事務。幸運的是,Kafka的備份機制實現了linearizability和total order broadcast,而且在Kafka 0.11開始也支持分布式事務了。

B. 什麼是事務的ACID特性

ACID指資料庫事務正確執行的四個基本要素的縮寫,包含原子性(atomicity)、一致性(consistency)、隔離性(isolation)和持久性(rability)。

一個支持事務的資料庫系統,必須要具有這四種特性,否則在事務執行過程中無法保證數據的正確性,處理過程極可能達不到正確要求。

(2)資料庫acid特性擴展閱讀

在標准sql規范中,定義了 4個事務隔離級別,不同的隔離級別對事務的處理不同, 如未授權讀取、授權讀取、可重復讀取和串列化

①未授權讀取

未授權讀取也被稱為讀未提交(Read Uncommitted),該隔離級別允許臟讀取,其隔離級別最低。換句話說,如果一個事務正在處理某一數據,並對其進行了更新,但同時尚未完成事務,因此還沒有進行事務提交,而與此同時,允許另一個事務也能夠訪問該數據。

②授權讀取

授權讀取也被稱為讀已提交(Read Committed),它和未授權讀取非常相近,唯一的區別就是授權讀取只允許獲取已經被提交的數據。同樣以上面的例子來說,事務 A和事務同時進行,事務A進行與上述同樣的操作,此時,事務B無法看到這個數據項在事務A操作過程中的所有中間值,只能看到最終的10。

另外,如果說有一個事務C,和事務A進行非常類似的操作,只是事務C是將數據項從10加到 20,此時事務B也同樣可以讀取到20,即授權讀取允許不可重復讀取。

③可重復讀取

可重復讀取(Repeatable Read),簡單地說,就是保證在事務處理過程中,多次讀取同一個數據時,其值都和事務開始時刻是一致的。因此該事務級別禁止了不可重復讀取和臟讀取,但是有可能出現幻影數據。

④串列化

串列化( Serializable)是最嚴格的事務隔離級別。它要求所有事務都被串列執行,即事務只能一個接一個地進行處理,不能並發執行。

C. 什麼是事務,SQL Server中的事務有什麼特點

事務是恢復和並發控制的基本單位。
事務應該具有4個屬性:原子性、一致性、隔離性、持續性。這四個屬性通常稱為ACID特性。
原子性(atomicity)。一個事務是一個不可分割的工作單位,事務中包括的諸操作要麼都做,要麼都不做。
一致性(consistency)。事務必須是使資料庫從一個一致性狀態變到另一個一致性狀態。一致性與原子性是密切相關的。
隔離性(isolation)。一個事務的執行不能被其他事務干擾。即一個事務內部的操作及使用的數據對並發的其他事務是隔離的,並發執行的各個事務之間不能互相干擾。
持久性(rability)。持續性也稱永久性(permanence),指一個事務一旦提交,它對資料庫中數據的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響。

D. 如何驗證GBase8s資料庫ACID特性

在實際的生產運行環境中,很多客戶現場都看到開發人員和系統管理人員遇到很多有關於GBase 8s 資料庫引起的性能問題,進而被多次問起如何進行GBase 8s 資料庫性能調優,

性能優化原則
包括:

性能規劃:深入了解應用與資料庫的交互特徵,確立良好的設計、開發、測試迭代過程,上線前消除模型上的性能瓶頸。
實例調優:建立性能基準,對比調節資料庫、操作系統、存儲、網路等的配置,主動監控、消除瓶頸。
SQL 調優:書寫高效 SQL,優化相關資料庫對象,充分藉助優化器,確定最佳執行計劃。
性能優化流程
首先執行下面的初始檢查:
– 獲取直接用戶的使用反饋,確定性能目標和范圍。
– 獲取性能表現好與壞時的操作系統、資料庫、應用統計信息。
– 對資料庫做一次全面健康檢查。
根據收集的信息,以及對應用特性的了解,構建性能概念模型,明確性能瓶頸所在,以及導致性能的根本原因。
– 首先應該排除操作系統、硬體資源造成的瓶頸。
– 然後針對資料庫系統性能進行分析
– 必要時,還需要檢查應用日誌,因為系統性能問題也可能由於應用非 SQL 部分造成瓶頸。
提出一系列針對的優化措施,並根據它們對性能改善的重要程度排序,然後逐一加以實施。不要一次執行所有的優化措施,必須逐條嘗試,逐步對比。
通過獲取直接用戶的反饋驗證調節是否已經產生預期的效果,否則,需要重新提煉性能概念模型,直到對應用特性了解進一步准確。
重復上述,直到性能達到目標或由於客觀約束無法進一步優化。
常見調優技巧
找到 CPU 佔用最高的 SQL

在 sysmaster 庫中執行
select sqx_estcost, sqx_sqlstatement
from syssqexplain
order by sqx_estcost desc
1
2
3
注意:此時看到的僅僅是當前正在執行的 SQL
需要多看幾次

onstat 命令
onstat -g act 得到當前正在執行的 SQL

根據 rstcb 列
onstat -u | grep 57c68220
1
從第三列 sessid 得到 SESSION
onstat -g ses SESSION 即可得到當時正在執行的 SQL
一般多找幾個 threads 後,就基本可以確定問題 SQL

得到 SQL 後,利用 set explain on 分析其查詢路徑,看是否未利用索引,在對大表進行全表掃描,根據需要創建相應索引。

E. 資料庫中的事務(Transaction)的ACID指的是什麼

事務是由一組SQL語句組成的邏輯處理單元,事務具有以下4個屬性,通常簡稱為事務的ACID屬性。
ACID是Atomic(原子性)
Consistency(一致性)
Isolation(隔離性)
Durability(持久性)的英文縮寫。

Atomic(原子性):指整個資料庫事務是不可分割的工作單位。只有使據庫中所有的操作執行成功,才算整個事務成功;事務中任何一個SQL語句執行失敗,那麼已經執行成功的SQL語句也必須撤銷,資料庫狀態應該退回到執行事務前的狀態。
Consistency(一致性):指資料庫事務不能破壞關系數據的完整性以及業務邏輯上的一致性。例如對銀行轉帳事務,不管事務成功還是失敗,應該保證事務結束後ACCOUNTS表中Tom和Jack的存款總額為2000元。
Isolation(隔離性):指的是在並發環境中,當不同的事務同時操縱相同的數據時,每個事務都有各自的完整數據空間。
Durability(持久性):指的是只要事務成功結束,它對資料庫所做的更新就必須永久保存下來。即使發生系統崩潰,重新啟動資料庫系統後,資料庫還能恢復到事務成功結束時的狀態。

F. 什麼是事務的acid性質

ACID,是指在資料庫管理系統(DBMS)中事務所具有的四個特性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation,又稱獨立性)、持久性(Durability)。
在資料庫系統中,一個事務是指由一系列資料庫操作組成的一個完整的邏輯過程。例如銀行轉帳,從原賬戶扣除金額,以及向目標賬戶添加金額,這兩個資料庫操作的總和構成一個完整的邏輯過程,不可拆分。這個過程被稱為一個事務,具有ACID特性。
1)原子性:
整個事務中的所有操作,要麼全部完成,要麼全部不完成,不可能停滯在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。
比如說,一個事務開始更新100行記錄,但是在更新了20行之後(因為某種原因)失敗了,那麼此時資料庫會回滾(撤銷)對那20條記錄的修改。

2)一致性:
在事務開始之前和事務結束以後,資料庫的完整性約束沒有被破壞。
事務將資料庫從一個一致性狀態帶入另一個一致性狀態。 比如說,在一個銀行事務(在描述關系資料庫事務的特性時,基本上都是用銀行事務來作為描述對象的)中,需要從存儲賬戶扣除款項,然後在支付賬戶中增加款項。 如果在這個中轉的過程發生了失敗,那麼絕對不能讓資料庫只執行其中一個賬戶的操作,因為這樣會導致數據處於不一致的狀態(這樣的話,銀行的賬目上,借貸就不平衡了)。
如果資料庫系統運行中發生故障,有些事物尚未完成就被迫中斷了,系統就將此事務中對資料庫的所有已經完成的操作全部撤銷,滾回到事務開始時的一致狀態。

3)隔離性:
兩個事務的執行是互不幹擾的,一個事務不可能看到其他事務運行時,中間某一時刻的數據。
這個特性是說,直到事務結束時(commit/rollback),其他事務(或者會話)對此事務所操作的數據都不可見(但並不是說其他會話的讀取會被阻塞)。 比如說,一個用戶正在修改hr.employees表,但是沒有提交,那麼其他用戶在這個修改沒有提交之前是看不到這個修改的。

4)持久性:
在事務完成以後,該事務所對資料庫所作的更改便持久的保存在資料庫之中,並不會被回滾。
指的是只要事務成功結束,它對資料庫所做的更新就必須永久保存下來。即使發生系統崩潰,重新啟動資料庫系統後,資料庫還能恢復到事務成功結束時的狀態。
被提交的更改會永久地保存到資料庫中(並不是說以後就不可以修改)。 事務提交之後,資料庫必須通過「恢復機制」來確保事務更改的數據不會丟失。

G. 什麼叫做事務以及事務的四個特性

事務(Transaction),一般是指要做的或所做的事情。在計算機術語中是指訪問並可能更新資料庫中各種數據項的一個程序執行單元(unit)。事務應該具有4個屬性:原子性、一致性、隔離性、持久性。這四個屬性通常稱為ACID特性。

1、原子性。一個事務是一個不可分割的工作單位,事務中包括的諸操作要麼都做,要麼都不做。

2、一致性。事務必須是使資料庫從一個一致性狀態變到另一個一致性狀態。一致性與原子性是密切相關的。

3、隔離性。一個事務的執行不能被其他事務干擾。即一個事務內部的操作及使用的數據對並發的其他事務是隔離的,並發執行的各個事務之間不能互相干擾。

4、持久性。指一個事務一旦提交,它對資料庫中數據的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響。

(7)資料庫acid特性擴展閱讀

事務類型:

1、手動事務。手動事務允許顯式處理若干過程,這些過程包括:開始事務、控制事務邊界內的每個連接和資源登記、確定事務結果(提交或中止)以及結束事務。

2、自動事務。NET 頁、XML Web services方法或 NET Framework 類一旦被標記為參與事務,它們將自動在事務范圍內執行。可以通過在頁、XML Web services 方法或類中設置一個事務屬性值來控制對象的事務行為。

H. Java資料庫里,事務的ACID是指什麼

ACID,指資料庫事務正確執行的四個基本要素的縮寫。包含:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。

I. SQL SERVER的事務模式 和各自的特點

事務是恢復和並發控制的基本單位。
事務應該具有4個屬性:原子性、一致性、隔離性、持續性。這四個屬性通常稱為acid特性。
原子性(atomicity)。一個事務是一個不可分割的工作單位,事務中包括的諸操作要麼都做,要麼都不做。
一致性(consistency)。事務必須是使資料庫從一個一致性狀態變到另一個一致性狀態。一致性與原子性是密切相關的。
隔離性(isolation)。一個事務的執行不能被其他事務干擾。即一個事務內部的操作及使用的數據對並發的其他事務是隔離的,並發執行的各個事務之間不能互相干擾。
持久性(rability)。持續性也稱永久性(permanence),指一個事務一旦提交,它對資料庫中數據的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響。