上线不久的一个项目,突然反映速度变得慢了很多。
测试插入数据:
> for (i = 1; i <= 100000; i++){
...})
{ "_id" : 11175, "create_dt" : ISODate("2014-07-22T03:10:10.420Z") }
看到插入的时间差,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秒,比以前好多了。
看来还是有文件读写瓶颈。能分开的数据,还是分成多个数据库最好。