MongoDB性能測試

公司目前使用的數(shù)據(jù)庫為MySql,已經(jīng)明顯看到了瓶頸,于是覺得找新的數(shù)據(jù)庫代替,根據(jù)現(xiàn)狀,新的數(shù)據(jù)庫應(yīng)該滿足如下要求:

1.支持Linux(屁話)

2.對python編程友好(總不能因為換個數(shù)據(jù)庫,拉著一群兄弟轉(zhuǎn)java吧)

3.支持集群(又是屁話)

4.能在現(xiàn)有數(shù)據(jù)上輕易建索引,優(yōu)化速度(鬼知道業(yè)務(wù)部門以后會提出個什么鬼需求來呢)

5.最好是C/C++寫的(大部分都是)


去問了一下度娘,NoSQL方面無非就那幾個主流的數(shù)據(jù)庫可以用,大體瀏覽了一下,基本總結(jié)如下:

主流:HBase,Cassandra,Membase,MongoDB,Redis

其中HBase和Cassandra是使用java寫的,直接被pass掉了(支持java的同學(xué)請盡情地噴)

Membase是Erlang和C寫的,對Erlang印象不錯

MongoDB使用C++寫的,存儲格式使用的是BSON,服務(wù)器的接口絕大部分是json格式,還保留了部分的MySql概念(查詢,索引)

Redis使用C/C++,目前公司在用,作為一個輔助功能組件


轉(zhuǎn)一圈下來,決定先試MongoDB,后續(xù)有機會再玩一下Membase。

去前臺轉(zhuǎn)轉(zhuǎn),順來一部被淘汰下來的前臺的PC,配置如下:

Intel(R) Pentium(R) CPU G3250 @ 3.20GHz

2核

4G內(nèi)存

500G硬盤


接下來安裝個Ubuntu 14.04.5 server版進去


計劃先測試一下MySql在這部機器上的性能,再試MongoDB的,這樣有個對比,由于線上數(shù)據(jù)庫服務(wù)器外網(wǎng)無法直接訪問,只能做個搬運工程,把線上的數(shù)據(jù)保存到excel文檔,再在PC機上讀excel寫入到相關(guān)數(shù)據(jù)庫里,這個思路把我惡心了一整天,主要是2點

1.excel一次最多只能寫入7w多條記錄

2.excel讀的效率也使得測試結(jié)果嚴重失真

這時候我心愛的mqtt來救場了

在線上數(shù)據(jù)庫端讀取數(shù)據(jù)放進mqtt里,再在PC端監(jiān)聽對應(yīng)的topic,把數(shù)據(jù)寫入數(shù)據(jù)庫,雖然與真實的性能有點差別,但這個差別是可以接受的。


測試結(jié)果如下:


其中每條數(shù)據(jù)有39個字段,MySql與MongoDB在數(shù)據(jù)插入前都建了2個多字段索引,插入的數(shù)據(jù)是一樣的,數(shù)據(jù)都是逐條插入,使用普通插入模式(沒使用安全插入和表鎖),但MySql使用了UNIQUE KEY,MongoDB目前未做唯一性檢查。

這里明顯看到MongoDB的寫入速度要比Mysql快很多,而且可以預(yù)測,后面隨著數(shù)據(jù)量的增多,MySql的速度衰減會很明顯,但MongoDB在數(shù)據(jù)達到一定規(guī)模后,性能會比較平穩(wěn)。

這里要注意的還有MongoDB運行的時候內(nèi)存的使用情況,MongoDB在運行時會占有大量內(nèi)存,所有正式使用的時候,不適合和業(yè)務(wù)放在同一個服務(wù)器。

這里要說一下數(shù)據(jù)統(tǒng)計,使用相同的統(tǒng)計條件,MySql下初次統(tǒng)計耗時會較大,但再次統(tǒng)計時就會非??欤琈ongoDB的初次統(tǒng)計會比MySql快,但再次統(tǒng)計時,MongoDB還是會耗相同的時長。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容