【问题标题】:Joomla getItems running out of memory with big results setJoomla getItems 内存不足,结果集很大
【发布时间】:2013-07-02 19:45:39
【问题描述】:

我的组件的数据库中有超过 10,000,000 条记录,我认为 getItems/getListQuery 正在尝试将它们中的每一条加载到内存中。网站上的搜索表单非常缓慢或返回说 php 内存不足。

phpMyAdmin 似乎能够处理显示这些数据 - 为什么不是 Joomla?

奇怪的是,然后使用全局设置的列表限制 5 到一页正确显示项目。

我刚刚看了看,Joomla 的缓存被禁用了——这是把我搞砸了吗?

非常感谢!

【问题讨论】:

  • 您的查询是否设置了限制?
  • 我认为限制是由全局配置设置的,它似乎可以工作 - 事情是分页的。
  • 实际上,我一直在查看/libraries/legacy/model/list.phpgetItems 似乎使用getListItems 并将结果保存在$this->cache[$store] 中。这是否意味着 joomla 会尝试将搜索结果中的所有项目保存在缓存中?
  • 我尝试放弃除了 100 万条记录之外的所有记录,但它仍然在苦苦挣扎。这是在本地开发机器上运行的,所以它不是服务器的问题。该数据库每行只有 7 个字段,带有一个主键 (id)。我刚刚决定 Joomla 对于记录超过 500k 的网络应用程序不太有用。我什至尝试将 php 中的内存限制提高到荒谬的程度,但它仍然非常缓慢或超时。我正在努力将这个应用程序与 Joomla 集成,但我现在认为这不值得......
  • 您使用的是什么版本的 Joomla? (我们部署了 Joomla 扩展,可以从数千个表单提交中生成动态报告,这些表单提交会导致数十万条记录,并且没有发现这个问题)。

标签: caching joomla custom-component records large-data


【解决方案1】:

我最终通过将 getPagination、getTotal、getItems 等从库的 (list.php) 复制到我的模型中(以覆盖它们)来修复它。然后在每个方法中,我确保返回的结果而不是将它们发送到缓存。

getTotal 函数似乎计算行数,而不是单独计算 (*)。几千条记录没关系,但超过 1/2 百万条记录在自找麻烦!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-15
    • 2013-09-13
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 2014-08-02
    相关资源
    最近更新 更多