1

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

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

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

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

或者正在为所有实际目的编写代码来访问CockroachDB ,就像在提交和一般情况 下访问标准RDBMS一样。

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

4

1 回答 1

3

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

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

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

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

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

是的。

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

或者正在为所有实际目的编写代码来访问 CockroachDB,就像在提交和一般情况下访问标准 RDBMS 一样。

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

于 2017-10-11T20:42:47.530 回答