首页 新闻 会员 周边

大数据量的处理问题

0
悬赏园豆:20 [待解决问题]

各位新年快乐:
我遇到了这样一个需求:
几千万条的数据做更新或新增到A表,被更新的原始数据存储到B表,并且B表不能有重复数据 。 各位,请问怎么做最好啊 ?可以谈谈自己的看法吗?请抛砖引玉。

数据库是SQL SERVER。

非常感谢。

ztxily的主页 ztxily | 初学一级 | 园豆:182
提问于:2020-01-31 00:53
< >
分享
所有回答(4)
0

方案1:如果从数据库上考虑
1、A表加触发器,A表发生更新或者新增前,先将旧数据插入B表;
2、B表增加唯一索引,保证插入的数据唯一性;
缺点:DB由DBA维护;增加触发器,会导致项目维护难度增加。
优点:实现简单,上层不需要做改动;

方案2:A表批量更新和新增,B表批量插入
前提:A表创建索引
1、有几千万数据增加或者新增,每一次拿1000条(一批次),拿这1000条数据分别查一下A表(每一条数据是否需要更新或者新增到A表);
2、查的时候直接取出来,如果A表有数据,就将取出的数据暂存;或者需要新增到A表,也同样暂存;
3、一个批次(1000条)处理完后,将暂存的数据(需要新增或者更新到A表的数据)插入到B表;
4、将一个批次的数据插入或者更新到A表;
优点:批量更新,耗时相对较少;
缺点:串行操作,耗时将对较高;
建议:B表插入可能会重复,可以使用insert ignore......

方案3:优化方案2,增加消息队列
方案2的缺点是串行操作,那么就可以将其改为并行,使用消息队列(MQ),比如Kafka

寻觅beyond | 园豆:923 (小虾三级) | 2020-01-31 11:14
0

用 kafka 和 hadoop

ycyzharry | 园豆:25651 (高人七级) | 2020-01-31 15:10
-1

用程序写一个呗. 这种的你用c# 或者 vb.net都可以.

风中的雪糕 | 园豆:418 (菜鸟二级) | 2020-02-01 16:19
0

同意一楼的方案一,业务复杂维护相对也会变复杂

fuyouqiang | 园豆:206 (菜鸟二级) | 2020-05-22 16:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册