关于“海”量数据的操作的一些坑和注意事项
一、前提
说海量数据,其实不算,只是每天大概入库5万条左右,要做一个历史分析,但长期积累下来数据量还是恐怖的,跟产品争了半天最终确定下来只查询半年的数据,峰值大概600万左右,测试的时候洗进去了400万测试数据,结果还是没预计到,测试数据库干挂了,所以在此记录一下以防以后再犯,接下来主要说一下问题出在哪以及有什么样的替代方案,先上一张图来看一下效果
二、功能介绍
上图左侧以及头部是查询条件区域,右下为结果区域,查询条件大概有30个左右,结果大概40列左右,首先查询不是什么大问题,大概一天就整理写完了,问题出现在了洗数据、以及查询性能上面,首先我们来说洗数据的优化
2.1洗数据进阶
以前mongo表里面大概20列左右,我要再洗进去50列左右,数据量270万,需要从各个不同的历史表里面去拿数据,每同步一条要查6张表组合,插入到mongo里面,单条循环用时13ms,所以同步下来需要十来个小时,然后觉得时间太久,如果出错重新跑的代价太大
①首先是把6张表的历史数据缓存到redis(有些表数据量大直接缓存到redis的话也需要很久,所以就采用懒加载的模式,一边执行 一边缓存,然后再碰到相同的key则不需要再查数据库)
②把数据量小的表直接放到内存里面
③然后每次往mongo insertAll一万条数据
④然后又开了8个线程
最后把时间压缩到了2个小时。
2.2查询数据进阶
然后就到了查询的阶段,是要去mongo里面查询(不要问问什么要存到mongo,历史原因),发现查询特别慢,最后定位到了是countd的问题,于是前台在请求的时候发三次请求
①查询列表
②查询报价高估、低估条数
③查询当前条件的总数
以为这样就解决了,但是没想到问题更大了,虽然查询的时候列表返回特别快,但是剩下的两个查询真的不敢恭维 200万数据要count十几秒,但是由于左侧查询条件每次点一下就触发请求,请求堆积导致mongo压力特别大,最后整个项目需要访问mongo的功能都特别慢然后超时,于是测试环境的mongo就这样挂了,但是临近上线了,于是连夜切换到mysql,写了一晚上洗数据的查询数据的功能,使用 jpa 一次insert一万条,大概两个小时跑完,但是第二天在测试的时候由于查询条件比较多实际count还是很慢,需要10秒左右,大家商量了半天 最终使用现有技术结构是没办法的,于是老板拍板历史数据只提供一周的数据,于是数据量降低到25万左右,压测也能扛住了,挺好,最终采用的还是mongo数据库
2.3查询数据进阶
到上线的时候要从原数据里面查出最近一周的洗到新表中,于是就按天查询数据,mongo按天存储(每次存储5万),然后8线程,同时存储25万,没想到服务器直接崩了,所以又单线程跑完结束
三、总结
刚开始就是因为数据量大、要求产品只查询半年数据,不想每次查询查那么多张表影响效率然后就把数据冗余到一张表,又因为数据量大 所以按照筛选条件分成三张表,结果最后数据量还是超过预期,所以经过这一个项目,知道了 mongo 的存储性能一次insert 一万 两万 五万都没问题,mongo的count效率有多低,mysql的insert 一次一万条差不多,两万三万估计就扛不住了, 对比了mongo、mysql的查询,线程的控制 等等,非常感谢有这样的一个机会去锻炼学习,谢谢 以后再接再厉
分享到:
相关推荐
DCS操作注意事项
今天来分享一下关于uniapp开发钉钉小程序真机和模拟器传输的数据格式不同以及一些注意事项。 前些日子我遇到一个问题,钉钉模拟器上能显示数据,真机上却不能显示数据,小程序我已经开发了好几个,但是都是在小程序...
氧割 减压器 安全操作规程和注意事项-OK氧割 减压器 安全操作规程和注意事项-OK氧割 减压器 安全操作规程和注意事项-OK
ETL测试,全称为Extract-Transform-Load,是数据仓库领域中的关键环节,涉及数据的抽取、转换和加载。在进行ETL测试时,我们关注的是数据从源系统到目标系统流动过程中的完整性和准确性。以下是一些在ETL测试中需要...
旺铺操作说明和注意事项.doc
数据可视化工具的选型注意事项.pdf数据可视化工具的选型注意事项.pdf数据可视化工具的选型注意事项.pdf数据可视化工具的选型注意事项.pdf数据可视化工具的选型注意事项.pdf数据可视化工具的选型注意事项.pdf数据可视...
Sqoop 是一个用于在关系型数据库(如MySQL)和Hadoop生态系统(包括HBase)之间传输数据的工具。压缩包文档是使用Sqoop操作HBase的详细步骤和注意事项。
NC 系统合并报表操作流程是指在 NC 系统中进行合并报表时需要遵循的步骤和注意事项。本文档旨在指导操作人员正确地进行合并报表操作,确保报表的准确性和完整性。 一、个别报表 1.1 个别报表登入 在 NC 系统中,...
【最新】DEAP 2.1的操作步骤和注意事项课程PPT-北京交通大学魏炜教授主讲 -2023-5-5 (PDF和PPT内容相同,任选其一即可) DEAP 2.1是 数据包络分析(DEA)的常用软件。 该课件逐一讲解全部6个步骤。注重实操,并且包...
服务器数据恢复与使用注意事项是保障企业或个人...综上所述,服务器数据恢复和使用注意事项是一个涉及多个层面的复杂过程,需要综合考虑逻辑、物理和固件因素,并采取适当的预防和应对措施,以确保数据的安全和完整。
本文主要涵盖了电梯的基本操作和安全注意事项,包括电梯的构造、机房的操作、盘车操作、进出轿顶和底坑的程序,以及电气原理图分析。 一、电梯基本构造 电梯主要由八大系统构成:曳引系统、导向系统、轿厢、门系统...
本文将对滴定分析实验的流程、操作要领和注意事项进行详细的介绍,从仪器的检漏和洗涤到基准物质和试样的称量,最后到数据处理。 一、仪器的检漏和洗涤 滴定分析实验中,仪器的检漏和洗涤是非常重要的步骤。滴定管...
### Delphi编写DLL的注意事项 在使用Delphi进行DLL开发时,需要注意多个方面的问题,以确保DLL能够稳定、高效地运行。以下是一些关键的知识点: #### 1. 使用共享内存(ShareMem) 在Delphi中,如果需要在DLL与主...
电路板插件一般操作规范和注意事项.pdf
python对csv文件的操作、注意事项及详解(实际运行成功案例)
硬盘对拷,也被称为硬盘克隆,是一种将一个硬盘的所有数据和系统完整地转移到另一个硬盘...通过以上步骤和注意事项,你可以安全有效地进行硬盘对拷,实现数据迁移或系统升级。记得在操作过程中保持谨慎,避免数据丢失。
在我们享受LED电子屏带来经济效益的同时,一些拥有LED电子显示屏的商家并未完全懂得LED电子屏操作和使用注意事项,以导致缩短LED电子显示屏的寿命。文章为大家解析了LED电子显示屏操作和使用注意事项,以确保LED显示...
在使用MELSEC数据链接库之前,用户应仔细阅读本手册的安全注意事项,了解相关的安全风险和注意事项,以确保正确地操作和使用MELSEC数据链接库。在使用之前,用户应充分了解MELSEC数据链接库的功能、性能和编程步骤,...
mysql百万数据性能优化注意事项,日常性能优化,sql优化,索引优化。