【问题标题】:Testing concurrent mysql insert operations in php在php中测试并发mysql插入操作
【发布时间】:2015-12-09 00:27:18
【问题描述】:

我想同时多次运行这个 php 脚本。

$db =  new mysqli('localhost', 'me', 'pw', 'test');   
$time = time();
$sql = "  INSERT INTO test  (  `test_created`  ) VALUES( ". $time  .") ";
$result = $db->query($sql);

我这样做是因为我想复制一个场景,其中许多用户在完全相同的时间(最多纳秒)提交数据库条目,这就是我所说的“并发”插入。

我尝试通过指定执行的小时和分钟来使用我的共享主机提供商的虚拟 cron 调度程序。然后我制作了五个相同的文件,包含上述代码。

但是,当我查看表条目时,插入的时间戳并不相同。这是因为mysql无法处理并发插入操作吗?如果 mysql 可以处理“并发插入”,这是测试并发插入操作的正确方法吗?如果没有,我应该如何在有或没有cron的php环境中进行测试?

【问题讨论】:

  • 我相信 MYSQL 通过排队处理并发写访问,因此序列化要在单个资源上完成的所有更新。根据您使用的数据库引擎,资源可以是整个表或表的页面(子部分)

标签: php mysql concurrency cron


【解决方案1】:
  1. 试图模拟在同一 纳秒 内发生的动作通常是困难且不切实际的,我只想做一个笼统的声明,即在 PHP 或 mySQL 中根本不可能 单独,更不用说串联了。

  2. 您不能同时将两行插入到表中。永远不会。您可以在 RDBMS 中有两个线程以如此快速和无缝的方式插入行,以至于对于所有意图和目的,您都可以声称它同时发生,但是要使 RDBMS 保持一致性,必须在单个、连续的没有分支的操作​​顺序。

  3. 甚至不必担心您试图模拟的情况。我必须进行认真的研究才能找到一个无法优雅地处理这种情况的 RDBMS。

【讨论】:

  • 是的,他说的是,因为他花时间说的比我好得多
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-10
  • 2016-08-12
  • 1970-01-01
  • 1970-01-01
  • 2013-09-03
  • 2020-10-10
  • 2011-12-02
相关资源
最近更新 更多