异构数据源迁移核心部分代码Mysql到Apache Ignite|VoltDB
最后更新:2025-07-02 23:32:15
|
状态:未完成
异构数据源迁移,大概过程就3步,其他细节就看具体情况了
1.在目标库创建表结构
2.从源库中查出数据
3.插入到目标库
举个从Mysql到Apache Ignite的示例,服务部署参考【Apache Ignite安装部署】【VoltDB编译安装部署】
过程中有可能需要合并数据参考,可以通过ConfigStore.override(true)实现【目标库不存在则插入,存在则覆盖或跳过】
配置文件
Java
1.在目标库创建表结构
2.从源库中查出数据
3.插入到目标库
举个从Mysql到Apache Ignite的示例,服务部署参考【Apache Ignite安装部署】【VoltDB编译安装部署】
过程中有可能需要合并数据参考,可以通过ConfigStore.override(true)实现【目标库不存在则插入,存在则覆盖或跳过】
配置文件
1 2 3 4 5 6 7 8 9 10 | anyline.datasource-list=data,ignite,volt spring.datasource.data.driver-class-name=com.mysql.cj.jdbc.Driver anyline.datasource.data.url=jdbc:mysql: //localhost :3306 /data ?useUnicode= true &characterEncoding=UTF8&useSSL= false &serverTimezone=Asia /Shanghai &allowPublicKeyRetrieval= true anyline.datasource.data.username=root anyline.datasource.data.password=root anyline.datasource.ignite.driver-class-name=org.apache.ignite.IgniteJdbcThinDriver anyline.datasource.ignite.url=jdbc:ignite:thin: //127 .0.0.1:10800 anyline.datasource.volt.driver-class-name=org.voltdb.jdbc.Driver anyline.datasource.volt.url=jdbc:voltdb: //127 .0.0.1:21212 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | //复制mysql表结构到ignite public static void init(String table) throws Exception{ //检测一下ignite中有没有这个表 Table tab = ServiceProxy.service( "ignite" ).metadata().table(table, false ); if ( null != tab){ ServiceProxy.service( "ignite" ).ddl().drop(tab); } //获取mysql表结构 tab = ServiceProxy.service( "data" ).metadata().table(table, true ); //根据情况修改一下库名模式名,以及一些默认值约束等,能满足业务需求即可,再讲究一点的话把不需要的列都删除(修改完后注册查询删除时需要明确指定一下列名) tab.setSchema( "PUBLIC" ); tab.getColumn( "REG_TIME" ).setDefaultValue( null ); tab.getColumn( "UPT_TIME" ).setDefaultValue( null ); //创建ignite表 ServiceProxy.service( "ignite" ).ddl().create(tab); } //复制mysql数据到ignite public static void load(String table){ Long max = 0L; //检测最后一条数据 DataRow last = ServiceProxy.service( "ignite" ).query(table, "ORDER BY ID DESC" ); if ( null != last){ max = last.getLong( "ID" , 0 ); } while ( true ){ //从mysql中查出数据 这里不要用DataSet 太慢 List<Map> list = ServiceProxy.service( "data" ).maps(table, 0 , 999 , "ID>" +max); if (list.isEmpty()){ break ; } //插入到ignite 一般需要修改一下默认日志(不显示日志)要不然日志太多 //override表示重复数据不覆盖(忽略|跳过) ConfigStore configs = new DefaultConfigStore().IS_LOG_SQL( false ).IS_LOG_SQL_PARAM( false ).override( false ); ServiceProxy.service( "ignite" ).insert(table, list, configs ); max = BasicUtil.parseLong(list.get(list.size()- 1 ).get( "ID" ), 0l); } } |
复制表结构过程中,数据类型会自动转换,内置变量有可能不识别,需要调整
生成SQL不执行参考【返回SQL方言以及SQL日志】
数据量太大参数【流式查询】【批量操作】
增量数据参考【upsert】