【问题标题】:CakePHP 3 batched query to reduce memoryCakePHP 3 批量查询减少内存
【发布时间】:2017-05-17 12:20:22
【问题描述】:

Laravel Eloquent 有一个游标方法,允许您使用游标遍历数据库记录,该游标只会执行单个查询。在处理大量数据时,可以使用游标方法来大大减少你的内存使用量(见https://laravel.com/docs/5.4/eloquent#retrieving-models)。

CakePHP 3 有一个高级的 ORM,有没有类似 Laravel 中的 cursor 方法的东西?书中似乎没有提到:https://book.cakephp.org/3.0/en/orm.html

【问题讨论】:

    标签: cakephp orm cakephp-3.0 query-builder


    【解决方案1】:

    我不知道在 Laravel 中 cursor() 和非 cursor() 使用之间的确切区别是什么(除了显而易见的),但在 CakePHP 中你可能正在寻找 Query::bufferResults()Query::enableBufferedResults() (从 CakePHP 3.4 开始)。

    $query->bufferResults(false)
    
    $query->enableBufferedResults(false)
    

    禁用结果缓冲将停止在内存中缓冲结果集,对于 MySQL,它还将禁用 MYSQL_ATTR_USE_BUFFERED_QUERY

    无缓冲的结果集只能迭代一次,结果不能被缓存/序列化。此外,对于包含在单独查询中检索的关联的查询,也不能禁用缓冲(hasManybelongsToMany 始终如此)。

    另见

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-25
      • 2020-01-01
      • 2017-09-07
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 2012-01-20
      • 1970-01-01
      相关资源
      最近更新 更多