背景说明:

博主现在所在的公司是做医疗SAAS服务的,因为面向的是客户,所以在做进销存的时候会产生大量的数据。导致查询非常耗时,轻则服务响应超时,严重甚至导致数据库任务阻塞,资源耗尽宕机。

问题描述:

需求就是查询指定时间期间内期初,期出入库,期末,的出入库数据以及对应时间点的成本本等信息。

我们来看看博主接手之前的处理方案

最初版:

第一版的同事最初写需求是用的常规处理办法, 根据出入库数据推导得来。这种方案在数据量不大的单体应用上时没有问题的。但是因为是saas,一个诊所的出入库数据不算多,但是如果是一千家,一万家诊所呢,诊所每开一个个方都会影响多个药的进销存数据?这时候问题就出现了,随着用户量的增加,服务开始查询超时。

第二版:

这时候项目开始优化,既然推导过程过于复杂,那么我们就把启动一个定时任务,每天凌晨自动统计当天的库存以及进销存数据,作为当天的一个快照保存起来。这样以后查询的时候就少了推导的过程,只需要计算期间的数据就够了。典型的空间换时间方案。经过一段时间的运行,问题又出来了,每个诊所大概五百个药,如果是一千家诊所,每天需要向着快照表中插入约50万条数据,一个月下来就是1500万。渐渐的,效率越来越低。问题甚至比第一版更加严重。

最终版:

mysql查询效率不够,那么我们引入搜索引擎来应对各种条件查询。对于第二种数据量大的问题,我们来采用降低统计频率的方案来解决数据量过大的问题。详细操作方案如下:

降低快照表采集频率 ----- 从每天一次,降低到一个月一次。这样快照表的数据量大概会降至方案二的1/30.如下是优化后,由2400多万变成了90多万。

查询指定时间段库存时,期初由当月1日库存 与一号至查询开始时间段的出入库计算得来,期末同理。

引入ELK----- es搜索引擎对条件查询非常支持非常友好。内存查询,效率很快。LogStash自动采集,自动同步数据,自动实现数据同步(略微牺牲了实时性)。

最终结果,查询时间控制在400毫秒左右

具体搭建步骤后续更新。。。。。

一次千万级别数据的报表查询方案优化相关推荐

  1. mysql数据库 性别 优化_BATJ解决千万级别数据之MySQL 的 SQL 优化大总结

    引用 在数据库运维过程中,优化 SQL 是 DBA 团队的日常任务.例行 SQL 优化,不仅可以提高程序性能,还能减低线上故障的概率. 目前常用的 SQL 优化方式包括但不限于:业务层优化.SQL 逻 ...

  2. mysql数据库千万级别数据的查询优化和分页测试

    原文地址:原创 mysql数据库千万级别数据的查询优化和分页测试作者:于堡舰  本文为本人最近利用几个小时才分析总结出的原创文章,希望大家转载,但是要注明出处  http://blog.sina.co ...

  3. B+Tree索引为什么可以支持千万级别数据量的查找——讲讲mysql索引的底层数据结构

    MySQL索引底层数据结构 索引是存储引擎快速找到记录的一种数据结构 一. 有索引与没索引的差距 先来看一张图: 左边是没有索引的情况,右边是作为col2字段 二叉树索引的情况. 假如执行查找(假设表 ...

  4. mysql插入数据返回主键值_Mysql千万级别数据批量插入只需简单三步!

    第一步:配置my.ini文件 文件中配置 bulk_insert_buffer_size=120M 或者更大 将insert语句的长度设为最大. Max_allowed_packet=1M Net_b ...

  5. Mysql中一千万条数据怎么快速查询

    文章来源: 学习通http://www.bdgxy.com/ 目录 普通分页查询 如何优化 偏移量大 采用id限定方式 优化数据量大问题 普通分页查询 当我们在日常工作中遇到大数据查询的时候,第一反应 ...

  6. 千万级别数据查询优化_从千万级数据查询来聊一聊索引结构和数据库原理

    在日常工作中我们不可避免地会遇到慢SQL问题,比如笔者在之前的公司时会定期收到DBA彪哥发来的Oracle AWR报告,并特别提示我某条sql近阶段执行明显很慢,可能要优化一下等.对于这样的问题通常大 ...

  7. 千万级别数据查询优化_MySQL大数据量分页查询方法及其优化

    MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N ---适 ...

  8. Mysql千万级别数据如何 做分页?

    后端开发中为了防止⼀次性加载太多数据导致内存.磁盘IO都开销过⼤,经常需要分⻚展示,这个时候就需要⽤到MySQL的LIMIT关键字.但你以为LIMIT分⻚就万事大吉了么,LIMIT在数据量⼤的时候极可 ...

  9. 千万级别数据表创建索引

    业务背景 最近一个开发维护的公众号管理系统用户表(user_info)数据已经达到15,000k了,而此时有一个业务场景需要将公众号的用户信息重新同步一次,且后台原有过针对单个公众号的用户同步,但是已 ...

最新文章

  1. ios 打开评论界面
  2. 三年深入探索,网易云信让在线医疗做到技术“在线”
  3. 后疫情时代,那些迎来爆发机会的产业
  4. ios main函数之前的操作_添加函数在ARM在进入main函数之前
  5. 【渝粤教育】国家开放大学2018年秋季 8181-22T (1)老年保健按摩 参考试题
  6. 并发编程之线程安全性
  7. oracle mysql认证考试流程_Oacle认证考试:Oracle移植到MySQL注意事项
  8. Flink-CEP快速入门
  9. TCPDump工具使用与UDP数据包分析
  10. USACO 2007 Dec Silver Mud Puddles bfs or A-star
  11. Python输出 计算器 !
  12. 学习JBPM 工作流引擎 API方法(二)
  13. uint与int的区别
  14. 把JavaScript单独写成文件,开头怎么写
  15. 《多一点爱心》 --《年轻的潮》 汪国真
  16. C#源码QQ空间自动点赞神器,无需密码直接点头像登录,可加自动功能评论转发等。
  17. 机器学习 实验三 手写汉字识别
  18. 水题Eating Soup
  19. 开发提高工作效率的开发工具和办公软件
  20. python自动化办公书籍_2020年最新 Python自动化办公(资料完整)

热门文章

  1. 《黑镜》S06-04
  2. android usb 开发:如何跳过usb权限询问,解决绕过android下apk使用usb设备权限查询相应问题,自动获取usb权限...
  3. App优化--App瘦身
  4. oracle打补丁失败会怎么样,一次数据库补丁失败修复案例
  5. halcon视觉缺陷检测系列(1)常用的6种方法
  6. 全景丨0基础学习VR全景制作,后期篇第十四章:利用蒙版航拍补天
  7. 钢铁企业信息化建设实施的十六字原则
  8. muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor
  9. php插入友情链接,zblogphp友情链接怎么添加
  10. 国内目前最好用的USB转LIN总线调试工具软件,支持USB转LIN,USB转K,USB转CAN,USB转PWM功能