【问题标题】:cursor performace with mongodb php drivermongodb php驱动程序的游标性能
【发布时间】:2014-01-03 17:28:25
【问题描述】:

php mongo 查询游标处理是否存在性能问题?

我的代码:

 $cursor = $collection->find($searchCriteria)->limit($limit_rows);
// Sort ascending based on S_DTTM
$cursor->sort(array('S_DTTM' => 1 , 'SYMBOL' => 1 ));

// How many results found?
$num_docs = $cursor->count(); 

if( $num_docs > 0 )
{
    // loop over the results
    foreach ($cursor as $ticks)
    {

查看类似代码

// request data 
$result = $cursor->getNext();

我的问题是在第一个查询返回(满,限制为 100 行)之后,下一个查询继续循环。有数百万行返回,所以我想用“限制”来限制。

我确实做了重新索引以防万一,仍然没有区别。

我做错了什么? getNext 效果更好吗?

使用 mongod ver 2.5.4 和一周前下载的最新 php mongo 驱动程序。
集合大小为 100Gb,包括 2 个附加索引。

mongo 日志显示在不到 200 毫秒内执行的所有查询。

  • 原来是查询问题而不是php mongo驱动问题..

【问题讨论】:

  • 您确定限制应用正确吗?你有没有 var_dumped $limit_rows var 以确保它实际上是有限的?
  • 还有“下一个查询”的条件是什么?
  • 您的限制有多大?您在查询和/或排序依据的字段的集合上是否有索引?
  • 我的限制是 100 默认值,我没有使用 getNext() 只是想确认它是我应该使用的..我确实在查找查询上有索引...没有确定排序是如何工作的.. .. 我正在测试搜索条件的数据负载是否为排序提取了大量数据,然后限制工作..
  • 如果您运行此查询并使用 .explain(),输出是什么

标签: php mongodb cursor driver


【解决方案1】:

使用count()sort() 可能会降低性能。

【讨论】:

  • 为什么排序会降低性能?你也没有解释为什么 count 可以
  • 测试是否是这个原因..记住我的查询也会返回很多行..这就是限制
  • ** 看起来排序确实是罪魁祸首。 ** [文档]:docs.mongodb.org/manual/reference/method/cursor.sort 声明使用限制来避免内存排序.. 但在我的情况下,它会根据 col1 拉取整个记录集以进行查找并在内存中对其进行排序,然后应用限制 ** 任何避免内存排序的建议表示赞赏**
  • @mpaul 你试过“复合索引”吗?
  • 所以我有一个包含符号和日期时间字段的刻度集合,现在查询 [ find( {SYMBOL : "E:MSFT"}).sort({DATETIME:1}) ] 使用“符号" 索引而不是复合索引(日期时间、符号)以及样本在内存中的排序表示 20Gb 数据。导致问题。
猜你喜欢
  • 2013-08-16
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-14
  • 2016-03-13
相关资源
最近更新 更多