避免 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(),导入的(非表单相关的)关联数据不保存