我对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引擎。然后,数据/架构设计和应用程序需求当然是巨大的需求,而不是响应时间。让我知道您获得结果时,我也需要有关此的输入!
添加回答
举报
0/150
提交
取消