2010-01-29 18 views

回答

2

就我個人而言,我不覺得它在RDBMS中是明智的 - 但是我可以看到它減少了非常高負載數據庫的設計複雜性。

例如在電子商務案例中,您可能會對其進行分區,以便產品庫存位於一個數據庫中,而訂單位於另一個數據庫中。在這種情況下,在處理訂單時,您不會減少庫存數量並增加一個錯誤計數 - 在這種情況下,全局交易將有意義。

但99%有一個更好的選擇,可以在設計中解決。

- 編輯:全局事務的陷阱 -

這2點是爲什麼我不使用全局事務

1點建議:

全球交易涉及多個數據庫服務器(或至少他們應該) - 全球交易需要一個DTC(分佈式交易協調員) - 採用這樣一個代理將通過ORDERS的因素降低查詢的速度,因爲事情並沒有在一個範圍內完成單機,但涉及多這意味着網絡。

點2:

如果查詢不適合設計(大多數人不明白的細微之處),你可能最終對個人數據庫鎖定表的大部分,有時人甚至最終鎖定整個帶有單個查詢的表格。如果事情沒有正確地設計用於分佈式查詢,你的應用程序將停滯不前,並且有人會被解僱:D。您需要確保您的查詢僅鎖定他們必須的鎖定,並且您必須嘗試確保這些鎖定的數據部分僅由一個查詢同時使用。

爲什麼在分佈式查詢中鎖定表更糟?因爲第1點。你現在鎖定最後的訂單,因爲訂單的因素更長。

- 編輯:潛在的區域,您可能需要調查 -

羣集技術和HPC經常使用的Distributed Lock Managers。通過研究這些技術的數據管理變體,您將學到很多東西,因爲它們會告訴你這些實現認爲是否有必要獲得全局鎖定(這是全局事務的作用)。

3

如果你的意思是多個數據庫都被一個事務中更新,那麼你會爲原子性做到這一點 - http://en.wikipedia.org/wiki/Atomicity_(database_systems)

打趣考慮銀行轉賬,具有不同的數據庫中的每個賬戶提供商 - 錢必須離開一個帳戶並更新到另一個。如果它部分失敗 - 例如第二次數據庫更新失敗,那麼錢已經離開了一個賬戶,但沒有到達另一個賬戶,這是不可接受的。

事務意味着更新失敗意味着它們全部被取消(回滾),使數據保持在事務開始之前的狀態。

-1

當您想要影響多個數據庫的事務操作時。