位置: 编程技术 - 正文

MongoDB数据库查询性能提高40倍的经历分享(mongodb数据库查询用多少存储)

编辑:rootadmin

推荐整理分享MongoDB数据库查询性能提高40倍的经历分享(mongodb数据库查询用多少存储),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mongodb数据库查看表,mongodb数据库查不到数据,mongodb数据库查看表单内容,mongodb数据库查询命令,mongodb数据库查看表单内容,mongodb数据库查看表单内容,mongodb数据库查询,mongodb数据库查询,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

数据库性能对软件整体性能有着至关重要的影响,本文给大家分享了一次MongoDB数据库查询性能提高倍的经历,感兴趣的朋友们可以参考学习。

背景说明

1、数据库:MongoDB

2、数据集:

A:字段数不定,这里主要用到的两个UID和Date B:三个字段,UID、Date、Actions。其中Actions字段是包含元素JSON数组,每个JSON对象有6个字段。共有数据万条左右。

3、业务场景:求平均数

通过组合条件从A数据表查询出(UID,Date)列表,最多可能包含数万条记录; 然后用第1步的结果从B中查询出对应的数据 用第2步结果去Actions的某个固定位置的元素的进行计算

进化过程

在这里使用Python演示

最直接想到的方法

根据上面的业务场景描述,最容易想到的解决方法就是

实现难度当然是最低的,可是整个任务在第一步只有1万条左右的返回时,消耗的时间竟然达到了惊人秒。当然这是已经加了索引的结果,否则可能都无法得到结果了。

减少查询次数

瓶颈显而易见,在循环中查询Collection B,增加了网络开销,自然也就增加时间,如果一次查询出所有结果,自然会大大提高效率。也就是说,我要把第一步的结果作为条件一次性传递,做一个$in操作。可是怎么才能做到呢?如果在uid和date上分别做$in操作,那么返回的结果就会是二者单独做$操作的合集,很显然这和要求是不符的。

经过上面的分析,似乎进入了死胡同。其实答案也基本显现了,需要有一个字段可以满足上面的要求,那么这个字段就是uid和date的合体,就命名为uid_date。uid_date是一个新字段,在B中并不存在,在使用之前需要将数据库现有的数据做一下处理。

MongoDB数据库查询性能提高40倍的经历分享(mongodb数据库查询用多少存储)

处理完毕改造程序:

这一番改造颇费时间,主要是前期的数据处理。代码改造完毕,执行下看看吧。

可是,可是…… 秒

我做错了什么?!

增加返回记录数

我还是坚信上面的优化思路是对的,现在看看数据库能给一些什么线索吧。

登录到数据库服务器,找到MongoDB的日志/data/mongodb/logs/mongod.log。仔细查找,发现在查询数据集B时有很多getMore命令。这就奇怪了,我是一次性查询,为什么还有getMore。

赶紧查下官方的文档,然后发现了下面的内容:

batcSize参数指定了每次返回的个数,默认的个。那看来这个应该是问题所在。找下pymongo的文档,也可以设置这个参数,那就设个大的吧。

再次改造程序如下:

这次总该可以了。

嗯,好了一些,降到了秒左右。可是,这离1秒只能还差距倍呢。

返回值减负

当日不能放弃,继续通过日志查找线索,发现还是有很多getMore。通过各方查找,发现mongodb每次最多返回M的记录,通过getMore日志的比对,发现的确如此。由于B中每条记录的过去庞大,每次只能几百条记录,因此要一次多返回,那就必须要减少每次返回的记录数。因为在计算时,只用了特定索引位置上的数据,所以只返回该条记录就可以了。

最后的代码就不再写了,具体可以参考官方文档的实例。

总结

标签: mongodb数据库查询用多少存储

本文链接地址:https://www.jiuchutong.com/biancheng/312608.html 转载请保留说明!

上一篇:Ubuntu下安装mongodb 3.4的详细过程(ubuntu下安装windows)

下一篇:利用mongodb查询某坐标是否在规定多边形区域内的方法(mongodb 查询条件)

  • 装修行业小规模纳税人标准
  • 医疗服务有增值业务吗
  • 物流辅助服务属于什么费用
  • 出口业务运费可以抵扣吗
  • 发票上盖了老税号怎么办
  • 留抵税额账上比申报表多
  • 差额发票的税额怎么计算
  • 其他债权投资公允价值变动影响摊余成本吗
  • 土地出让金返还政策文件
  • 公司注销后会计凭证保管年限
  • 17%增值税发票怎么计算成13%
  • 奖励积分换取商品会计处理
  • 增值税负数如何计算
  • 小规模纳税人零申报什么意思
  • 详解非税收入
  • 预缴的税款可以互抵吗
  • 销售方如何开具红字增值税专票 对方未抵扣
  • 小型微利企业需要满足的条件
  • 增值税小规模纳税人减免增值税政策
  • 进项税额加计抵减怎么做分录
  • w10系统搜索
  • 哪些抵押物必须登记才有效
  • 新成立公司开票能开多少个点的发票
  • 生产车间发生的间接费用会计科目
  • 财务会计制度
  • 你需要权限来执行操作是怎么回事
  • 银行电子承兑到期了怎么兑现操作
  • 收到员工罚款分录怎么记账
  • 残疾人在公司上班公司有什么好处
  • 没有利润,能否开发票
  • php socket 非阻塞
  • laravel引入css
  • php连接mysql数据库四步
  • vue3开发app
  • easyui分页
  • 盘点那些神级翻唱现场
  • mask rcnn优点
  • 金融企业贷款损失税前扣除
  • 小规模升级一般纳税人需要多久
  • 增值税农产品免税是哪一条
  • 商业折扣,现金折扣,销售折让的核算特点
  • 缴纳印花税的会计凭证怎么做
  • 在阿里云的云主机之间怎么通信
  • 有形动产租赁属于现代服务业吗
  • 公司年终奖要做多久才能享受
  • 实际缴纳的税金比应交的多的部分记入什么科目
  • 收取履约保证金的作用
  • 研发费用凭证附件
  • 公司打款账号模板图片
  • 免税蔬菜税额用什么表示
  • 公司入账是什么意思
  • 年终结账账务处理
  • mysql类型varchar长度
  • win8创建新用户
  • win10执行数据保护如何开启
  • Windows计划任务 不管是否登录 没有窗口
  • win8.1删除wifi
  • win10怎么用键盘重启
  • win8怎么禁止弹窗
  • 笔记本触摸屏无法使用了
  • win7系统无法安装ie8
  • jQuery插件安装教程
  • bat批处理视频教程
  • python xml.etree
  • vue.js作用
  • 10分钟掌握心理学
  • Jquery通过ajax请求NodeJS返回json数据实例
  • Android使用opencv处理图片灰度
  • cocos2dx:C++层通过JniHelper调用JAVA层代码进而调用Android手机应用接口
  • 国家税务总局会议管理办法
  • 银行流水怎么查
  • 河北省国家税务局长简介
  • 水电费的增值税专用税可抵扣进项
  • 山东社保费缴纳多少
  • 福建网上税务局app
  • 信托公司抵押房能买吗
  • 竣工开始缴房产税吗
  • 税务上的关联企业指哪些
  • 城镇土地使用税优惠政策
  • 杭州地税局客服电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设