MONGODB 数据库文件读取的优化
上線不久的一個(gè)項(xiàng)目,突然反映速度變得慢了很多。
測(cè)試插入數(shù)據(jù):
> for (i = 1; i <= 100000; i++){
...... db.test_customer.insert({
... "_id" : i,
... "user_id" : i
(30個(gè)字段)
})
> db.test_customer.find({},{_id:1,create_dt:1}).sort({_id:-1}).limit(2)
{ "_id" : 11176, "create_dt" : ISODate("2014-07-22T03:10:10.435Z") }
{ "_id" : 11175, "create_dt" : ISODate("2014-07-22T03:10:10.420Z") }
{ "_id" : 1, "create_dt" : ISODate("2014-07-22T03:01:23.935Z") }
{ "_id" : 2, "create_dt" : ISODate("2014-07-22T03:01:24.187Z") }
>
看到插入的時(shí)間差,1萬(wàn)多條記錄。花了10分鐘了。
怎么會(huì)這么慢呢。
后使用 mongotop 查看,訪問(wèn)集中在一個(gè)文檔的讀寫中。
在使用另一個(gè)mongod 進(jìn)程測(cè)試插入數(shù)據(jù),發(fā)現(xiàn) 同樣的代碼,插入數(shù)據(jù)是正常的。1萬(wàn)數(shù)據(jù)也就幾秒。
使用此方法排除了服務(wù)器硬件及服務(wù)器配置的問(wèn)題。
mongod -port [otherport]? dbpath=/otherpath/otherdb
分析懷疑可能是數(shù)據(jù)庫(kù)文件讀寫數(shù)據(jù)的瓶頸。
決定把訪問(wèn)讀寫特別多的那個(gè) 文檔 【表】 分到另建立的一個(gè)數(shù)據(jù)庫(kù)中去。
完成后,再測(cè)試插入。
再看插入的數(shù)據(jù):
> db.test_customer.find({},{create_dt:1}).sort({_id:1}).limit(2)
{ "_id" : 1, "create_dt" : ISODate("2014-07-22T10:06:51.502Z") }
{ "_id" : 2, "create_dt" : ISODate("2014-07-22T10:06:51.509Z") }
> db.test_customer.find({},{create_dt:1}).sort({_id:-1}).limit(2)
{ "_id" : 10000, "create_dt" : ISODate("2014-07-22T10:06:58.016Z") }
{ "_id" : 9999, "create_dt" : ISODate("2014-07-22T10:06:58.015Z") }
>
可以看到 只用了7秒,比以前好多了。
看來(lái)還是有文件讀寫瓶頸。能分開(kāi)的數(shù)據(jù),還是分成多個(gè)數(shù)據(jù)庫(kù)最好。
總結(jié)
以上是生活随笔為你收集整理的MONGODB 数据库文件读取的优化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【知识小课堂】mongodb 之 查询关
- 下一篇: 【知识小课堂】4 之 索引