Mongodb百亿级数据添加,修改,删除,查询等性能测试【四】
?集群的結(jié)構(gòu),大家可以查看我的另一遍文章,Mongodb的三種集群? 在最后一種集群中,介紹到。
目前使用的數(shù)據(jù)就是最后一個(gè)測(cè)試集群,留下的數(shù)據(jù)。
簡(jiǎn)單介紹一下,四個(gè)分片的配置
192.168.99.6 雙核 2G 500G(機(jī)械硬盤) 192.168.99.7 雙核 4G 500G(機(jī)械硬盤) 192.168.99.8 雙核 4G 500G(機(jī)械硬盤) 192.168.99.11 雙核 4G 500G(機(jī)械硬盤)?mongos和conf服務(wù)器的配置也是差不多,就不貼出來(lái)了,不是很重要。
?很遺憾的是,片健當(dāng)初只選擇了ID主健,當(dāng)時(shí)一時(shí)沖動(dòng),沒(méi)想好,這可能給查詢給不方便。
首先,看看單條數(shù)據(jù)文檔大小
{"_id" : ObjectId("5a39d1541b5bd02374f0844a"),"OrderNo" : "636493641800005836","ShipperID" : 8427,"CarOwnerID" : 3625,"SendProvince" : "福建省","SendCity" : "莆田市","DestProvince" : "福建省","DestCity" : "莆田市","TranPrice" : "1014","CancelStatus" : 3,"Status" : 100,"SettlementDate" : null,"SettleTranPrice" : "2279","SafePrice" : "528","TotalPrice" : "6036","CarryPrice" : "845","CreateTime" : ISODate("2017-12-20T02:56:20.000Z") }?
四個(gè)分片服務(wù)器,各自數(shù)據(jù)量和文件大小,一共100億
192.168.99.6? 數(shù)量量:2603773123? ?數(shù)據(jù)庫(kù)大小:158G? 日志Log大小:67M
192.168.99.7? 數(shù)量量:2602259209? ?數(shù)據(jù)庫(kù)大小:158G??日志Log大小:1.5G
192.168.99.8? 數(shù)量量:2534980799? ?數(shù)據(jù)庫(kù)大小:154G? 日志Log大小:47G
192.168.99.11? 數(shù)量量:2601317529? ?數(shù)據(jù)庫(kù)大小:158G?日志Log大小:68M
數(shù)據(jù)量四個(gè)分片,比較均衡,數(shù)據(jù)庫(kù)大小差不多,就是這個(gè)日志,差距很大哎,我去下載來(lái)看看,都什么梗?在內(nèi)面。46G內(nèi)網(wǎng)的速度10M/S,下載都要一個(gè)小時(shí),不查看了
查詢總行數(shù),第一次查詢大概花費(fèi)7-9秒,第二次有緩存,只需0.039秒,應(yīng)該是緩存的原因。現(xiàn)在問(wèn)題,我來(lái)加一個(gè)有條件的總行數(shù)查詢。
db.getCollection('Order').count({'Status':100})這下就不行了吧,可以看到各個(gè)分片的CPU和內(nèi)存都漲上去了。然后,查詢界面一直轉(zhuǎn),出事了,整整過(guò)去了15分鐘,還在轉(zhuǎn),這鐵定是要出事了。
除了根據(jù)ID查詢之外,只要加搜索條件,都卡到不行。到此為止,我不得,不刪除這100億條數(shù)據(jù)。因?yàn)閿?shù)據(jù)過(guò)多,很多查詢都要費(fèi)很大的時(shí)間,甚至無(wú)法獲取結(jié)果。
我們刪除數(shù)據(jù)先寫入小部分?jǐn)?shù)據(jù),比如10億,進(jìn)行數(shù)據(jù)分析。性能比較吧。
看來(lái) “_Id”?并不是一件很好片健,在這個(gè)100億的數(shù)據(jù)寫入中,四個(gè)分片服務(wù)器,只要一個(gè)比較忙,原因就是片健 "_Id"(遞增值),使得集群出一個(gè)“熱點(diǎn)”?分片,然后集群再通過(guò)均衡器(mongos)遷移到其它分片。
在這里,小小普及一下片健和工作原理。
片健的選取很關(guān)健,會(huì)直接影響集群的效率,并且很難再重選片健,特別是大數(shù)據(jù)。
相關(guān)資料我也懶得說(shuō),直接你們就去看文檔我貼點(diǎn)資料給你們看
如何選取片健
我這里重新測(cè)試數(shù)據(jù),就選擇哈希片健吧,比較簡(jiǎn)單有效。就是查詢的也是隨機(jī)的,這樣的話,效率會(huì)低。
//模擬數(shù)據(jù)寫入服務(wù)器 192.168.99.5 //mongos服務(wù)器 192.168.99.9 //分片服務(wù)器 192.168.99.6 192.168.99.7 192.168.99.8 192.168.99.10 192.168.99.11 192.168.99.15 192.168.99.16 //配置服務(wù)器 192.168.99.12 192.168.99.13 192.168.99.14 sh.shardCollection("shop.Order", { _id : "hashed" } ) //哈希片鍵?
具體怎么搭建,大伙參考頭上的鏈接的文章。相比前一篇,這回測(cè)試服務(wù)器,又增加了三臺(tái)。
?
搭建好了。
?雖然選擇了哈希片鍵,但是不知道為什么,還是出現(xiàn)熱點(diǎn)服務(wù)器
七個(gè)分片服務(wù)器,只有這一臺(tái),比較忙,這臺(tái)也是主分片。其它的分片的CPU和內(nèi)存都閑的很啊。頭痛。這又是為什么。
準(zhǔn)備下班了,留模擬服務(wù)器,寫一宿吧。明天使用MapReduce?進(jìn)行大數(shù)據(jù)分析。就不深入研究了,沒(méi)有太多時(shí)間。
寫了一宿,寫了五億條數(shù)據(jù)。
但是,不旦出現(xiàn)熱點(diǎn)分片,還出出數(shù)據(jù)不平均的情況。熱點(diǎn)分片儲(chǔ)存達(dá)2億條,其它分片儲(chǔ)存5千萬(wàn)條
先查查,這是什么原因吧。終于查出原因,因?yàn)樽蛲砑尤氲娜_(tái)測(cè)試服務(wù)器,有二臺(tái)時(shí)間不同。所以出現(xiàn)這個(gè)問(wèn)題。這個(gè)問(wèn)題在集群搭建中也出現(xiàn)。
昨天我己同步過(guò)時(shí)間的了。不知道為什么,這二臺(tái)真的差十幾秒時(shí)間。可能昨晚眼花了。
?時(shí)間完全同步之后。集群也恢復(fù)了正常。使用哈希片健之后,集群的七個(gè)分片都開始工作。CPU和內(nèi)存都占用。
?只能把昨晚的五億數(shù)據(jù),全部刪除,現(xiàn)在重新生成,大概10萬(wàn)/秒的速度。
?網(wǎng)卡的工作效率,己達(dá)峰值,辦公室的交換機(jī),路由器都是百M(fèi)級(jí)的,也就是11M左右的速度,就是峰值了。
雖然七臺(tái)分片器的還是使用率不高。但是mongos的服務(wù)器網(wǎng)卡和交換機(jī),路由器,的工作狀態(tài),已達(dá)峰值。在目前的情況,置換新設(shè)備的可能性,大概接近零。
先這樣吧,連續(xù)寫兩個(gè)小時(shí)間,下午使用MapReduce?進(jìn)行大數(shù)據(jù)分析,性能估計(jì)看不出來(lái)了。因?yàn)橄挛?#xff0c;估計(jì)也就1億條數(shù)據(jù)。
?目前測(cè)試發(fā)現(xiàn)一個(gè)現(xiàn)象mongos?網(wǎng)卡不到峰值,8-9M的時(shí)候,工作最正常,各個(gè)分片,CPU和內(nèi)存都正常。一旦把mongos的網(wǎng)卡扛到峰值,雖然輸入速度每秒提升了2W條。但是各個(gè)分片的CPU和內(nèi)存,明顯不按比例快速增長(zhǎng)。
?好吧,大概寫了二到三個(gè)小時(shí),寫了5千萬(wàn)條。就這樣測(cè)試吧
頭痛,1000條的分片服務(wù)器,條件查詢要11秒。當(dāng)然沒(méi)有索引
在mongos上面,查詢,看看性能如何吧,一共5千萬(wàn)條。除了主健,都沒(méi)有索引
find()加上條件,響應(yīng)還是很快的。
limit的查詢
sort排序
直接就查不出來(lái),換一個(gè)小數(shù)據(jù)的分片查查吧,五百分的數(shù)據(jù)分片。這么就有6秒
行吧,又有正經(jīng)事要辦了。先筆記一下。以后再測(cè)吧。mongodb大規(guī)模寫入的性能還是可以的。查詢的話,還是很慢。主要是搜索的數(shù)據(jù)體變大了。
?
轉(zhuǎn)載于:https://www.cnblogs.com/NET-BLOG/p/8242825.html
總結(jié)
以上是生活随笔為你收集整理的Mongodb百亿级数据添加,修改,删除,查询等性能测试【四】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 日志模块的简单使用
- 下一篇: redis06----消息订阅