这篇文章给大家介绍为什么进行list()操作时MongoDB比PostgreSQL慢了7倍,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
最近有需求,要将一个局域网Web数据平台迁移到线上,顺带着,本地服务使用的PostgreSQL也要替换成国内某云的MongoDB。由于之前的Web框架选择的Django,为了能够最小限度地改动代码,并对接上MongoDB上已存在的数据库和数据,在一番对比之后(Djongo和MongoEngine),选择了MongoEngine这个对象文档映射(ODM)模块来替代Django原有的ORM。对照着MongoEngine的文档一顿操作,第一个页面迁移完成,赶紧打开看看。不看则已,一看瞎哭,页面加载完足足等了1、2、3、4、5、6、7、8、……27秒
在这个页面里面,主要数据操作是从数据库中查询出原始数据,然后加载到Pandas的DataFrame中,接着在Pandas中进行各种数据处理,最后返回JSON数据给前端进行渲染。数据库总的数据量为接近500万,最后的查询结果在3万左右。对各个环节分别进行测试发现,主要的时间消耗在了从数据库读取数据,然后加载到Pandas这个过程中。于是将这个过程专门提取出来,单独测试其消耗的时间。
结果发现,使用MongoEngine进行数据查询,然后加载到Pandas中需要几十秒的时间:
21秒的耗时,可能是由于MongoEngine对PyMongo进行封装之后的性能不行吧,于是直接使用PyMongo进行测试:果然,经过一层封装之后,MongoEngine的效率不如PyMongo,但是直接使用PyMongo也消耗了14秒的时间。而在本地使用PostgreSQL作为数据库后端的Django ORM测试仅仅花费了3秒的时间:
使
用list()对数据
查询结果进
行
处理
是将其加
载
到P
andas中
的一
个常规前置
操作,相当于遍历查询
集的结
果并将每一条数据添加到一个
列表中。
类似
于以下操作:
res = []
for i in xx:
res.append(i)
只是一个list()操作,就让MongoDB的速度比PostgreSQL慢如此之多,难道我哪里操作不对?关于为什么进行list()操作时MongoDB比PostgreSQL慢了7倍就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。