mysql_query等同于mongoDB

时间:2012-04-23 11:36:05

标签: php mysql mongodb benchmarking nosql

我正在尝试编写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服务器获取而不是从计算机内存中获取?

1 个答案:

答案 0 :(得分:0)

运行 - > find()确实只返回光标。直到您获取第一个结果,查询才会执行。此时,驱动程序将发出查询。这允许您使用 - > limit()和 - > skip()等内容修改光标。所以,是的,迭代结果集也更公平。

是的,迭代mongoDb游标,从MongoDB服务器获取数据。没有无缓冲的查询,例如MySQL(允许两者)。当然,MongoDB也会将这些数据存储在内存中 - 尤其是如果你这样做两次之后。