2015-04-01 129 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没有“列”作为锁可以保护的内部结构。在那些做的事情中,列锁将是一个专业项目,允许一定程度的列方式并发性,否则基本上是一个表锁。