数据库:是否有供应商支持列级锁定?

Database: Are there any vendors support column level locking?

我在研究数据库机制,看到有两种机制:table level lockingrow level locking。我没有看到 column level locking,而当我 google 时,除了 link:database locking,我没有看到任何文件说明这一点。在这个 link:

A column level lock just means that some columns within a given row in a given table are locked. This form of locking is not commonly used because it requires a lot of resources to enable and release locks at this level. Also, there is very little support for column level locking in most database vendors.

那么,哪些供应商支持列级锁定?你能告诉我更多细节吗,为什么 column level lockingrow level locking 需要更多的资源。

谢谢:)

锁本身不需要任何东西。它是作用于抽象名词的抽象动词。为什么锁定一个列比锁定一个字节、一个文件或一扇门的成本更高?所以我不会在你的 link 中放很多股票。

您的问题的答案在于锁为何存在——它们保护什么——以及 DBMS 是如何设计的。

DBMS 的主要工作之一是管理并发性:尽可能为每个用户提供所有数据始终属于每个用户的错觉。不同的各方正在更改数据库,DBMS 确保这些更改以 事务 的形式出现在所有用户面前,这意味着没有人会看到 "partial changes",并且永远不会有任何人的更改 [=31] =] 另一个人的。你和我都可以改变同一件事,但不能同时改变:DBMS 确保我们中的一个先行,然后可以显示那是谁。 DBMS 使用锁来保护正在更改的数据,或者防止在查看数据时更改它们。

请注意,当我们"want to change the same thing"时,事物是一行(或多行)。行代表现实世界中的事物,我们正在计数和跟踪的事物。列是那些东西的属性。

大多数 DBMS 在内部围绕数据行进行组织。数据在内存页和磁盘块中,逐行。这些系统中的锁保护内存中面向行的数据结构。锁定单个行是昂贵的;有很多行。作为权宜之计,许多系统锁定行(页)集或整个 tables。更高级的人精心设计 "lock escalation" 来控制锁的数量。

有些 DBMS 是围绕列组织的。那是一个设计选择;它使插入更加昂贵,因为一行出现在多个物理位置(1/列),而不是整齐地坐落在其他行之间。但权衡是,就 I/O 而言,单个列的汇总成本更低。在这样的系统中,可能有 "column locks",而且没有理由认为它们会特别昂贵。但是请注意, 对于插入 它们会以与 table 锁完全相同的方式影响并发性:您不能将行插入 table其列被锁定。 (也有办法解决这个问题。DBMS 很复杂,这是有原因的。)

所以您的问题的答案是大多数 DBMS 没有 "columns" 作为锁可以保护的内部结构。在那些这样做的人中,列锁将是一个特殊项目,允许一定程度的列并发,否则基本上是 table 锁。