1

我对在数据库中使用多个线程相当陌生(我的大部分职业生涯都花在了前端)。

今天我尝试测试我编写的一个简单的 php 应用程序,该应用程序使用 ISAM 表模拟使用表锁定的事务将值存储在 mysql 数据库中。

我刚刚写了一篇关于这里的程序的博客文章:

使用 JMeter 进行测试

从我的结果来看,我的简单 php 应用程序似乎保持了事务完整性(从我的 csv 文件中的数据与我从数据库中重新提取的数据相同):

CSV 文件:

al 的 alt csv 用于 bl 的 alt csv

JMeter测试运行后查询两个用户的数据:

alt alt

我是否正确地假设事务数据完整性是完整的?

你如何测试并发性?

4

1 回答 1

2

为什么不使用 InnoDB 并在没有手动表锁的情况下获得相同的效果?

另外,你在保护什么?考虑两个用户(Bill 和 Steve):

  1. 比尔加载记录 1234
  2. 史蒂夫加载记录 1234
  3. Steve 更改记录 1234 并提交
  4. Bill 稍等片刻,然后更新陈旧记录 1234 并提交。这些变化重创了比尔。

表锁定不提供比本地 MyISAM 表锁定更高的数据完整性。当需要停止数据损坏时,MyISAM 将本机锁定表文件。

事实上,使用 InnoDB 而不是 MyISAM 的原因是它会做行锁定而不是表锁定。它还支持事务。对不同记录的多次更新不会相互阻塞,对多条记录的复杂更新将被阻塞,直到事务完成。

您需要考虑在您的应用程序中同时发生对同一记录的两次更新的可能性。如果有可能,表/行锁定不会阻止第二次更新,它只会推迟它直到第一次更新完成。

编辑

据我记得,MyISAM 对插入有一种特殊的行为。它根本不需要为插入锁定表,因为它只是附加到表的末尾。对于具有唯一索引或非自动增量主键的表,这可能不是真的。

于 2009-04-30T02:51:54.170 回答