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

Posted

技术标签:

【中文标题】数据库:是不是有供应商支持列级锁定?【英文标题】:Database: Are there any vendors support column level locking?数据库:是否有供应商支持列级锁定? 【发布时间】:2015-06-06 09:26:09 【问题描述】:

我正在研究数据库机制,发现有两种机制:table level lockingrow level locking。我没有看到column level locking,当我用谷歌搜索时,除了这个链接:database locking 之外,我没有看到任何文件说明这一点。在此链接中:

列级锁只是意味着给定行中的某些列 给定的表被锁定。这种形式的锁定不常用 因为它需要大量资源来启用和释放锁 这个级别。此外,对列级别的支持很少 锁定大多数数据库供应商。

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

谢谢:)

【问题讨论】:

【参考方案1】:

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

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

DBMS 的主要工作之一是管理并发性:尽可能地给每个用户一种幻觉,即所有数据始终属于每个用户。不同的各方正在更改数据库,DBMS 确保这些更改以事务的形式呈现给所有用户,这意味着没有人看到“部分更改”,也没有人的更改“踩到”另一个人的更改。你和我都可以改变同一件事,但不能同时改变:DBMS 确保我们中的一个人先走,然后可以显示那是谁。 DBMS 使用锁来保护正在更改的数据,或者防止它们在查看时被更改。

请注意,当我们“想要更改相同的事物”时,事物 是一行(或几行)。行代表现实世界中的事物,即我们正在计数和跟踪的事物。列是那些东西的属性。

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

有一些围绕列组织的 DBMS。这是一种设计选择;它使插入更加昂贵,因为一行出现在几个物理位置(1/列),而不是整齐地依偎在其他行之间。但权衡是单个列的汇总在 I/O 方面更便宜。在这样的系统中,可能存在“列锁”,并且没有理由认为它们会特别昂贵。但是请注意,对于插入,它们会以与表锁完全相同的方式影响并发:您不能将行插入到列被锁定的表中。 (也有办法解决这个问题。DBMS 很复杂,但有道理。)

因此,您的问题的答案是大多数 DBMS 没有“列”作为锁可以保护的内部结构。在那些这样做的人中,列锁将是一个特殊项目,它允许一定程度的列并发,但代价是基本上是一个表锁。

【讨论】:

以上是关于数据库:是不是有供应商支持列级锁定?的主要内容,如果未能解决你的问题,请参考以下文章

如何查看自己的电脑设备是否支持RDMA?

支持在 IOS 应用中将 SAML 登录会话共享给不同的供应商

安全组/防火墙规则等的云供应商中立解决方案?

NVidia 是不是支持 OpenCL SPIR?

从composer.lock(不是composer.json)重新安装供应商

十大商业智能BI供应商,你都听说过吗?