MONGODB 数据库文件读取的优化
上線不久的一個項目,突然反映速度變得慢了很多。
測試插入數據:
> for (i = 1; i <= 100000; i++){
...... db.test_customer.insert({
... "_id" : i,
... "user_id" : i
(30個字段)
})
> 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") }
>
看到插入的時間差,1萬多條記錄?;?0分鐘了。
怎么會這么慢呢。
后使用 mongotop 查看,訪問集中在一個文檔的讀寫中。
在使用另一個mongod 進程測試插入數據,發現 同樣的代碼,插入數據是正常的。1萬數據也就幾秒。
使用此方法排除了服務器硬件及服務器配置的問題。
mongod -port [otherport]? dbpath=/otherpath/otherdb
分析懷疑可能是數據庫文件讀寫數據的瓶頸。
決定把訪問讀寫特別多的那個 文檔 【表】 分到另建立的一個數據庫中去。
完成后,再測試插入。
再看插入的數據:
> 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秒,比以前好多了。
看來還是有文件讀寫瓶頸。能分開的數據,還是分成多個數據庫最好。
總結
以上是生活随笔為你收集整理的MONGODB 数据库文件读取的优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【知识小课堂】mongodb 之 查询关
- 下一篇: Aerospike NoSQL 数据库介