网站建设资讯

NEWS

网站建设资讯

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

这篇文章给大家介绍为什么进行list()操作时MongoDB比PostgreSQL慢了7倍,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

成都创新互联长期为上1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为普兰店企业提供专业的成都做网站、网站制作,普兰店网站改版等技术服务。拥有十年丰富建站经验和众多成功案例,为您定制开发。


最近有需求,要将一个局域网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倍就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


本文题目:为什么进行list()操作时MongoDB比PostgreSQL慢了7倍
网页路径:http://cdweb.net/article/iepspd.html