我试图编写一个php benchmark
来比较一些RDBMS,NewSQL和NoSQL。 该脚本只执行查询并测量执行时间。相当于mongoDB的mysql_query
对于类似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的服务器上获取,而不是从计算机内存?
好的,谢谢你是对的。但你认为我的做法很好吗?或者还有另一个我没有想到的解决方案?例如:使用MongoDB :: execute? – Kakawait 2012-04-23 12:20:14
执行并不意味着运行查询,只是为了运行一些任意的javascript。到目前为止,我从来没有必要使用它。基准测试最好的方法是获得真正的应用程序,或者进行插入测试。 – Derick 2012-04-23 12:33:44
是的,对于我的示例,我选择了select查询..但是,我的基准测试将在伪真实应用程序上执行许多不同类型的查询(选择,插入,更新等)。但我的问题是关于选择,因为mongodb使用光标。 – Kakawait 2012-04-23 12:55:30