【问题标题】:Commits in the absence of locks in CockroachDB在 CockroachDB 中没有锁的情况下提交
【发布时间】:2018-03-23 14:35:27
【问题描述】:

我试图从应用程序员的角度了解 CockroachDB 中的 ACID 如何在没有锁的情况下工作。希望将其用于会计/ERP 应用程序。

当两个用户同时更新同一个数据库字段(例如总帐科目总计字段)时,CockroachDB 会做什么?假设每个都作为各自事务的一部分同时更新许多其他非重叠字段。

在提交时是否会立即通知中止的应用程序的提交过程?

当我们在应用程序中编写数据库访问代码时,我们是否需要考虑其他可能性,例如,在 ACID/锁定 PostgreSQL 中?

或者正在为所有实际目的编写访问 CockroachDB 的代码,就提交和一般而言,访问标准 RDBMS 的目的相同。

当然,忽略性能问题/连接等。

【问题讨论】:

    标签: cockroachdb


    【解决方案1】:

    我试图从应用程序程序员的角度了解 CockroachDB 中的 ACID 如何在没有锁的情况下工作。希望将其用于会计/ERP 应用程序。

    CockroachDB 确实有锁,但使用不同的术语。目前正在更新一些讨论乐观并发控制的现有文档。

    当两个用户同时更新同一个数据库字段(例如总帐科目总计字段)时,CockroachDB 会做什么?假设每个都作为各自事务的一部分同时更新许多其他非重叠字段。

    其中一个事务将阻塞等待另一个事务提交。如果检测到事务之间存在死锁,则涉及死锁的两个事务之一将被中止。

    在提交时是否会立即通知中止的应用程序的提交过程?

    是的。

    当我们在应用程序中编写数据库访问代码时,我们是否需要考虑其他可能性,例如,在 ACID/锁定 PostgreSQL 中?

    或者正在编写用于访问 CockroachDB 的所有实际目的的代码,与访问标准 RDBMS 的提交和一般性目的相同。

    在高层次上,您无需做任何额外的事情。 CockroachDB 默认使用可序列化的隔离,这可能会导致更多的事务重新启动,而不是较弱的隔离级别,但它的优点是应用程序程序员不必担心异常。

    【讨论】:

      猜你喜欢
      • 2011-12-04
      • 2013-02-19
      • 2015-10-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-28
      • 1970-01-01
      • 2021-12-20
      • 2017-07-13
      相关资源
      最近更新 更多