mysql_query 相当于 mongoDB
Posted
技术标签:
【中文标题】mysql_query 相当于 mongoDB【英文标题】:mysql_query equivalent to mongoDB 【发布时间】:2012-05-04 00:25:28 【问题描述】:我正在尝试编写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 服务器而不是从计算机内存中获取?
【问题讨论】:
【参考方案1】:Running ->find() 确实只是返回光标。在您获取第一个结果之前,查询不会执行。届时,驱动程序将发出查询。这允许您使用 ->limit() 和 ->skip() 之类的内容来修改光标。所以是的,对结果集进行迭代会更公平。
是的,遍历 mongoDb 游标,数据是从 MongoDB 服务器获取的。没有像 MySQL 这样的无缓冲查询(两者都允许)。当然,MongoDB 也会将这些数据保存在内存中——尤其是如果您紧接着执行两次。
【讨论】:
好的,谢谢你是对的。但是你觉得我的做法好吗?还是我没有想到的另一种解决方案?例如:使用 MongoDB::execute ? Execute 不是为了运行查询,只是为了运行一些任意的 javascript。到目前为止,我从来没有使用过它。最好的基准测试是拥有一个真正的应用程序,或者进行插入测试。 是的,在我的示例中,我选择了选择查询。但我的基准测试将在伪真实应用程序上执行许多不同类型的查询(选择、插入、更新等)。但我的问题只是关于选择,因为 mongodb 使用游标。以上是关于mysql_query 相当于 mongoDB的主要内容,如果未能解决你的问题,请参考以下文章
警告:mysql_query() 期望参数 2 是资源 [重复]
mysql_query():用户''@'localhost'的访问被拒绝[重复]