最近项目在使用mongoDB,用起来是挺好用的,但是用户上量之后,明显就感觉有点慢,为什么这么慢,我就开始慢慢的寻找原因。
结合网上的测试脚本以及一些朋友们的测试结果和我自己测试的结果,我发现mongoDB真的没有那么慢,那是我哪里写错了?
我就开始排查项目代码中中哪里和测试脚本中写的不一样,结果就找到了数据库的连接方式,项目中一开始采用的是现在pymongo推荐的MongoClient(ip,port)的方式,但是测试脚本中采用的是Connection(ip,port)的方式,经过不同数量级的测试得出了如下的结果:
方法 | 数量 | 时间(s) |
Connection | 1 | 0.000314950942993 |
MongoClient | 1 | 0.000757217407227 |
Connection | 10 | 0.00154709815979 |
MongoClient | 10 | 0.00501179695129 |
Connection | 100000 | 6.14999890327 |
MongoClient | 100000 | 27.3278138638 |
Connection | 1000000 | 59.0989689827 |
MongoClient | 1000000 | 273.486183882 |
- 结果分析
从上表的结果可以看出,基本上MongoClient的连接方式插入数据的时间是Connection连接方式插入数据的4倍左右,当然数据量小的时候可能建立连接还有一些非相关的操作可能占的比重比较大,越到后来就越稳定。
- 疑问
1、这就让我产生了疑问,pymongo这两种方式的实现原理有怎样的不同之处,造成他们的写效率相差如此之多?
2、项目中当然要采用连接效率比较高的方法,但是现在不知道实现的原理,心里就比较没底,不太确定的是Connection的方法虽然比较快,但是会不会需要手动管理连接资源;如果操作太多了的话会不会造成资源的占用
还请各位大神们推荐一些能够解决这些问题的地方,或者是给一下参考资料我自己去研究一下