此代码需要~0.1s
// find
$benchmark = Profiler::start ('Testing', 'find()');
$cursor = MongoBG::getInstance ( )->setDatabase ('test')->setCollection ('testcoll')->find();
Profiler::stop ($benchmark);
$benchmark = Profiler::start ('Testing', 'cursor walk');
while ($cursor->hasNext()) {
print_r($cursor->getNext());
}
Profiler::stop ($benchmark);
所以“find()”只用了0.000017秒 但“光标走”0.102812秒
收集大约有100行,速度保持不变,1000或只有10个项目。
一些服务器信息: FreeBSD 8.1,PHP 5.3.5(mongo / 1.1.4),MongoDB版本1.6.6-pre
答案 0 :(得分:4)
如此快速的时间,听起来find
除了准备一个对象(没有与数据库进行通信)之外什么都没做,只有在使用游标时才会执行实际查询并读取结果。光标正在做这项工作,这就是它变慢的原因。
我知道node.js的mongodb驱动程序是如何工作的。如果您这样看,光标速度对于打开连接,进行身份验证,发送查询,接收和缓冲响应,然后将其解析/加载到对象中以返回给您来说都不错。