2015-04-01 136 views
3

我在研究數據庫機制,看到有兩種機制:table level lockingrow level locking。我沒有看到column level locking,當我谷歌,我看到沒有文件告訴除這個鏈接:database locking。在此鏈接中:數據庫:有沒有供應商支持列級鎖定?

列級別鎖定意味着某個給定表中某個給定行中給定行中的某些列被鎖定。這種形式的鎖定不常用於 ,因爲它需要大量資源才能在此級別啓用和釋放鎖定 。另外,在大多數數據庫供應商中鎖定列級別 的支持很少。

那麼,哪些供應商支持列級鎖定?你能告訴我更多細節嗎,爲什麼column level locking需要比row level locking更多的資源。

謝謝:)

回答

1

鎖本身不需要任何東西。它是一個抽象動詞,作用於抽象名詞。爲什麼鎖定一列的成本比鎖定一個字節,一個文件或一扇門還要貴?所以我不會在你的鏈接中投入很多股票。

問題的答案在於爲什麼鎖存在 - 他們保護什麼 - 以及如何設計DBMS。

DBMS的主要工作之一是管理併發性:儘可能地爲每個用戶提供所有數據始終屬於每個數據的錯覺。不同的團體正在改變數據庫,而DBMS確保這些改變對所有用戶來說都是交易,這意味着沒有人看到「部分改變」,並且沒有人的改變「踩下」他人。你和我都可以改變同一件事,但不能同時改變:數據庫管理系統確保我們中的一個先行,然後可以顯示那是誰。數據庫管理系統使用鎖來保護正在更改的數據,或防止數據在查看時被更改。

請注意,當我們「想改變同樣的事情」時,的東西是一行(或多行)。行代表現實世界中的事物,我們正在計算和跟蹤的事物。列是這些東西的屬性。

大多數DBMS在內部圍繞數據行進行組織。數據逐行存儲在內存頁面和磁盤塊中。這些系統中的鎖可保護存儲器中面向行的數據結構。鎖定單個行很昂貴;有很多行。作爲一種權宜之計,許多系統鎖定行(頁)或整個表的集合。 Fancier的人已經制定了「鎖定升級」來控制鎖定人口。

有一些圍繞列組織的DBMS。這是一個設計選擇;它使得插入更加昂貴,因爲一行出現在幾個物理位置(1 /列)中,而不是整齊地排列在其他行之間。但是權衡是單個列的彙總在I/O方面更便宜。在這樣的系統中,可能會有「列鎖」,並且沒有理由認爲它們會特別昂貴。但是,請注意,用於插入它們會以與表鎖完全相同的方式影響併發性:不能將行插入其列鎖定的表中。 (也有辦法解決這個問題,數據庫管理系統很複雜,有理由。)

所以你的問題的答案是大多數DBMS沒有「列」作爲鎖可以保護的內部結構。在那些做的事情中,列鎖將是一個專業項目,允許一定程度的列方式併發性,否則基本上是一個表鎖。