1 背景
随着互联网的飞速发展,互联网的业务量呈爆发性增长,对于的数据量也迅速激增。传统的单机数据库在存储空间及性能的瓶颈,导致其将无法支撑企业业务的高速发展。伴随着海量数据对系统性能,成本以及扩展性的新需求,分布式数据库系统应运而生。sequoiadb作为是一款优秀的分布式文档型数据库,其底层基于分布式,高可用,高性能与动态数据类型设计的,能够应对海量数据的存储,及提供高效检索。
传统数据库可以利用分布式数据库的优势来缓解其自身的瓶颈。比如,将历史数据迁移到sequoiadb,由sequoiadb提供存储及业务服务,以缓解传统数据库自身的压力。数据迁移分为全量迁移和增量迁移,本文主要对mysql到sequoiadb的增量数据迁移过程进行分析。
2 场景介绍
本文将通过一个小案例来分析数据从mysql数据库抽取,并经由spark对数据进行清洗转换,最后装载到sequoiadb的迁移过程。
源数据mysql中有两张待迁移的数据表分别为student表和grade表,我们需要对grade表进行增量迁移,每次只迁移更新的数据;此外,我们需要一张由student和grade整合的大表,方便提供查询服务。
具体方案为先通过select ...... into outfile ......方式从mysql数据库中导出数据为csv格式文件,指定导出编码为gb18030(此处模拟银行数据编码),经由java将文件编码由gb18030转为utf8编码类型;然后,针对不同的数据,选择不同的导入的方式。对于增量的数据可以调用sdbimprt和sdbupsert工具结合的方式来导入到SDB集群中,对于需要额外加工处理的数据可以利用spark的RDD特性进行处理并加装到sequoiadb集群中。
3 数据迁移实现
数据迁移流程
3.1 mysql数据抽取
mysql导出数据可以使用mysqldump工具,也可用select into outfile的方式,此处使用
select into outfile
方式进行数据抽取,执行以下语句即可实现带条件抽取指定数据到指定目录下。其中参数 character 指定为 gb18030 编码, fields 分隔符为 "," , lines 分隔符为 '\n' 。select * from student where id < 51 into outfile '/data/hbh/student.csv' character set gb18030 fields terminated by ',' lines terminated by '\n';
select * from grade into outfile '/tmp/grade.csv' character set gb18030 fields terminated by ',' lines terminated by '\n';
在执行