如何快速处理数据库中大量数据
本篇内容主要讲解“如何快速处理数据库中大量数据”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何快速处理数据库中大量数据”吧!
创新互联公司致力于互联网品牌建设与网络营销,包括成都做网站、网站制作、SEO优化、网络推广、整站优化营销策划推广、电子商务、移动互联网营销等。创新互联公司为不同类型的客户提供良好的互联网应用定制及解决方案,创新互联公司核心团队10余年专注互联网开发,积累了丰富的网站经验,为广大企业客户提供一站式企业网站建设服务,在网站建设行业内树立了良好口碑。
背景
将数百张数据结构相同的表(用Tn代表),合并至一张表(用C代表)
T表数据量分布很不均衡,少至一位数,多至几十万
T表间没有业务关联
C表结构在T表结构的基础上增加了几个字段,无法使用INSERT INTO (SELECT * FROM)
数据总量约300万,经单进程测试,处理速度约500/s,预估耗时约100min
目标
最大化提升数据处理速度,将耗时降至10min左右,此时C表的写入速度约5000/s。
方案演进
方案一
因为T表间没有业务关联,所以每张表都可以单独处理。
将T表按数据量排序,每个进程处理N张表,尽量平衡各进程的负载。
存在的问题:T表的数据量分布极为不均衡,有几张表数据量在70万左右,最终耗时约为(70万/500)s,瓶颈问题严重。
方案二
在 方案一的的基础上,以 表+数据的维度做并行处理,可以解决大表瓶颈问题。
存在的问题:代码实现较复杂,需要考虑
每张T表的数据量
对大数据量的T表进行分割
避免数据重复处理
方案三
借助 redis 的 pub/sub 机制,实现生产和消费的分离。
生产端负责将T表的 表名+ID均衡发布至不同的channel,channel数量和进程数一致。
消费端每个进程订阅不同的channel,读取表名+ID,将表名+ID对应的数据写入C表。
方案四
是方案三的变体,借助 Redis 的 List,实现生产和消费的分离。
生产端负责将T表的 表名+ID写入List
消费端读取List,将 表名+ID 对应的数据写入C表。
本方案相比 方案三的优势在于代码逻辑比较简洁,生产端和消费端均不需要做负载均衡。消费端能者多劳,多个消费进程同步完成作业。
实现细节
最终采用方案四。
生产端
依次读取T表数据,将 表名+ID 写入List。需要注意List支持批量写入,每次写入100条数据,写入速度约50000/s。
消费端
单个进程的消费速度约300/s,起10个消费进程,处理速度可以达到约3000/s。如果数据库的写入速度允许,可适当增加消费进程数量。
到此,相信大家对“如何快速处理数据库中大量数据”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
分享文章:如何快速处理数据库中大量数据
本文地址:http://scyanting.com/article/jiiopd.html