`

关于“海”量数据的操作的一些坑和注意事项

阅读更多
关于“海”量数据的操作的一些坑和注意事项


一、前提


    说海量数据,其实不算,只是每天大概入库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的查询,线程的控制 等等,非常感谢有这样的一个机会去锻炼学习,谢谢 以后再接再厉

分享到:
评论

相关推荐

    SQL编程注意事项

    在SQL编程中,有很多细节和最佳实践需要注意,以确保数据的准确性和查询的高效性。以下是一些关键知识点,它们涵盖了标题"SQL编程注意事项"所提及的要点。 1. NULL值处理:在SQL中,NULL表示未知或无值,与0、空...

    那些年我们一起踩过的坑(二)关于uniapp开发钉钉小程序真机和模拟器传输的数据格式不同以及一些注意事项

    今天来分享一下关于uniapp开发钉钉小程序真机和模拟器传输的数据格式不同以及一些注意事项。 前些日子我遇到一个问题,钉钉模拟器上能显示数据,真机上却不能显示数据,小程序我已经开发了好几个,但是都是在小程序...

    电脑使用十大注意事项

    在日常使用电脑时,我们需要注意一些重要的事项,以确保电脑的正常运行和长寿命。下面是十大注意事项,帮助您避免一些常见的电脑问题。 1. 数据备份:备份策略和驱动外壳是非常重要的。我们可以使用 Ghost 软件对...

    氧割 减压器 安全操作规程和注意事项-OK

    氧割 减压器 安全操作规程和注意事项-OK氧割 减压器 安全操作规程和注意事项-OK氧割 减压器 安全操作规程和注意事项-OK

    自控系统电仪操作注意事项

    唐山三鹿乳业有限公司锅炉房的自控系统电仪操作人员在检修时需遵循一系列详细的操作步骤和注意事项,以确保系统的稳定运行和设备的安全。 首先,针对模拟量系统,如压力、流量、液位等传感器数据的输入显示异常,应...

    指挥信号工的安全操作和注意事项(通用版).pdf

    指挥信号工的安全操作和注意事项(通用版).pdf

    旺铺操作说明和注意事项.doc

    旺铺操作说明和注意事项.doc

    数据可视化工具的选型注意事项.pdf

    数据可视化工具的选型注意事项.pdf数据可视化工具的选型注意事项.pdf数据可视化工具的选型注意事项.pdf数据可视化工具的选型注意事项.pdf数据可视化工具的选型注意事项.pdf数据可视化工具的选型注意事项.pdf数据可视...

    NC系统合并报表操作流程与注意事项.doc

    NC 系统合并报表操作流程是指在 NC 系统中进行合并报表时需要遵循的步骤和注意事项。本文档旨在指导操作人员正确地进行合并报表操作,确保报表的准确性和完整性。 一、个别报表 1.1 个别报表登入 在 NC 系统中,...

    更新数据包络分析软件DEAP 2.1的操作步骤和注意事项课程PPT-北京交通大学魏炜教授

    【最新】DEAP 2.1的操作步骤和注意事项课程PPT-北京交通大学魏炜教授主讲 -2023-5-5 (PDF和PPT内容相同,任选其一即可) DEAP 2.1是 数据包络分析(DEA)的常用软件。 该课件逐一讲解全部6个步骤。注重实操,并且包...

    joson-1.rar_anomaly_海面_海面高度_海面高度异常

    “readme8.pro”和“readme8.txt”、“readme 8.txt”通常是项目说明文件,可能包含了关于数据来源、处理方法、代码使用的编程语言、运行程序的步骤、注意事项、作者信息等详细说明。它们是用户理解和使用源程序的...

    服务器数据恢复及使用注意事项说明[定义].pdf

    服务器数据恢复与使用注意事项是保障企业或个人...综上所述,服务器数据恢复和使用注意事项是一个涉及多个层面的复杂过程,需要综合考虑逻辑、物理和固件因素,并采取适当的预防和应对措施,以确保数据的安全和完整。

    电梯基本操作与安全注意事项.doc

    本文主要涵盖了电梯的基本操作和安全注意事项,包括电梯的构造、机房的操作、盘车操作、进出轿顶和底坑的程序,以及电气原理图分析。 一、电梯基本构造 电梯主要由八大系统构成:曳引系统、导向系统、轿厢、门系统...

    delphi写dll注意事项

    ### Delphi编写DLL的注意事项 在使用Delphi进行DLL开发时,需要注意多个方面的问题,以确保DLL能够稳定、高效地运行。以下是一些关键的知识点: #### 1. 使用共享内存(ShareMem) 在Delphi中,如果需要在DLL与主...

    2018.4数据结构实验报告的注意事项

    实验一:线性表的顺序存储 实验二:线性表的链式存储 实验三:栈子系统 实验四:队列子系统 实验五:串子系统 实验六:二叉树子系统 实验七:图子系统 实验八:查找子系统

    python对csv文件的操作、注意事项及详解(实际运行成功案例)

    python对csv文件的操作、注意事项及详解(实际运行成功案例)

    硬盘对拷注意事项

    硬盘对拷,也被称为硬盘克隆,是一种将一个硬盘的所有数据和系统完整地转移到另一个硬盘...通过以上步骤和注意事项,你可以安全有效地进行硬盘对拷,实现数据迁移或系统升级。记得在操作过程中保持谨慎,避免数据丢失。

    操作LED电子显示屏注意事项

    在我们享受LED电子屏带来经济效益的同时,一些拥有LED电子显示屏的商家并未完全懂得LED电子屏操作和使用注意事项,以导致缩短LED电子显示屏的寿命。文章为大家解析了LED电子显示屏操作和使用注意事项,以确保LED显示...

    mysql百万数据性能优化注意事项.txt

    mysql百万数据性能优化注意事项,日常性能优化,sql优化,索引优化。

Global site tag (gtag.js) - Google Analytics