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'的访问被拒绝[重复]

“mysql_query() 或 die()” 是不是保持打开的 mysql 连接?

捕获 mysql_query 错误

回显mysql_query的所有结果[重复]

为啥mysql_query需要一个变量来执行?