我试图从应用程序员的角度理解 CockroachDB 中的ACID如何在没有锁的情况下工作。想将它用于会计/ ERP应用程序。
当两个用户同时更新同一个数据库字段(例如总帐帐户总计字段)时, CockroachDB 会做什么?假设每个都在作为相应交易的一部分同时更新许多其他非重叠字段。
在提交时,是否会立即通知已中止的应用程序的提交过程?
当我们在应用程序中编写数据库访问代码时,是否需要处理其他可能性,例如ACID / locking PostgreSQL ?
或者编写用于访问 CockroachDB 的代码用于所有实际目的,与访问提交和一般的标准 RDBMS 相同。
当然,忽略性能问题/联接等等。
答案 0 :(得分:3)
我试图从应用程序员的角度理解CockroachDB中的ACID如何在没有锁的情况下工作。想将它用于会计/ ERP应用程序。
CockroachDB确实有锁,但使用不同的术语。目前正在更新一些关于乐观并发控制的现有文档。
当两个用户同时更新相同的数据库字段(例如总帐帐户总计字段)时,CockroachDB会做什么?假设每个都在作为相应交易的一部分同时更新许多其他非重叠字段。
其中一个事务将阻止等待另一个事务提交。如果检测到事务之间的死锁,则将中止死锁中涉及的两个事务之一。
在提交时,是否会立即通知已中止的应用程序的提交过程?
是
当我们在应用程序中编写数据库访问代码时,是否需要处理其他可能性,例如ACID /锁定PostgreSQL?
或者编写用于访问CockroachDB的代码用于所有实际目的,与访问提交和一般的标准RDBMS相同。
在高层,没有什么可以做的。 CockroachDB默认为可序列化隔离,这可能导致更多的事务重启,隔离级别较弱,但具有应用程序员不必担心异常的优势。