多插入的 PHP/MySQL 和 Doctrine 最佳实践

标签 php mysql doctrine-1.2

StackOverflow 之前回答了很多问题,但我正在寻找一个更具体的问题,但我找不到确切的答案。

我目前正在使用带有 Doctrine 1.2.2 的 PHP/MySQL,期待改进我的脚本。它实际上每 5 分钟向数据库中添加大约 300 个条目。其实这个脚本使用的是mysql multi-insert,不是doctrine。

我想知道什么更好、更快并且使用更少的资源。 提前致谢。

首次编辑和测试

好吧伙计们,首先是第一件事:)

我首先尝试只使用 MySQL 语句。 Fabrizio 建议使用 INSERT DELAYED,但由于我使用的是 innoDB,因此不可用。

我发现一些测试使用 MySQL 语句运行 3 次我必须运行的每个作业。对于第一份工作,我平均需要 53 秒的运行时间,使用 6.25 Mb(记住我在这里加载了 138 页)

第二份工作平均用时 3 分 30 秒,使用 4.25 Mb(记住我在这里加载了 510 页)

对于第三份工作,我平均用了 3 分 9 秒,使用了 4.75 Mb(记住我在这里加载了 410 页)

我能够转换为 Doctrine 的第一个 Job,大约同时运行(53 秒),但使用 9.75 Mb。在第二和第三份工作中我遇到了问题,因为 Doctrine 不支持 ON DUPLICATE KEY 并且使用 replace() 使我丢失了之前添加的数据,由于外键并且 replace() 实际上删除了旧值并添加了一个新值.

从这次测试来看,我还是会使用MySQL查询多插入。有什么模式想法可以测试吗?

谢谢大家:)

最佳答案

你为什么不自己检查一下?

尝试在 SQL 执行前后使用简单的 time() 比较来对这两种解决方案进行基准测试。 没有更好的方法可以知道哪个更好,这完全取决于您的查询、数据库结构和连接数(至少是这些因素,但可能不是全部)。

对于内存使用情况,您可以尝试使用memory_get_usage。

关于多插入的 PHP/MySQL 和 Doctrine 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6536901/

相关文章:

php - 将 mysql_data_seek 函数更改为 PDO

javascript - 如何从 Canvas 输入图像到MySql数据库?

java - 使用 Hibernate 的问题 - 未找到 JDBC 驱动程序类 : com. mysql.jdbc.Driver

java - hibernate 以持久保存日期

transactions - Doctrine 1.2 : Using postDelete to delete related files on filesystem -- with transaction support

php - 从 Mailgun 表单 Post PHP 中检索附件

php - 为什么这个 PDO 语句会默默地失败?

java - 使用 JDBC 读取和更新每一行

mysql - 返回关系的整个列表匹配的所有行(而不是任意组合)

symfony1 - Doctrine 记录监听器从未被解雇