這里總結(jié)下這段時間使用mongo的心得,列出了幾個需要注意的地方。
創(chuàng)新互聯(lián)長期為上千多家客戶提供的網(wǎng)站建設服務,團隊從業(yè)經(jīng)驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為順義企業(yè)提供專業(yè)的成都做網(wǎng)站、成都網(wǎng)站建設,順義網(wǎng)站改版等技術(shù)服務。擁有10余年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。1. 系統(tǒng)參數(shù)及mongo參數(shù)設置
mongo參數(shù)主要是storageEngine和directoryperdb,這兩個參數(shù)一開始不選定后續(xù)就無法再更改。
directoryperdb主要是將數(shù)據(jù)庫分文件夾存放,方便后續(xù)的備份及數(shù)據(jù)遷移。
storageEngine(存儲引擎)默認使用的是MMAPv1,推薦使用3.0新加入的引擎wiredTiger。經(jīng)實際使用wiredTiger占用的磁盤空間是MMAP的1/5,索引大小是其1/2,查詢速度也提高很多,更重要的是該引擎提供了document級別的鎖,當集合插入或更新數(shù)據(jù)時不需要阻塞讀操作了。唯一的問題是市面上支持該引擎查詢的工具不多,MongoVUE無法查到該引擎存儲的集合,NosqlManager-mongo可以查到但需要.net環(huán)境支持。個人覺得熟悉下mongo command用mongo shell就足夠了,所以還是強烈推薦使用wiredTiger引擎。
2. 無需對集合進行水平切分
由于之前一直使用關系型數(shù)據(jù)庫,關系型數(shù)據(jù)庫當單表數(shù)據(jù)量超大時經(jīng)常使用的一直方法是對數(shù)據(jù)表進行分表。在使用mongo時便很自然的覺得這招仍然有用。由于該系統(tǒng)的分表都是動態(tài)生成的,做到后面發(fā)現(xiàn)這招對mongo帶來的性能提升遠遠抵不過維護成本的增加。
分析一下關系型數(shù)據(jù)庫分表會提高性能的大原因是很多關系型數(shù)據(jù)庫一張表是一個文件,分表可以避免一個文件過大所造成數(shù)據(jù)提取速度變慢。但是mongo并不是這樣存儲的,所以這條并不成立了。
用過的都知道m(xù)ongo對索引的依賴非常大,如果集合不能一開始就設計好,那后續(xù)索引就得寫腳本來創(chuàng)建。這里貢獻個給mongo大表動態(tài)創(chuàng)建索引的腳本:
eval(function () { var infos = []; var collNames = db.getCollectionNames(); for (var i = 0; i < collNames.length; i++) { var collName = collNames[i]; var collSize = db.getCollection(collName).count(); if (collSize > 1000000 && collName.indexOf("info_")==0) { db.getCollection(collName).ensureIndex({publishDate:-1,blendedScore:-1,publishTime:-1,isRubbish:1},{name:"ScoreSortIdx",background:true}); db.getCollection(collName).ensureIndex({similarNum:-1,publishTime:-1,isRubbish:1},{name:"HotSortIdx",background:true}); db.getCollection(collName).ensureIndex({publishTime:-1,isRubbish:1},{name:"TimeSortIdx",background:true}); infos.push("name:" + collName + "索引創(chuàng)建成功"); } } return infos; }());
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。