我们正在迁移到一个新的数据库系统。数据库属于 ISAM 类型,API 不提供检测记录是否已被其他用户更改的方法。
因此我需要在客户端实现这个功能。我目前正在使用前后记录缓冲区计算校验和并比较结果。
我的问题是,既然有可能为两个不同的记录计算相同的校验和值,那么使用时间戳字段会更好吗?
记录更改检测通常如何处理?
谢谢你。
我们正在迁移到一个新的数据库系统。数据库属于 ISAM 类型,API 不提供检测记录是否已被其他用户更改的方法。
因此我需要在客户端实现这个功能。我目前正在使用前后记录缓冲区计算校验和并比较结果。
我的问题是,既然有可能为两个不同的记录计算相同的校验和值,那么使用时间戳字段会更好吗?
记录更改检测通常如何处理?
谢谢你。
最好不是不可靠的时间戳,而是整数字段version,您的客户端代码可以使用它来检测 DB 中的并发更改。
这称为“乐观锁定”,当您的事务不锁定任何数据库资源时,直到需要更新数据库。此时它锁定所需的数据库资源(例如,表),从数据库读取版本并检查它是否具有预期值。如果是,这意味着更新数据库以及数据库中的版本号是安全的。如果不是,这意味着有并发更新并且事务需要中止。
当然,如果您有很多中止,这意味着您将需要“悲观锁定”,您的应用程序会锁定整个事务的所有资源。如果您的数据库驱动程序不支持这一点,您将需要一些其他共享锁,例如互斥锁。在大多数情况下,这种方法会降低吞吐量,因为并发事务必须等到一个事务释放锁定的资源。