我很擅长在数据库中使用多个线程(我职业生涯的大部分时间都花在了前端)。

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

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

使用JMeter进行测试

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

CSV文件:

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

我是否认为交易数据的完整性是完整的?

如何测试并发性?

有帮助吗?

解决方案

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

另外,你还在保护什么?考虑两个用户(比尔和史蒂夫):

  1. Bill加载记录1234
  2. 史蒂夫加载记录1234
  3. 史蒂夫改变记录1234并提交
  4. 比尔等了一下,然后更新陈旧记录1234并提交。这些变化破坏了比尔的。
  5. 表锁定不提供比本机MyISAM表锁定更高的数据完整性。当需要停止数据损坏时,MyISAM将本机锁定表文件。

    事实上,在MyISAM上使用InnoDB的原因是它将执行行锁定而不是表锁定。它还支持交易。对不同记录的多次更新不会相互阻塞,并且在事务完成之前将阻止对多个记录的复杂更新。

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

    修改

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top