数据抽取问题

s478853630 2019-09-21 04:15:20
mysql数据库中的一张表有一千多万数据,要在1分钟之内抽取到oracle,并且每天自动抽一次(全删全插,也可以手动抽)
各位大佬,要用java实现这个需求,咋办?
...全文
369 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
s478853630 2019-10-13
  • 打赏
  • 举报
回复
引用 4 楼 ARong In CSDN 的回复:
1 查出所有数据
2 将数据划分为十块
3 每块数据中启动一个线程,采用批量插入的方式进行插入


你这个方案可行,多台机器多线程批处理,数据库内存扩容到128G,
经过1个多月的研究,抽取一百万数据不到半分钟了
yuanren_go 2019-10-04
  • 打赏
  • 举报
回复
学习了,有思想的帖子
s478853630 2019-09-29
  • 打赏
  • 举报
回复
引用 18 楼 小杰叔叔 的回复:
用kettle

已经试过了,太慢
进击的瓜牛 2019-09-29
  • 打赏
  • 举报
回复
用kettle
s478853630 2019-09-27
  • 打赏
  • 举报
回复
引用 5 楼 瘦死的黑骆驼 的回复:
1分钟感觉基本不可能啊,1000w的数据,如果是数据文件的话得有多大,传递这么大的数据量,io耗时可不是随便说说的


我们内部重新沟通过了,现在要求5分钟内完成,1分钟确实太悬了
雨中客888 2019-09-24
  • 打赏
  • 举报
回复
引用 13 楼 冬雪晶 的回复:
[quote=引用 11 楼 雨中客888 的回复:] [quote=引用 10 楼 冬雪晶 的回复:] [quote=引用 9 楼 雨中客888 的回复:] 1、用java代码实现绝对会超过1分钟,这个很稳。 2、编写脚本自动导出mysql数据,然后在自动imp导入oracle,一分钟仍然很难,尤其是你的数据是不是内容大(不是条数,是字段多少和字段内容大小)。 3、ETL工具实现数据抽取(我的实际项目中如果需要将A数据库的内容同步到B数据库,并同步频率很高,甚至是5分钟一次,在甲方允许的情况下,都会采用此种策略),但是千万的数据一次性同步,并没有遇到这种需求,因此题主可以看一看。
kettle能否实现? 如果不能,kettle全量抽取一千万要多久? 市面上有没有实现该需求的ETL工具?[/quote] kettle是可以实现这种需求,相关ETL工具都可以实现这种数据抽取的需求。 但是你说的1分钟时间,因抽取一千万数据我本人没有试验过,所以无从得知这一块具体时间。 你需要自己试试或者查阅一下相关ETL抽取大数据的一些效率对比,这个网上就有资料,就是各个ETL工具的一些效率对比。当然,一些付费的应该效率会更好一些。[/quote] 如果有现成的工具就能实现这个需求,那就太好了[/quote] http://f.dataguru.cn/thread-226498-1-1.html这里有部分ETL工具的效率性能等比较,里面有一些数据量和耗时,主要还是在耗时上,在不带索引的情况下,有望实现千万数据在一分钟左右。
s478853630 2019-09-24
  • 打赏
  • 举报
回复
引用 11 楼 雨中客888 的回复:
[quote=引用 10 楼 冬雪晶 的回复:]
[quote=引用 9 楼 雨中客888 的回复:]
1、用java代码实现绝对会超过1分钟,这个很稳。
2、编写脚本自动导出mysql数据,然后在自动imp导入oracle,一分钟仍然很难,尤其是你的数据是不是内容大(不是条数,是字段多少和字段内容大小)。
3、ETL工具实现数据抽取(我的实际项目中如果需要将A数据库的内容同步到B数据库,并同步频率很高,甚至是5分钟一次,在甲方允许的情况下,都会采用此种策略),但是千万的数据一次性同步,并没有遇到这种需求,因此题主可以看一看。


kettle能否实现?
如果不能,kettle全量抽取一千万要多久?
市面上有没有实现该需求的ETL工具?[/quote]
kettle是可以实现这种需求,相关ETL工具都可以实现这种数据抽取的需求。
但是你说的1分钟时间,因抽取一千万数据我本人没有试验过,所以无从得知这一块具体时间。
你需要自己试试或者查阅一下相关ETL抽取大数据的一些效率对比,这个网上就有资料,就是各个ETL工具的一些效率对比。当然,一些付费的应该效率会更好一些。[/quote]

如果有现成的工具就能实现这个需求,那就太好了
张蒙炬 2019-09-24
  • 打赏
  • 举报
回复
不可能滴 达不到你想要的要求的
瘦死的黑骆驼 2019-09-23
  • 打赏
  • 举报
