避免 CakePHP 的 saveAll 并使用手动查询

Posted

技术标签:

【中文标题】避免 CakePHP 的 saveAll 并使用手动查询【英文标题】:Avoiding CakePHP's saveAll and using manual query's 【发布时间】:2015-06-06 22:26:57 【问题描述】:

我需要每小时更新和/或插入 600K 条记录,而使用 Cakephp (2.6) saveAll 会产生相当大的问题(缓慢)。使用原始查询可以大大加快速度,但我不确定在 Cake 中执行此操作的最佳方法是什么。

我需要:

    UPDATE table1 SET price=100,timestamp=$timestamp WHERE product_id=X AND country_id=Y 检查 UPDATE 是否返回任何受影响的行 如果是,OK,继续下一条记录 如果否,则 INSERT into table1 (price,product_id,country_id,timestamp) VALUES (100,X,Y,$timestamp)

我知道我可以使用 $db->rawQuery() 但在使用 UPDATE 等时不会给出任何受影响的行。有什么想法吗?

【问题讨论】:

我可以建议使用可以完成所有这些工作的存储过程吗?它将显着减少调用(在过程中创建此逻辑)并且它应该工作得更快。 我对存储过程不太熟悉,但感谢您的建议,我会检查一下! 【参考方案1】:

你可以用纯php来做一个cron,这些脚本运行得更快,你可以做任何你想做的事情。

【讨论】:

以上是关于避免 CakePHP 的 saveAll 并使用手动查询的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP:用户数据 saveAll 静默失败?

cakephp:使用 saveAll(),导入的(非表单相关的)关联数据不保存

CakePHP如何在一个saveAll中不知道外键的情况下创建hasMany数据?

CakePHP 使用 3 个带有 saveAll 的模型

CakePHP saveAll 方法

Cakephp - saveAll 和 beforeSave