为了账号安全,请及时绑定邮箱和手机立即绑定

MySQL vs MongoDB 1000读取

MySQL vs MongoDB 1000读取

我对MongoDb感到非常兴奋,并且最近对其进行了测试。我在MySQL中有一个名为posts的表,其中大约2000万条记录仅在名为“ id”的字段上建立索引。我想将速度与MongoDB进行比较,然后运行了一个测试,该测试将从我们的大型数据库中随机获取并打印15条记录。我为mysql和MongoDB分别运行了约1,000次查询,但我很惊讶我没有注意到速度上的很大差异。也许MongoDB快1.1倍。真令人失望。我做错什么了吗?我知道我的测试并不完美,但是在阅读繁琐的杂物方面,MySQL与MongoDb相当。注意:我有双核+(2个线程)i7 cpu和4GB ram我在MySQL上有20个分区,每个分区有1百万条记录用于测试MongoDB的示例代码<?phpfunction microtime_float(){    list($usec, $sec) = explode(" ", microtime());    return ((float)$usec + (float)$sec);}$time_taken = 0;$tries = 100;// connect$time_start = microtime_float();for($i=1;$i<=$tries;$i++){    $m = new Mongo();    $db = $m->swalif;    $cursor = $db->posts->find(array('id' => array('$in' => get_15_random_numbers())));    foreach ($cursor as $obj)    {        //echo $obj["thread_title"] . "<br><Br>";    }}$time_end = microtime_float();$time_taken = $time_taken + ($time_end - $time_start);echo $time_taken;function get_15_random_numbers(){    $numbers = array();    for($i=1;$i<=15;$i++)    {        $numbers[] = mt_rand(1, 20000000) ;    }    return $numbers;}?>测试MySQL的样例代码<?phpfunction microtime_float(){    list($usec, $sec) = explode(" ", microtime());    return ((float)$usec + (float)$sec);}$BASE_PATH = "../src/";include_once($BASE_PATH  . "classes/forumdb.php");$time_taken = 0;$tries = 100;$time_start = microtime_float();for($i=1;$i<=$tries;$i++){    $db = new AQLDatabase();    $sql = "select * from posts_really_big where id in (".implode(',',get_15_random_numbers()).")";    $result = $db->executeSQL($sql);    while ($row = mysql_fetch_array($result) )    {        //echo $row["thread_title"] . "<br><Br>";    }}$time_end = microtime_float();$time_taken = $time_taken + ($time_end - $time_start);echo $time_taken;function get_15_random_numbers(){    $numbers = array();    for($i=1;$i<=15;$i++)    {        $numbers[] = mt_rand(1, 20000000);    }    return $numbers;}?>
查看完整描述

3 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

您是否有并发性,即同时使用用户?如果仅使用一个线程直接运行1000次查询,则几乎没有区别。这些引擎太简单了:)

但我强烈建议您建立一个真正的负载测试会话,这意味着在同一时间使用具有10、20或50个用户的注入器(例如JMeter),以便您能真正看到差异(尝试将此代码嵌入JMeter网页中可以查询)。

今天,我只是在一台服务器(和一个简单的集合/表)上完成此操作,结果非常有趣且令人惊讶(与MyISAM引擎和InnoDb引擎相比,MongoDb的读写速度确实更快)。

这确实应该是测试的一部分:并发和MySQL引擎。然后,数据/架构设计和应用程序需求当然是巨大的需求,而不是响应时间。让我知道您获得结果时,我也需要有关此的输入!


查看完整回答
反对 回复 2019-12-07
  • 3 回答
  • 0 关注
  • 942 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信