前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MongoDB在这里比PostgreSQL慢了7倍

MongoDB在这里比PostgreSQL慢了7倍

作者头像
州的先生
发布2019-09-25 14:51:02
1.6K0
发布2019-09-25 14:51:02
举报
文章被收录于专栏:州的先生州的先生

编程应用、实战教程,不容错过

最近有需求,要将一个局域网Web数据平台迁移到线上,顺带着,本地服务使用的PostgreSQL也要替换成国内某云的MongoDB。

由于之前的Web框架选择的Django,为了能够最小限度地改动代码,并对接上MongoDB上已存在的数据库和数据,在一番对比之后(Djongo和MongoEngine),选择了MongoEngine这个对象文档映射(ODM)模块来替代Django原有的ORM。

对照着MongoEngine的文档一顿操作,第一个页面迁移完成,赶紧打开看看。

不看则已,一看瞎哭,页面加载完足足等了1、2、3、4、5、6、7、8、……27秒

(线上MongoDB服务)

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

(本地PostgreSQL服务)

这还了得,上线了不是给自己丢脸吗,赶紧排查测试。

在这个页面里面,主要数据操作是从数据库中查询出原始数据,然后加载到Pandas的DataFrame中,接着在Pandas中进行各种数据处理,最后返回JSON数据给前端进行渲染。

数据库总的数据量为接近500万,最后的查询结果在3万左右。

对各个环节分别进行测试发现,主要的时间消耗在了从数据库读取数据,然后加载到Pandas这个过程中。

于是将这个过程专门提取出来,单独测试其消耗的时间。结果发现,使用MongoEngine进行数据查询,然后加载到Pandas中需要几十秒的时间:

21秒的耗时,可能是由于MongoEngine对PyMongo进行封装之后的性能不行吧,于是直接使用PyMongo进行测试:

果然,经过一层封装之后,MongoEngine的效率不如PyMongo,但是直接使用PyMongo也消耗了14秒的时间。

而在本地使用PostgreSQL作为数据库后端的Django ORM测试仅仅花费了3秒的时间:

使用list()对数据查询结果进行处理是将其加载到Pandas中的一个常规前置操作,相当于遍历查询集的结果并将每一条数据添加到一个列表中。类似于以下操作:

代码语言:javascript
复制
res = []
for i in xx:
   res.append(i) 

只是一个list()操作,就让MongoDB的速度比PostgreSQL慢如此之多,难道我哪里操作不对?

欢迎小伙伴们出谋划策,分享解决方案~

万水千山总是情,点个“收藏”行不行

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 州的先生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档