0

我正在尝试编写一个php benchmark以比较一些 RDBMS、NewSQL 和 NoSQL。该脚本仅执行查询并测量执行时间。

对于 mysql-like,我简单地使用:

$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?游标不加载数据,我必须迭代游标才能加载数据。这就是为什么在 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 服务器而不是从计算机内存中获取的?

4

1 回答 1

0

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

是的,遍历 mongoDb 游标,数据是从 MongoDB 服务器获取的。没有像 MySQL 这样的无缓冲查询(两者都允许)。当然,MongoDB 也会将这些数据保存在内存中——尤其是如果您紧接着执行两次。

于 2012-04-23T12:16:19.540 回答