0

我目前正在开发一个网站,在进行数据库设计时,我对并发问题有些担心,我正在考虑使用时间戳来避免这种情况。

我对时间戳的理解是它是这样工作的:

  1. 有一个字段让我们说“DateModified”,其中每次更新该特定行的更新。
  2. 然后,只要有 1 个或多个用户访问该行,例如首先阅读,然后最终更新它。
  3. 在我对时间戳的理解中,我需要一个条件来首先读取我的代码中的“DateModified”。

readdatemodified = 从 ID = 的事务中选择 DateModified

datemodified = 从 ID = 的事务中选择 DateModified

IF datemodified == readdatemodified UPDATE Transaction where ID = ? ELSE 消息“有人更新了记录,请重试”。

IF:成功更新记录

ELSE:这里将通过访问数据库再次检索记录,以确保记录是更新的记录。

我在这里解决了并发问题,但我的新问题是我如何访问数据库。每次更新我都会多次访问数据库?

有没有办法可以使用时间戳最小化数据库访问?

4

2 回答 2

0

您是否考虑过不使用时间戳,而是使用事务和锁定读取:

http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html

这可能是解决您问题的更好方法。MySQL 'select for update' 行为显示了问题中的一些行为示例。

锁定提供的功能取决于您使用的底层数据库引擎:

  • MyISAM - 表级锁定
  • InnoDB - 行级锁定

可以在此处的 MySQL 站点上找到对功能和优势的全面描述:http: //dev.mysql.com/doc/refman/5.0/en/internal-locking.html

于 2013-10-25T13:43:45.587 回答
0

如果您希望应用程序逻辑中的并发/检查,请尝试 CAS(检查和设置)算法,如果您希望不发生并发更改,请使用事务(如 Acyclic Tau 所述)

于 2013-10-25T13:49:08.240 回答