# dwh-soft
**Repository Path**: xiaoxustudent/dwh-soft
## Basic Information
- **Project Name**: dwh-soft
- **Description**: 用来存放dwh服务同步组件的程序包
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 7
- **Created**: 2025-05-10
- **Last Updated**: 2025-05-10
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# dwh-soft
#### 介绍
用来存放dwh服务同步组件的程序包
这是一款基于 mysql 数据库迁移或实时同步到 postgresql 的中间服务组件(可断网执行,安全隔离,无需外网接入,免费绿色软件)
该程序主要用于解决 mysql/mariadb 同步到 PG\Mysql\greenplum\cloudBerryDb 等场景的用途,目的是把PG当成读库来操作,全程自动化,类似于读写分离的效果

#### 软件架构
使用java开发的二进制程序包,基于web应用程序架构。
无需连接外网,可断网模式运行,本机启动即可运行的web应用程序包
类似于阿里云的 dts 数据同步服务(腾讯、字节跳动都有类似服务),也可以用于 mysql 数据不停机服务线下、线上的迁移和实时同步,或海外机房同步等,可节约大量资金
架构补充
前端框架采用的是MIT协议的 [pearAdmin UI](https://gitee.com/pear-admin/Pear-Admin-Layui)
后端框架采用 [quarkus](https://gitee.com/mirrors/Quarkus) 框架 + 数据操作组件 [edb](https://github.com/MrYang-Jia/edb)
#### 安装教程
##### 机器要求(1CPU + 100MB内存 极低要求即可使用!!!)
1cpu 100MB内存 即可启动 (建议一个任务预留50MB内存动态分配)
**亮点: 实践经验,我司线上生产单点服务,10分钟内同步最多的批量数据是 2千万以上数据量,10分钟内使用批处理的同步模式完成,无1缺失,多字段完美同步,内存仅仅消耗100MB以内,无内存泄漏
**
##### 绿色软件直接启动,无需任何配置和限制
windows
```properties
# 下载 dwh-1.2.3-windows.zip 解压后,放到您指定的目录下启动即可
# 如果需要修改默认端口号,则需要通过 cmd 或 linux控制台指定端口号(Dquarkus.http.port) , 否则直接启动即可
# 默认端口访问地址: http://127.0.0.1:11306/dwh/login
./dwh-1.2.3.exe -Dquarkus.http.port=11306
```
linux centos7(推荐)
```properties
# 建议使用 centos7 或以上版本
# 下载 dwh-1.2.3-linux.zip 解压后,放到您指定的目录下启动即可
# 设置文件为可启动文件
chmod 777 ./dwh-1.2.3
# 使用screen后台模式 - 也可不需要,直接后台模式挂起非jobs模式也可保持持续运行
yum -y install screen
# 启动一个窗口
screen -S dwh
# 启动服务(无需后台挂起 ctrl+z ,然后后台模式 bg ,建议直接 【 nohup bg %1 & 】 或 移除jobs队列 【 disown %1 】)
./dwh-1.2.3 -Dquarkus.http.port=11306
# screen会话中:快捷键 ctrl+a+d ,退出会话,将会话切换到后台运行,这样子退出sshd控制台时,服务能正常运行,不影响服务的运行
# 打开登录页面 http://127.0.0.1:11306/dwh/login
```
##### 登录页面地址 (端口号可改)
浏览器打开> http://127.0.0.1:11306/dwh/login
##### 初始账号密码
初始化admin账号密码(可修改): dwh/123456
#### 使用说明
软件请放心免费使用,至于使用年限限制,只是为了限制被人售卖的问题
首次使用时,输入初始化账号密码: dwh/123456 ,
然后打开【数据同步】-【任务管理】,点击【创建任务】创建迁移同步任务即可
第一次使用时,直接迁移测试用的小数据库,然后点击同步即可。
当然,如果您熟悉了这套软件,也可以直接用于生产迁移数据,但是建议是从有读写分离的负载库上迁移,减少数据库的影响
同时也支持,您自己手工指定对应的 binlog 日志节点,进行指定数据同步
[dwh mysql同步软件介绍](https://mp.weixin.qq.com/s?__biz=MjM5MTY2MjcxMQ==&mid=2247483659&idx=1&sn=d0a1b3a57d698b8f901646fad0bda89d&chksm=a6b3561391c4df05b74a71ffce1fbdd15f0dcb6dca9995e407c10d5e65667bf805051e539f79)
[软件使用讲解](https://www.bilibili.com/video/BV1zj421X7ni/)
[dwh同步软件使用教程-图文](https://mp.weixin.qq.com/s?__biz=MjM5MTY2MjcxMQ==&mid=2247483684&idx=1&sn=ea48be3562ac9369ce7abacd6de2263d&chksm=a6b3563c91c4df2a31f63c823bd4f40ad5ef3e627b6446230756843aa7983f8e518265d8de6d)
#### 参与贡献
因为刚开始,所以短期内可能不会有太大变动的内容,有紧急诉求的伙伴,可以通过公众号单独在后台留下联系方式,我看到后会及时联系
[公众号](https://mp.weixin.qq.com/s?__biz=MjM5MTY2MjcxMQ==&mid=2247483659&idx=1&sn=d0a1b3a57d698b8f901646fad0bda89d&chksm=a6b3561391c4df05b74a71ffce1fbdd15f0dcb6dca9995e407c10d5e65667bf805051e539f79)
#### 特技
mysql 无人值守全量全库自动同步到Postgresql数据库,实现异构数据库读库功能
mysql 实现数据迁移、同步到 mysql、mariadb、postgresql、greenplum、cloudBerryDb、kafka等数据存储点
一键增加Mysql常用兼容函数 if、ifnull、group_concat、find_in_set、sysdate()、date_format
ps: kafka 模块没有经过严格验证,后续我再完善下,其他模块都是经过了百分百的时间论证过的结果,总耗时5年左右完成的稳定异构数据库同步,目前这个版本是第三代版本,所以实际上还有很多同步模块的功能并没有实现,但是这个工具的价值就在于异构数据库的同步,有其他诉求的可以留言,有场景化了,才继续延申扩展
#### mysql 数据类型支持

#### greenplum / cloudBerryDb 特殊说明
由于 cloudBerryDb 是基于 greenplum 的一些基础版本规则构建的,所以两者可以认为是等同的分布式数据库,其中 cloudBerryDb 底层是PG14版本,优于GP6,测试性能比GP6高7倍以上
目前同步时,默认以 mysql 的主键表位主键进行分布式hash键值分布,如果同步时也同步索引,则自动构建基于主键的分布式索引
如果修改主键时,会自动构建新的分布式键,但是原索引会全部移除,因为所有的索引是依照主键去构建的,然后再重新迁移节点数据
如果是无主键的表,则会使用hash随机分布节点数据
特别说明,如果需要使用gis数据类型的,需要额外安装相关 postgis 库的插件,尤其是分布式数据库 cloudBerryDb 对应的库为 [cloudberrydb_gis](https://github.com/cloudberrydb/postgis)
#### 若依系统怎么迁移到PG/greenplum/cloudBerryDb上?
具体信息可以参考当前目录底下的 【若依加速PG版文件/README.md】
#### 部分软件截图
> ##### 登录页(后续可能会移除时间限制)

> ##### 首页
> 

> ##### 系统损耗监控
> 
> ##### 同步功能页

2024-10-19 增加表单类型的配置页,方便用户快速配置同步任务
> ##### 导入功能页


> ##### 导入管理
###### 导入时,极端情况下发生的异常界面显示如下

###### 正确处理导入异常的功能模块,快速对齐导入,避免停电、异常中断时如何快速处理问题的解决能力
【库表对齐】 -> 【重导所有未完成表】

> ##### 同步功能属性项
###### 主打一个省心、智能,自动将同类型数据迁移同步到第三方库
```
1、自动全库全表数据同步
2、可配置ETL同步信息覆盖自动功能
3、可过滤DDL操作功能
4、可过滤DML写入操作,例如过滤delete,持续保留历史数据
5、避免一些特殊原因导致数据丢失,例如更新失败时转数据插入,做数据补全
6、支持批量写入、更新、删除等操作
7、支持中断同步时自动提醒功能
8、pg11以上版本同步时,支持后台模式并行构建索引
9、支持库表字段小写转写功能,从而支持异库库表字段忽略大小写的查询能力
10、支持 binlog 或 gtid 两种同步方式,推荐 gtid 同步模式,适合运维管理和数据回放
```

> ##### 系统告警通知功能
##### 支持 钉钉BOT、微信BOT、Http接口调用、阿里云短信、邮件通知等方式

> ##### 异常定位

> ##### 断网自动重连

2024.10.19 断网自动重连功能,发现如果是io异常时,则会自动重连,间隔3分钟,如果有设置告警提醒,则会再每间隔5次则会发送一次告警信息进行推送
#### 可关注公众号私信

#### 重要补充说明,因为每次上传新的包,这个空间会越来越大,所以会不断删库,重新创建库然后上传版本包,避免大家下载的时候项目太大
#### 历史更新记录
2024-11-25
1、修正binlog包因为网络问题,可能导致的数据丢失问题,直接断开,重新同步即可
2、修正源表结构无法自定义添加的问题,因为某些情况下,同步断开很久,导致线上的表结构信息无法对上,需要手工维护映射,以便当前节点能正常同步
2024-11-30
1、修复创建任务时,任务编码为空未进行校验的bug
2、调整断线重连为10次一次提醒
2024-12-05
1、修正可运行列表的任务里表结构缓存无法刷新的bug
2025-01-22
1、增加导入管理页面的纠错比对导入表的功能,并允许异常表一键重导功能
2、修复同步数据时,如果是mysql库同步,出现主键键值修改的情况下,导致数据更新报错的问题。(postgresql模式下无影响,主要是 ` 字符和 " 字符操作影响)
2025-04-26
1、修复set、enum类型数据同步问题
2、修复无符号bigint同步到pg时,超出bigint最大值时无法继续同步的问题
3、修复每分钟新增、修改、删除大批量数据,例如百万数据的情况下,可能性死锁的问题,同时极大提高同步速度,修复了同表死锁的问题点
4、调整内部实现逻辑,优化同步速度,使用 虚拟线程、异步线程锁、异步原子锁释放等手段提高写入、并行更新的速度