天天看點

什麼是事務資料庫?

這是我參與8月更文挑戰的第10天,活動詳情檢視:8月更文挑戰

正如這篇文章的标題所問,什麼是事務資料庫?簡短的回答是,它是一個支援全有或全無資料操作的存儲系統,通常稱為事務。這意味着,如果要執行的某些可能很長的資料操作清單(例如,建立、更新或删除資訊)的任何子集因任何原因失敗,則所有操作都将被放棄,并且資料庫将恢複到任何操作之前的狀态。的行動開始了。

此功能提供了可靠的資訊存儲和處理,因為它可以防止錯誤的資料操作,進而確定資料庫始終處于正确狀态。事務資料庫為資料完整性提供保證,即使在系統故障的情況下也是如此,這對于許多用例來說可能是關鍵任務。

考慮一個銀行客戶使用移動裝置上的應用程式将資金從一個帳戶轉移到另一個帳戶的快速而常見的示例。完整且正确的交易需要借記來源帳戶和貸記目的地帳戶。

但是,如果斷電,資料庫伺服器後原點帳戶尚未扣除之前的目标賬戶貸記?一個真正的事務資料庫確定在這種情況下整個事務的第一部分被取消(或“復原”),因為第二部分沒有通過,盡管發生故障,資料庫仍保持正确和一緻的狀态。

在本文中,我們将更詳細地研究資料庫事務及其重要性,解釋“ACID 合規性”的四個要素及其重要性,讨論當資料和事務分布在現代系統中時維護這些要素所涉及的常見困難,并提供一些關于選擇滿足您需求的事務性資料庫系統的具體建議。

什麼是資料庫事務?

簡而言之,資料庫事務是由資料庫管理系統 (DBMS) 針對給定資料庫執行的工作單元,執行資料操作并更新各種存儲媒體上的底層檔案。事務資料庫将確定此類工作單元是全有或全無的,因為任何操作中的任何失敗都将導緻所有操作暫停和復原,使資料庫處于事務開始之前的狀态。

使用事務資料庫有兩個主要原因,第一個是它使工作單元在所有情況下都可靠。回顧一下我們的銀行業務示例,客戶可以放心,當他們的錢從原始賬戶中扣除時,将記入目的地賬戶。如果在此過程中出現任何問題(例如,網絡故障、伺服器故障等),客戶希望他們的帳戶保持不變,而不是簡單地因偶然事件而賠錢。

第二個原因是我們所描述的事務資料庫始終處于正确且一緻的狀态,而不管所涉及的所有技術可能發生何種故障。沒有人願意将資訊存儲在一個系統中,該系統的資料可能會因為允許無效操作而變得不連貫,或者在伺服器當機時可能會丢失資訊。當然,并非每個用例都是關鍵任務,但很多都是,在這些情況下,事務資料庫可以提供巨大的業務價值。

當然,并不是每個資料庫系統本質上都是事務性的。一些系統隻專注于記錄丢失的資訊或不需要支援事務功能的資訊。在考慮您的用例時,重要的是密切關注您需要這些功能的程度,并将您的期望與潛在資料庫系統遵守事務資料庫原則的程度相比對。

ACID 合規性的重要性

ACID 是“Atomicity、Consistency、Isolation 和 Durability”的首字母縮寫,它是一組確定資料庫事務可靠、正确處理的原則。下表解釋了這四個不同元素所涉及的内容。

元素 意義
原子性 事務中的所有資料操作以全有或全無的方式完成或復原。
一緻性 資料庫中的資訊在所有情況下都必須在語義上有意義(例如,在沒有有效父級的情況下不插入子資料,必填字段沒有空值等)
隔離 每個事務必須獨立于同時進行的任何其他事務運作;即,不能允許資訊從一項交易“洩漏”到另一項交易。
耐用性 任何成功完成的交易都會以不可磨滅的方式記錄下來,這意味着它的資料不會在軟體甚至硬體故障的情況下丢失。

讓我們考慮一個更複雜的例子來說明為什麼 ACID 保證很重要。想象另一種常見的情況,其中兩個人 A 和 B 正在為電影院的同一場演出預訂同一排的座位。A 隻預訂了一個座位,而 B 則試圖為家庭出遊預訂整排。

如果A先預訂了座位,那麼B的交易就會失敗,因為網上購物車中的一個座位已經被預訂了,不能重複預訂。這說明了原子性,因為 B 人的資料操作之一失敗了,他們都做了,以及一緻性,因為系統不會允許無意義的資料,例如兩個人保留相同的座位。

