我有两个运行 Ruby on Rails 的应用程序服务器共享同一个 MySQL 数据库服务器,使用 InnoDB 引擎。
有时在重负载下,我发现记录中的 ID 在表用户、X 和 Y 中被跳过并且不是连续的。
这是伪代码:
user = Create user x in table Users
user_x = Find user x
Insert a tuple into an auxiliary table X
Insert a tuple into an auxiliary table Y
Update the tuple that was inserted in table X
Insert a tuple into an auxiliary table Z
表 X、Y、Z 都以某种方式相关,我不会删除任何记录。
但是,我发现有时记录 ID 在重载期间会跳过一两个。
交易对这种情况有帮助吗?
Start transaction
user = Create user x
user_x = Find user x
Insert a tuple into an auxiliary table X
Insert a tuple into an auxiliary table Y
Update the tuple that was inserted in table X
Insert a tuple into an auxiliary table Z
Commit
Noobie 问题,此代码在没有负载时工作正常,但如果有负载则一次。即多个用户在完全相同的时间点击相同的资源,然后发生上述情况。交易会有帮助吗?
将所有内容包装在事务块中会有什么缺点?