我正在尝试编写php benchmark
来比较一些RDBMS,NewSQL和NoSQL。
该脚本只执行查询并测量执行时间。
对于类似mysql的,我只使用:
$start = microtime(true);
$result = mysql_query($SQL);
$end = microtime(true);
我没有为我的基准测试获取数据。
但是使用mongodb-php,函数find()
会返回cursor
$start = microtime(true);
$collection = $this->_db->selectCollection($collection);
$cursor = $collection->find($query);
$end = microtime(true);
$cursor
和$result
等效(时间/数据成本)? Cursor不加载数据,我必须迭代游标才能加载数据..那为什么在MySQL和mongoDB之间执行查询的时间是如此不同,或者只是mongoDB摇滚......
我想知道将代码更改为:
是否更公平$start = microtime(true);
$result = mysql_query($SQL);
while ($row = mysql_fetch_row($result)) {}
$end = microtime(true);
和
$start = microtime(true);
$cursor = $collection->find($query);
foreach ($cursor as $doc) {}
$end = microtime(true);
最后,是否可以说每次迭代mongodb游标数据都是直接从mongodb服务器获取而不是从计算机内存中获取?
答案 0 :(得分:0)
运行 - > find()确实只返回光标。直到您获取第一个结果,查询才会执行。此时,驱动程序将发出查询。这允许您使用 - > limit()和 - > skip()等内容修改光标。所以,是的,迭代结果集也更公平。
是的,迭代mongoDb游标,从MongoDB服务器获取数据。没有无缓冲的查询,例如MySQL(允许两者)。当然,MongoDB也会将这些数据存储在内存中 - 尤其是如果你这样做两次之后。