在近几年做的很多项目里面,客户很在乎软件的的“信创”背景。
那么在做产品的时候,我们更多的要考虑数据库的开放性,去 IOE 已经搞了这么多年,这几年在一些行业的软件采购上更是在政策上大力支持国产化,提倡自主性。
软件国产化是必然趋势,新系统开发之初直接适配就可以,但是对于存量系统数据迁移常规就需要一些软件或者第三方工具。
今天呢,就给大家推荐一款阿里的数据库迁移工具,在Github上代码是开源,他就是---yugong(愚公)。
项目背景
2008年,阿里巴巴开始尝试使用 MySQL 支撑其业务。
开发了围绕 MySQL 相关的中间件和工具,Cobar/TDDL(目前为阿里云DRDS产品),解决了单机 Oracle 无法满足的扩展性问题,当时也掀起一股去IOE项目的浪潮,愚公这项目因此而诞生。
其要解决的目标就是帮助用户完成从 Oracle 数据迁移到 MySQL 上,完成去 IOE 的重要一步工作。
项目介绍
-
名称: yugong
-
译意: 愚公移山
-
语言: 纯java开发
-
定位: 数据库迁移 (目前主要支持oracle / mysql / DRDS)
整个数据迁移过程,分为两部分:全量迁移 和 增量迁移
过程描述:
-
增量数据收集 (创建oracle表的增量物化视图)
-
进行全量复制
-
进行增量复制 (可并行进行数据校验)
-
原库停写,切到新库
架构
方案设计
全量方案
业界常用的全量方案有:
-
数据文件导入/导出,比如EXPDP/IMPDP, mysqldump/source, xtrabackup等
-
ETL数据导入/导出,主要原理为使用JDBC数据查询接口
yugong在项目设计之初考虑去IOE数据迁移的灵活性和自定义能力,最终选择的方案为基于JDBC接口遍历数据.
相比于数据文件导入/导出,其优点:
灵活数据同步
支持异构数据
实现相对简单
缺点:
全量拉取需要配合增量使用,会有部分数据重复同步 性能和影响,一次性全量拉取,如果持续时间过长,如果此时数据库变更过多,会导致segment过大
增量方案
业界常用的增量方案有:
-
基于时间戳定时dump
-
oracle日志文件,比如LogMiner,OGG
-
oracle CDC(Change Data Capture)
-
oracle trigger机制,比如DataBus , SymmetricDS
-
oracle 物化视图(materialized view)
-
... yugong在项目设计之初考虑去IOE数据迁移的灵活性,支持多种oracle版本,同时为降低DBA的运维成本,最终选择oracle物化视图作为我们的增量方案.
优点:
-
原理简单,方便理解和学习,用户可以理解为一种固化的简易trigger模式
-
运维简单,DBA一次账户授权后,程序可按需create一张物化视图表即可完成增量订阅
-
相对透明,不需要像时间戳sql扫描依赖数据库表设计,也不需要关注oracle版本和服务器存储等缺点:
-
性能和影响,类似于trigger机制会对源库的数据写入造成一定的性能影响。
快速开始
当然了,官网也提供了很详细的使用说明。
小结
软件行业国产化的趋势不可避免,阿里的这款工具也可以帮助大家进行数据的转换。
当然了,现如今数据转换的工具选择也很多了,大家可以自由选择。对于阿里纯开源的这个工具,使用纯java开发,也是值得学习的。
写在最后(私活源码)
最近有一些读者问我有没有完整的基于Springboot+Vue的在线考试系统项目源码,今天给大家整理了一下,并且录制了搭建的教程,无偿分享给大家。
一、系统运行图
1、登陆页面
2、后台管理
3、全套环境资源
源码文件部分截图,带视频教程
源码免费领取方式
扫码关注本号,后台回复 考试
扫码关注本号,后台回复 考试
持续关注本号,分享更多项目源码
分享一些关于学习Java编程方面的经验
在实际工作中,开发Java项目是一项重要且常见的任务。为了帮助您更好地进行Java项目开发,本文将分享一些实践经验和技巧,以帮助您顺利完成项目。
1. 需求分析与设计
在开始项目之前,首先需要进行需求分析和设计。明确项目的目标和功能,并根据需求设计出合理的系统架构和数据库结构。这个阶段的工作对于后续的开发和测试非常关键,务必认真对待。
2. 选择合适的开发工具和框架
Java有许多优秀的开发工具和框架可供选择,如Eclipse、IntelliJ IDEA、Spring等。根据项目的特点和需求,选择适合的工具和框架可以提高开发效率和代码质量。
3. 模块化开发
将项目拆分成多个模块,每个模块负责一个特定的功能。通过模块化开发,可以提高代码的可维护性和复用性。同时,合理划分模块也便于团队协作和并行开发。
4. 使用版本控制工具
使用版本控制工具(如Git)管理项目代码是一个良好的习惯。通过版本控制,可以方便地进行代码的追踪、回滚和合并,同时也便于多人协作开发。
5. 编写高质量的代码
编写高质量的代码是每个开发者的追求。遵循编码规范,使用有意义的变量和方法命名,注重代码的可读性和可维护性。同时,及时进行代码的重构和优化,以提高代码的性能和可靠性。
6. 单元测试和集成测试
在开发过程中,及时编写单元测试和集成测试是保证代码质量的有效手段。通过测试,可以验证代码的正确性和稳定性,减少后期的调试和修复工作。
7. 持续集成与部署
借助持续集成工具(如Jenkins),实现自动化的构建、测试和部署流程。持续集成可以提高开发效率,减少人为错误,并确保项目的稳定性和可靠性。
8. 文档和知识管理
在项目开发过程中,及时编写文档记录项目的设计思路、开发过程和技术方案。同时,建立知识库或内部论坛,方便团队成员之间的交流和学习。
以上是关于Java项目开发的一些实践经验和技巧。希望这些内容对您有所帮助,祝您在实际工作中取得成功!