如何提高MongoDB的性能

时间:2014-01-03 05:48:29

标签: mongodb cakephp

我正在MongoDB中开发一个应用程序CakePHP。我的数据库中有 145,000 记录。当我使用以下命令查询记录时,它需要 12秒。这对我的申请非常糟糕。

$params= array('aggregate'=>array(
     array('$project'=>array('as'=>1,'pid'=>1,'st'=>1)),
     array('$unwind'=>'$as'),                   
     array('$match' => array('pd'=>array('$gt'=>$f,'$lt'=>$t),'pid'=>$project_id)),
     array('$group'=>array('_id'=>'$as')), 
     array('$sort'=>array('_id'=>1)),
     array('$limit'=>10)
     )
);
$results = $this->Detail->find('all',array('conditions'=>$params)); 

任何人都可以帮我减少查询时间。

我的上的索引为&的 PID 即可。我的系统RAM是1.5GB。

我得到了以下数据

[1] => Array
    (
        [Detail] => Array
            (
                [_id] => Array
                    (
                        [0] => "superfone" Llc,moscow,ru
                    )

            )

    )

[2] => Array
    (
        [Detail] => Array
            (
                [_id] => Array
                    (
                        [0] => "superphone" Llc,moscow,ru
                    )

            )

    )

1 个答案:

答案 0 :(得分:0)

在执行查找之前,请确保将递归级别设置为您需要的级别,然后报告您的性能。

$this->Detail->recursive = -1; // no joins
results = $this->Detail->find('all',array('conditions'=>$params)); 

$this->Detail->recursive = 0; // data + domain
results = $this->Detail->find('all',array('conditions'=>$params)); 

不确定您需要什么级别的递归,因此请给他们一个测试,但默认值为1,这可能是一项代价高昂的练习。

<强> REF http://book.cakephp.org/2.0/en/models/model-attributes.html#recursive

该引用还表示将-1设置为默认值,并根据需要提高递归级别,这可以通过将以下内容添加到AppModel来完成

public $recursive = -1;