我正在开发一个网站,在进行数据库设计时,我对并发问题有些担心,我正在考虑使用时间戳来避免这种情况。
我对时间戳的理解是它以这种方式工作:
readdatemodified =从交易中选择DateModified,其中ID =?
datemodified =从交易中选择DateModified,其中ID =?
如果datemodified == readdatemodified 更新事务ID =? 其他 消息“有人更新了记录。请再试一次。”
IF:成功更新记录
ELSE:此处将通过访问数据库再次检索记录,以确保记录是更新的记录。
我在这里解决了并发问题但我最关心的是如何访问数据库。 每次更新我都会多次访问数据库吗?
有没有办法可以使用时间戳来最小化数据库访问?
答案 0 :(得分:0)
您是否考虑过不使用时间戳,而是使用事务和锁定读取:
http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html
这可能是解决您问题的更好方法。 MySQL 'select for update' behaviour显示了问题中的一些行为示例。
锁定提供的功能取决于您使用的基础数据库引擎:
可在MySQL网站上找到有关功能和优势的详细说明:http://dev.mysql.com/doc/refman/5.0/en/internal-locking.html
答案 1 :(得分:0)
如果你想要应用程序逻辑中的并发/检查,那么尝试使用CAS(检查和设置)算法,如果你想要不发生并发更改,请使用事务(如非循环Tau所述)