隻有當 A 的預訂成功完成并寫入資料庫時​​,B 的交易才會被取消。然而,在這種情況發生之前,隔離的特性是允許兩個人同時嘗試對同一個席位進行交易,確定雙方都将有争議的席位視為可用,直到它被實際保留。

最後,即使在 A 成功預訂座位後整個預訂系統崩潰,持久性確定在重新啟動時正确的資料仍然存在。這使得 A 可以根據需要列印票并享受演出,無論在交易正确完成後發生什麼系統故障。

分布式事務如何工作?

現代應用程式在本質上越來越分散,通常在全球範圍内可用,這使得事務資料庫的問題變得更加困難。原因是 ACID 保證對于分布式系統與在單個伺服器上運作的單個資料庫軟體一樣重要,但是涉及多個伺服器或節點會使問題顯着複雜化。

想想看。當單個資料庫軟體可以“決定”在第一個事務失敗後立即取消事務中的所有其他資料操作時,這很簡單。當資料庫軟體在分散在世界各地的數十個(甚至數百個)節點上運作時,這完全是另一回事。任何這些伺服器上任何資料操作的任何元素的任何故障都要求必須取消整個事務并在任何地方安全復原。類似地,即使事務成功,整個系統也必須確定所有操作都是正确且持久的,無論哪個或哪些伺服器執行它們。

實際上,分布式事務資料庫很難正确實作,但幸運的是一些供應商做到了。例如,由于其架構和資料存儲算法,Fauna能夠提供嚴格可序列化、外部一緻的事務。

與其他系統不同的是,Fauna 不需要所有伺服器之間嚴格的實體時鐘同步來提供一緻性,這避免了副本伺服器之間通常的距離限制,是以對于以典型的全球 Internet 延遲在世界各地進行部署是實用的。當系統時鐘或網絡流量相差幾毫秒時,确實需要同步的方法可能會導緻故障,而 Fauna 更寬松的要求則不會遇到此類問題。

這是可能的,因為 Fauna 提供了受 Calvin 啟發的事務引擎,這是一種跨分區資料庫系統實作快速分布式事務的方法。Fauna 事務引擎可以通過其分布式事務協定實作“沒有時鐘的一緻性” 。實際上,在任何資料庫寫入之前,Fauna 會預先決定事務應以何種順序執行。然後,Fauna 執行引擎以這樣一種方式處理它們,即最終結果與按照該順序一次處理一個相同。

實際上,您可以獲得在多台伺服器上并行執行的分布式事務的所有速度和功能,同時享受事務資料庫的所有資料優勢,就好像它們在單個伺服器上串行執行一樣。

呼籲采取行動

Fauna 以完全分布式的方式将非事務性資料庫的所有靈活性和性能與事務性資料庫的關系查詢和功能以及 ACID 保證相結合。事實上,由于 Fauna 處理其分布式事務的方式,使用者可以避免其他系統可能發生的那種資料異常。通過不限制鍵、文檔或分區數量的嚴格可序列化的多區域事務,可以防止不朽寫入、陳舊讀取、因果反轉和其他此類問題。

還值得注意的是,Fauna不是通常托管的“資料庫即服務”(DBaaS),甚至不是一些叢集雲産品,兩者都需要管理。相反,Fauna 是一個真正的“資料 API”,這意味着開發人員可以根據需要簡單地進行調用,而無需花時間擔心配置或擴充,具有事務資料庫和 ACID 合規性的所有好處。

因為它是一個真正的資料 API,是以 Fauna 沒有所有常見的配置和配置問題,并且可以立即作為無伺服器實用程式使用。開發人員隻需要一個帳戶即可開始使用,無需支付任何費用并提供豐厚的起步津貼。沒有常見的頭痛問題:沒有配置執行個體,沒有廣泛的配置等。

在本文中,我們檢查了事務資料庫,解釋了它們提供的 ACID 保證,說明了它們在關鍵任務用例中的價值,讨論了現代對分布式事務的需求如何使情況複雜化,并提供了一些具體的建議,以輕松獲得 ACID合規的資料優勢。

最後,Fauna 通過輕松分布式資料庫事務、自動配置和輕松擴充來提供所有價值。它可以免費注冊,易于上手,并提供清晰簡單的定價——隻需為您實際使用的内容付費。如果您認為 Fauna 可以管理您的資料需求,為什麼不立即嘗試一下呢?