前段时间,项目组有需求需要对一个千万级的表进行数据同步,目标并不复杂,将用户的一张表数据同步到我们自己的数据库中,当然,中间需要关联几张自己的表数据。
一开始,客户考虑到安全等因素,只提供数据表导出的csv文件,大小约为700多M,数据量1200w。LZ脑子一热,不假思索使用spring+ibatis开始搞起了代码,一个小应用大概用了一上午编写完毕,当时LZ为自己的小成就还沾沾自喜。但在当天下午的实际测试时,LZ被着实打击了一番,系统根本支撑不下去,本机测试数据量达到100多W的时候,系统内存溢出,LZ试图增加环境变量,增加内存配置,数据在达到200w的时候,已经占用系统全部内存,LZ怀疑是自己的笔记本不给力,将代码部署到linux主机,开始使用默认最大2G内存,跑出来的效果和笔记本相当,没有内存溢出,程序直接假死。LZ主动将内存配置改为最大配置16G,想碰碰运气,系统最终在700W当口败下阵来。
LZ没有气馁,想到了折中的办法,一次性加载数据吃不消,我就拆开了加载,每次加载10W条数据,看到数据一条条的入到数据库里,LZ很是欣慰,当时临近下班,LZ将程序部署linux后让它后台执行,打算第二天早上看执行结果。第二天的结果让LZ哭笑不得,13个小时,愣是没跑完,数据还在蜗牛般爬行,在程序运行了16个小时后,1200w数据终于入库完毕。
功能完成了,但是同步效率奇差,肯定无法满足客户需要。LZ开始怀疑ibatis的性能问题了,都说ibatis是JDBC封装而来的,性能势必会有损耗。LZ花了个把小时把代码改造了一番,重新部署一番后开始了第二轮测试,结果还是有进步的,很明显,数据同步的速度有所加快,但是依然不能让人满意,LZ测算了一下跑完程序依然要8-9个小时。
程序一边跑,LZ已经开始琢磨新的思路,自然而然想到的当然是多线程,没错,单一线程执行确实还是太慢了,LZ打算使用JDK的线程池,线程数量20个,每个线程数据量10W左右,程序最大内存2G,这样程序实时数据200W,当然由于使用了spring加载properties,所有参数都改为了可配置,根据部署环境的大小进行调配。到这个时候LZ也发现一个问题,由于数据源并非来自表结构,而是csv文件,想要多线程读取数据有些麻烦,且如果出现错误不方便定位数据位置。LZ最终牺牲了程序启动后的3分钟时间,将1200W条数据大小总量700M的csv文件,拆分成120个,每个6,7M大小的小文件,再使用多线程进行操作入库。部署linux环境后进行了第三轮调试,80分钟即可跑完程序,性能已经完全达到客户要求范围,将内存调整为最高16G以后,40分即可跑完程序,不过为了linux单板不挂机,安全考虑还是使用最高2G内存。
LZ不敢自诩自己的思路和做法是最好的,或许有人可以把效率提高到半个小时甚至10分钟也说不准,但是通过这个需求的持续改进和最终的结果,LZ想让大家明白,想法永远比技术本身值钱,活学活用才能有创新和突破,程序可以改变世界,只要你肯动脑筋。
相关推荐
XXXKETTLE全量多表数据同步 1 一. 建立资料库 3 1.1 添加资源库 3 二. 前期准备工作 7 2.1 异结构数据传输 7 2.2 数据校验 9 三. 建立转换 10 3.1 创建‘转换’(GET—ORACLE-TABLES) 10 3.1.1 创建数据源 10 3.1.2...
大数据ETL同步工具演示教程
铁路站车Wi-Fi运营服务系统大数据文件同步的研究与实现.pdf
该文档是根据真实项目,搭建的一套OGG实时同步oracle数据到kafka集群,文档主要介绍OGG的安装和进程配置。文档最后附带整个数据处理的流程图。
sqlserver 数据同步 mysql 实现数据库的实时更新
mybatis,mysql,maven,springboot,springsecurity,rabbitmq,solr,dubbo,zookeeper,同步与异步 前后端交互; 代码部署: mysql8.7,rabbitmq,solr,zookeeper运行于 wsl2 ~fedora35, idea2019 ~jdk8 sql表为常用的dept
时间同步有两种方法,这里选用更优的方法2. 1. 使用crontab命令使得mini2和mini3同步mini1的时间 2. 使用ntp进行同步,而ntp更精确! 一共三台机器: mini1 192.168.117.81 mini2 192.168.117.82 mini3 192.168....
我感觉很不错的宝贝,现在和大家分享,希望能够帮到大家,如果你需要可以下载看看,很适合喜欢研究技术的人员
NIFI1.21.0_大数据同步处理模板_MysqlToMysql增量同步_单表_处理日期_空值数据.zip 是作者自己实际项目中用到的,自己学习后制作的NIFI流程模板文件,导入后可以直接使用, 实现了Mysql到mysql数据库的增量CDC数据的...
大数据平台搭建中时间同步需要的文档,可以在ambari中使用通过
1-1+万亿级大数据同步中台设计和优化.pdf
mongo和大数据同步工具,Mongo同步数据到Hive;Hive同步数据到Mongo中。 即使Mongo中没有建立索引,速度以然不受影响。 如何使用 导入(import) 当增量导入mongo时,可以配置--mongo-import-condition参数, 当以...
MAC用户不可不知的两大数据同步方法.docx
基于大数据同步平台的可靠性监控方法_装置_设备.pdf
基于 go-zero 构建的 ClickHouse 的大数据数据同步、存储、计算系统。 ClickHouse Data System 基于 go-zero 构建的 ClickHouse 的大数据数据同步、存储、计算系统。 系统架构 下图展示了以clickhouse为存储和...
通常情况下,我们需要规定原业务系统表增加两个字段:创建时间、更新时间(或者⾄少⼀个字段:更新时间) 数据同步主要可以分为三⼤类:直连同步、数据⽂件同步、数据库⽇志解析同步 1.直连同步 通过规范好的接⼝和...
当然了,目前对于开源的Kettle和Talend本身,也集成了大数据集成内容,可实现hdfs,hbase和主流Nosq数据库之间的数据同步和集成。 网络数据采集:一种借助网络爬虫或网站公开API,从网页获取非结构化或半结构化数据...
1.1 云计算的概念 由于云计算是由不同的企业和研究机构同步推进的技术,所以关于云计算的定义有很 多,至今并没有一个公认的定义和标准。 结合国际 20 位专家的定义,Ian Foster 定义云计算为一个由规模经济驱动的...
Alluxio的元数据同步:设计,实现与优化 分布式KV存储系统Apache Pegasus的应用与实践 大数据调度平台 数据服务化在京东的实践 数据中台大数据任务调度系统的实践 增量数仓的探索与实践 实时数仓的场景剖析与架构...
项目中需要的整理出来给需要的宝子们,实现了在大数据场景中,实时同步指定MySql数据源的数据,实时同步到SqlServer数据库中去. 下载以后使用的时候,需要配置一下自己的mysql数据源的用户名,密码,ip地址端口号信息,...