异构数据源迁移核心部分代码Mysql到Apache Ignite|VoltDB
最后更新:2024-06-24 14:44:10
|
状态:未完成
异构数据源迁移,大概过程就3步,其他细节就看具体情况了
1.在目标库创建表结构
2.从源库中查出数据
3.插入到目标库
举个从Mysql到Apache Ignite的示例,服务部署参考【Apache Ignite安装部署】【VoltDB编译安装部署】
过程中有可能需要合并数据参考,可以通过ConfigStore.override(true)实现【目标库不存在则插入,存在则覆盖或跳过】
配置文件
1.在目标库创建表结构
2.从源库中查出数据
3.插入到目标库
举个从Mysql到Apache Ignite的示例,服务部署参考【Apache Ignite安装部署】【VoltDB编译安装部署】
过程中有可能需要合并数据参考,可以通过ConfigStore.override(true)实现【目标库不存在则插入,存在则覆盖或跳过】
配置文件
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:21212Java
//复制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】