数据库:是否有供应商支持列级锁定?
Database: Are there any vendors support column level locking?
我在研究数据库机制,看到有两种机制:table level locking
和row 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 locking
比 row 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 锁。
我在研究数据库机制,看到有两种机制:table level locking
和row 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 locking
比 row 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 锁。