呼啦一陣風(fēng)
2019-12-07 14:00:54
我對(duì)MongoDb感到非常興奮,并且最近對(duì)其進(jìn)行了測(cè)試。我在MySQL中有一個(gè)名為posts的表,其中大約2000萬(wàn)條記錄僅在名為“ id”的字段上建立索引。我想將速度與MongoDB進(jìn)行比較,然后運(yùn)行了一個(gè)測(cè)試,該測(cè)試將從我們的大型數(shù)據(jù)庫(kù)中隨機(jī)獲取并打印15條記錄。我為mysql和MongoDB分別運(yùn)行了約1,000次查詢,但我很驚訝我沒(méi)有注意到速度上的很大差異。也許MongoDB快1.1倍。真令人失望。我做錯(cuò)什么了嗎?我知道我的測(cè)試并不完美,但是在閱讀繁瑣的雜物方面,MySQL與MongoDb相當(dāng)。注意:我有雙核+(2個(gè)線程)i7 cpu和4GB ram我在MySQL上有20個(gè)分區(qū),每個(gè)分區(qū)有1百萬(wàn)條記錄用于測(cè)試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;}?>測(cè)試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貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊
您是否有并發(fā)性,即同時(shí)使用用戶?如果僅使用一個(gè)線程直接運(yùn)行1000次查詢,則幾乎沒(méi)有區(qū)別。這些引擎太簡(jiǎn)單了:)
但我強(qiáng)烈建議您建立一個(gè)真正的負(fù)載測(cè)試會(huì)話,這意味著在同一時(shí)間使用具有10、20或50個(gè)用戶的注入器(例如JMeter),以便您能真正看到差異(嘗試將此代碼嵌入JMeter網(wǎng)頁(yè)中可以查詢)。
今天,我只是在一臺(tái)服務(wù)器(和一個(gè)簡(jiǎn)單的集合/表)上完成此操作,結(jié)果非常有趣且令人驚訝(與MyISAM引擎和InnoDb引擎相比,MongoDb的讀寫速度確實(shí)更快)。
這確實(shí)應(yīng)該是測(cè)試的一部分:并發(fā)和MySQL引擎。然后,數(shù)據(jù)/架構(gòu)設(shè)計(jì)和應(yīng)用程序需求當(dāng)然是巨大的需求,而不是響應(yīng)時(shí)間。讓我知道您獲得結(jié)果時(shí),我也需要有關(guān)此的輸入!
添加回答
舉報(bào)
0/150
提交
取消