回复
引用 7 楼 冬雪晶 的回复:
[quote=引用 6 楼 黑#猪 的回复:] 可以把mysql的数据生成insert语句另存为成一个sql文件,然后用oracle的imp命令导入。
这种方式能实现自动化麽[/quote] 调用系统命令啊,先把mysql的数据dump出来,然后再导入oracle,1分钟也搞不定的哇
s478853630 2019-09-23
  • 打赏
  • 举报
回复
引用 6 楼 黑#猪 的回复:
可以把mysql的数据生成insert语句另存为成一个sql文件,然后用oracle的imp命令导入。

这种方式能实现自动化麽
  • 打赏
  • 举报
回复
引用 7 楼 冬雪晶 的回复:
[quote=引用 6 楼 黑#猪 的回复:] 可以把mysql的数据生成insert语句另存为成一个sql文件,然后用oracle的imp命令导入。
这种方式能实现自动化麽[/quote] 可以实现。导出mysql的insert语句,mysql应该自带这种工具的,没有的话就自己写程序导。导入oracle是有imp命令的。
雨中客888 2019-09-23
  • 打赏
  • 举报
回复
引用 10 楼 冬雪晶 的回复:
[quote=引用 9 楼 雨中客888 的回复:] 1、用java代码实现绝对会超过1分钟,这个很稳。 2、编写脚本自动导出mysql数据,然后在自动imp导入oracle,一分钟仍然很难,尤其是你的数据是不是内容大(不是条数,是字段多少和字段内容大小)。 3、ETL工具实现数据抽取(我的实际项目中如果需要将A数据库的内容同步到B数据库,并同步频率很高,甚至是5分钟一次,在甲方允许的情况下,都会采用此种策略),但是千万的数据一次性同步,并没有遇到这种需求,因此题主可以看一看。
kettle能否实现? 如果不能,kettle全量抽取一千万要多久? 市面上有没有实现该需求的ETL工具?[/quote] kettle是可以实现这种需求,相关ETL工具都可以实现这种数据抽取的需求。 但是你说的1分钟时间,因抽取一千万数据我本人没有试验过,所以无从得知这一块具体时间。 你需要自己试试或者查阅一下相关ETL抽取大数据的一些效率对比,这个网上就有资料,就是各个ETL工具的一些效率对比。当然,一些付费的应该效率会更好一些。
s478853630 2019-09-23
  • 打赏
  • 举报
回复
引用 9 楼 雨中客888 的回复:
1、用java代码实现绝对会超过1分钟,这个很稳。
2、编写脚本自动导出mysql数据,然后在自动imp导入oracle,一分钟仍然很难,尤其是你的数据是不是内容大(不是条数,是字段多少和字段内容大小)。
3、ETL工具实现数据抽取(我的实际项目中如果需要将A数据库的内容同步到B数据库,并同步频率很高,甚至是5分钟一次,在甲方允许的情况下,都会采用此种策略),但是千万的数据一次性同步,并没有遇到这种需求,因此题主可以看一看。


kettle能否实现?
如果不能,kettle全量抽取一千万要多久?
市面上有没有实现该需求的ETL工具?
雨中客888 2019-09-23
  • 打赏
  • 举报
回复
1、用java代码实现绝对会超过1分钟,这个很稳。 2、编写脚本自动导出mysql数据,然后在自动imp导入oracle,一分钟仍然很难,尤其是你的数据是不是内容大(不是条数,是字段多少和字段内容大小)。 3、ETL工具实现数据抽取(我的实际项目中如果需要将A数据库的内容同步到B数据库,并同步频率很高,甚至是5分钟一次,在甲方允许的情况下,都会采用此种策略),但是千万的数据一次性同步,并没有遇到这种需求,因此题主可以看一看。
  • 打赏
  • 举报
回复
可以把mysql的数据生成insert语句另存为成一个sql文件,然后用oracle的imp命令导入。
瘦死的黑骆驼 2019-09-21
  • 打赏
  • 举报
回复
1分钟感觉基本不可能啊,1000w的数据,如果是数据文件的话得有多大,传递这么大的数据量,io耗时可不是随便说说的
程序员不鸣 2019-09-21
  • 打赏
  • 举报
回复
1 查出所有数据 2 将数据划分为十块 3 每块数据中启动一个线程,采用批量插入的方式进行插入
faith.huan 2019-09-21
  • 打赏
  • 举报
回复
很明确的告诉你办不到,oracle写入速度到不了10万每秒的级别
s478853630 2019-09-21
  • 打赏
  • 举报
回复
引用 1 楼 oh_Maxy 的回复:
这个有点难啊。。
java捞1000w数据,再插入到另一个库,我赌5毛钱,1分钟搞不定。。。
手动的话,要导出1000w的数据量文件,再导入到oracle,好像也无法1分钟搞定。。

只能提一些优化建议:
这1千万数据,不要在一个表里生成。
可以考虑分表,比如1000个分表,这样每个分表数据量只有1w。
同时,又可以使用java的多线程技术,并行处理提高效率。

另一方面,oracle那边的表,也不要堆一个表里,并且不要建索引,等数据导入完了,再建索引。

暂时想到这么多。


5毛钱会不会太少

源库是一个稳定的业务系统,分表是没有可能了,惆怅!
抽过来是可以,关键是打不赢时间仗
oh_Maxy 2019-09-21
  • 打赏
  • 举报
回复
这个有点难啊。。
java捞1000w数据,再插入到另一个库,我赌5毛钱,1分钟搞不定。。。
手动的话,要导出1000w的数据量文件,再导入到oracle,好像也无法1分钟搞定。。

只能提一些优化建议:
这1千万数据,不要在一个表里生成。
可以考虑分表,比如1000个分表,这样每个分表数据量只有1w。
同时,又可以使用java的多线程技术,并行处理提高效率。

另一方面,oracle那边的表,也不要堆一个表里,并且不要建索引,等数据导入完了,再建索引。

暂时想到这么多。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