温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

为什么进行list()操作时MongoDB比PostgreSQL慢了7倍

发布时间:2021-09-29 11:30:01 来源:亿速云 阅读:146 作者:柒染 栏目:大数据

这篇文章给大家介绍为什么进行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秒  

为什么进行list()操作时MongoDB比PostgreSQL慢了7倍
(线上MongoDB服务)

而之前的系统这个页面打开只需要几秒钟:  

为什么进行list()操作时MongoDB比PostgreSQL慢了7倍
(本地PostgreSQL服务)

这还了得,上线了不是给自己丢脸吗,赶紧排查测试。  
在这个页面里面,主要数据操作是从数据库中查询出原始数据,然后加载到Pandas的DataFrame中,接着在Pandas中进行各种数据处理,最后返回JSON数据给前端进行渲染。
数据库总的数据量为接近500万,最后的查询结果在3万左右。
对各个环节分别进行测试发现,主要的时间消耗在了从数据库读取数据,然后加载到Pandas这个过程中。
于是将这个过程专门提取出来,单独测试其消耗的时间。  结果发现,使用MongoEngine进行数据查询,然后加载到Pandas中需要几十秒的时间:  

为什么进行list()操作时MongoDB比PostgreSQL慢了7倍
 21秒的耗时,可能是由于MongoEngine对PyMongo进行封装之后的性能不行吧,于是直接使用PyMongo进行测试:
为什么进行list()操作时MongoDB比PostgreSQL慢了7倍
果然,经过一层封装之后,MongoEngine的效率不如PyMongo,但是直接使用PyMongo也消耗了14秒的时间。
而在本地使用PostgreSQL作为数据库后端的Django ORM测试仅仅花费了3秒的时间:  

为什么进行list()操作时MongoDB比PostgreSQL慢了7倍
使  用list()对数据  查询结果进  行  处理  是将其加  载  到P  andas中  的一  个常规前置  操作,相当于遍历查询  集的结  果并将每一条数据添加到一个  列表中。  类似  于以下操作:  
 
   
     
   
   
   res = []
      
    
    for i in xx:
      
    
       res.append(i)
只是一个list()操作,就让MongoDB的速度比PostgreSQL慢如此之多,难道我哪里操作不对?


关于为什么进行list()操作时MongoDB比PostgreSQL慢了7倍就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI