Mongodb效能最佳化

來源:互聯網
上載者:User

項目中使用到了mongdb,在小資料量時,和關係型資料庫一樣,看不出任何問題。當資料的操作變的頻繁,如對10萬級的資料表連續進行查詢操作,mongdb會變的非常緩慢。

到底是什麼原因呢?

這是spring版本的mongdb操作,spring的MongoTemplate只是對源生方法的一些封裝,如果spring環境下有這些問題,直接使用源生方法進行的資料操作也會產生同樣的問題。

下面是我的最佳化過程:

1.建立索引,索引對mongdb的查詢速度影響非常大,mongdb索引建立的方法網上有很多,我這裡舉一個實際的例子:

有個資料表叫Student,該表中name、age屬性被用作查詢條件,其中name被使用的頻率非常大,age在特定的地方會和name同時作為查詢條件,age幾乎不會單獨作為查詢條件。

索引建立過程如下:

db.Student.ensureIndex({ "name" : 1, "age" : -1 },{ "name" : "name_age_index" });

如果使用MongoVUE用戶端軟體的話,直接添加索引輸入:{ "name" : 1, "age" : -1 }即可。

最後記得建立索引後不要隨便drop表。

2.最佳化代碼,方法使用不當會顯著影響mongdb效能,這裡我列舉一下我的使用經驗:

a.單純的更新資料操作使用 mongoTemplate.updateFirst() 或者mongoTemplate.updateMulti()代替mongoTemplate.findAndModify();

b.單純的新增資料操作使用 mongoTemplate.insert()代替 mongoTemplate.save();

c.查詢1條資料使用 mongoTemplate.findOne()代替 mongoTemplate.find()後遍曆資料;

d.查詢資料時注意資料量,如果使用mongoTemplate.find()的結果集過大,如10萬100萬,則資料會積壓在記憶體中,這是非常危險的,盡量使用limit方法限制條數。

3.謹慎選擇是否使用mongdb,在我們的項目使用過程中,確確實實的發現一些問題。選擇使用Mongodb使要考慮伺服器配置,因為Mongodb對記憶體是無限貪婪的,如果只有2G記憶體的伺服器,還要運行其他服務等,部署Mongodb的話處理小資料量還是可以的,進行大量的資料處理是不適合的。在我看來使用NOSQL就是可以花最少的錢處理更多的資料量,並且對資料的安全性不是非常看重的情況,比如允許資料丟失,或者無法處理事務等情況。如果對資料安全性要求較高的情形下,建議謹慎考慮。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.