加速Propel嵌套集插入构建大树

时间:2013-11-30 05:25:12

标签: php propel

我正在使用Propel 1.6.7-dev,并在嵌套集中维护2个树(每个树都有不同的范围列)。目前,我们每套约有20K项目(总共约40,000条记录)。

我可以随意重建数据库,并定期执行(处理某些大树更改)。

现在,这需要大约50米才能完成,我想知道如何加速它(如果这个尺寸增加一倍,时间可能会变得太大,经常重建)。

现在,我是:

  • clearInstancePool();
  • 行走:: disableInstancePooling();
  • 的BeginTransaction();
  • (将所有项目重新插入2棵树的代码)
  • 提交();
  • enableInstancePooling();

我已尝试将引擎从MyISAM更改为MEMORY,构建树,然后转换回MyISAM。但是,我的内存不足了:

  

PHP致命错误:第433行的vendor / propel / runtime / lib / adapter / DBAdapter.php中允许的内存大小为134217728个字节(试图分配72个字节)

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

嵌套集算法在很大程度上依赖于“左”和“右”列上的WHERE子句,以维护树的正确结构。如果您的查询越来越慢,因为您有更多节点,解决方案可能是在这些列上添加索引。