我正在尝试编写一个php benchmark,以比较一些关系数据库管理系统、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是否等价于(时间/数据成本)?游标不加载数据,我必须迭代游标才能加载数据。这就是为什么在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服务器而不是从计算机内存获取?
发布于 2012-04-23 12:16:19
运行->find()确实只返回游标。在获取第一个结果之前,查询不会执行。此时,驱动程序将发出查询。这允许您使用->limit()和->skip()之类的内容修改游标。因此,对结果集进行迭代也会更公平。
是的,在mongoDb游标上迭代,数据将从MongoDB服务器获取。没有没有缓冲的查询,比如使用MySQL (这两者都允许)。当然,MongoDB也会将这些数据存储在内存中--特别是如果您只在彼此之间做了两次的话。
https://stackoverflow.com/questions/10279749
复制相似问题