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") }


> db.test_customer.find({},{_id:1,create_dt:1}).sort({_id:1}).limit(2)
{ "_id" : 1, "create_dt" : ISODate("2014-07-22T03:01:23.935Z") }
{ "_id" : 2, "create_dt" : ISODate("2014-07-22T03:01:24.187Z") }
>

看到插入的时间差,1万多条记录。花了10分钟了。

怎么会这么慢呢。


后使用 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)