数据交换平台的需求总结与初步设计
来源:互联网 发布:阿里云华北2速度怎样 编辑:程序博客网 时间:2024/05/16 14:18
一、 需求总结
功能性需求:
1、 从某时刻开始,转储某些特定的表。开始时间、时间频率、表字段、源表和目的表执行前后sql语句等数据可配置。
2、 转储频率可以自由设定,时间精确到秒级,任务精确到表。
3、 满足多个表捆绑在一起,按既定的先后顺序执行。避免由于数据不一致性给后续工作带来的影响。
4、 实时控制每一个表是否转储,暂停或开始。并且不影响其他数据表转储。
5、 转储过程中,可以按照既定的配置,对某个或某些字段进行加密或解密。
6、 各个表的转储要求互相独立,互不影响。
7、 源数据库和目的数据库均支持mysql和oracle,留接口扩展其他数据源。
8、 添加一个表的转储工作,要求只修改配置数据,不修改软件代码,或重启软件。(测试手段 配置数据是否完整,执行测试结果)
9、 对各个数据库的操作,只使用链接,保证db账号密码的安全不泄露。
10、 支持程序参数,只执行某个任务号下的某个或某些表的转储工作。
11、 转储表结束后,记录日志到配置数据库proc_use_times表,方便开展后续工作。(添加为可配置)
12、 实时监控表转储情况,并且,需要向技术人员下发每日提醒短信。(转储程序生成转储提醒日志,监控程序解析日志,并下发短信)
13、 软件日志记录全面准确,方便维护人员查阅和排错。
性能需求:
14、 数据实时交换平台的定位,是业务流转的一部分。对业务来讲,是承上启下的一部分,以数据准确为根本原则。数据定时转储的定位,是数据备份、数据统计分析的一部分。
15、 对实时转储工作的完成,要求准时、准确、高效、稳定,容错性能高。
16、 错误处理机制完备,尽可能减少对业务的影响。
# 上线前,完成大数据量测试和各种功能测试,尽可能减少上线后问题的出现。
# 实时转储过程中,如果某任务转储失败,则保留处理现场,并立刻通知相关人员处理。当前任务不再继续执行。
二、数据库设计
源表要求:
字段1
。。。
字段N
sync_status
扩展一个控制字段sync_status,协助实时转储使用。
sync_status:默认值为0。
0表示未转储,1表示转储中,2表示转储成功,3表示转储失败。
三、软件设计
A. 各模块功能简单介绍:
控制进程 -- 取配置数据,初始化共享内存,管理多个任务进程。
任务进程 – 通过共享内存与控制进程通信。ssync2o、ssync2m(控制进程fork出任务进程)
写入进程 – 由任务进程fork产生。写入目的库完成后退出(最多10个)。
共享内存 – 执行时动态数据、任务详细参数
配置数据库 – 配置数据所在数据库
源数据库 – 源数据表所在数据库
目的数据库 – 目的数据库所在数据库
进程守护脚本 – 守护控制进程。在控制进程异常时,将其启动,并报警。1分钟检查一次。
日志打包脚本– 每天凌晨打包昨天日志并转移。打包后的日志只保存最近3个月。
任务监控进程– 通过读取共享内存,整理每天转储简报,通知相关同事。
任务实时数据展示程序– 通过共享内存,实时展示任务执行情况,或查看历史任务执行情况。
退出程序 – 控制信号灯,达到退出控制进程的目的。
数据库连接池维护进程– 以启动进程的方式,为本操作系统的应用进程提供连接数据库服务。达到统一管理,最优化分配资源的目的。(先期考虑使用lib文件,后续在升级为服务)
lib文件 –libPassWord.a、libxxtencrypt.a(已实现)
数据库配置过程 – 修改现有的过程,完成对实时转储任务的添加。后续考虑用可视化界面实现。
B. 主进程操作步骤:
1、 启动控制进程,读取以上8张配置表,将数据组织到共享内存中。此后,定时每小时读取T_EXTRACTION_TASK表中IS_ADD_DEL=1或2的任务,添加或删除到调度队列,并更新IS_ADD_DEL=0。
2、 为每一个调度添加一个属性:下次执行时间和执行状态。初始值为当前时间加上时间频率。
3、 遍历调度队列。遍历结束后,sleep(1)。
4、 当某调度的下次执行时间大于当前时间时,fork任务进程执行任务的实时转储。(fork两次,避免生成僵尸进程。任务进程执行任务结束后,通过共享内存返回执行结果。)
5、 任务进程按照配置信息,执行任务,完成之后退出。
6、 控制进程更新调度下次执行时间为+=时间频率。
7、 执行操作3。
备注:
# 当前时间、下次执行时间、时间频率:单位为秒。
# 程序初次启动:指程序自启动后,未读取配置数据。
# 控制进程和任务进程,通过共享内存通信。
# 调度的下次执行时间严格按照时间频率向后推移。
# 调度与任务是一对多的关系。一个调度下的任务,顺序执行。不同调度下的任务,异步执行。
# 调度的关键属性:下次执行时间、时间频率
# 任务的关键属性:任务状态(0未执行,1执行中,2执行完毕),任务类型(1--ssync2o、2--ssync2m)
C. 子任务转储步骤:
1、 当任务信号灯打开,从共享内存中获取任务数据。校验数据是否合理有效。
2、 初始化任务执行环境,如:创建配置数据库连接、源数据库连接、目的数据库连接等。
3、 更新配置数据库task_detail表中子任务锁。如果已锁,则停止转储。
4、 执行子任务前sql,包括源数据库和目的数据库。(将源表sync_status=0的数据更改为1)
5、 读取源表中sync_status=1的行数据,合理组织源表数据。
6、 根据配置要求,对源表数据分批写入目的库。通过Fork子进程实现。
7、 根据配置要求,子进程对数据做相应特殊加工处理,如:加解密。处理完成之后,写入目的数据库。
8、 父进程继续操作6.
9、父进程通过共享内存获得子进程转储执行情况,更新源表数据:sync_status=2(成功)或3(失败)。
10、执行子任务后sql,包括源数据库和目的数据库。
11、更新配置数据库子任务锁。
12、打扫现场,释放资源。继续操作1。
目的表不包含这控制字段:sync_status。
D. 共享内存
任务详细参数的共享内存结构:
要需包含:配置表的数据,即任务的详细信息,包含源库id、目的库id,源表名称和表结构,目的表名称和表结构,执行前后sql,等。
- 数据交换平台的需求总结与初步设计
- 数据交换平台开发之二功能需求
- 跨平台并行库的初步设计
- 菜鸟初步设计的开放平台框架
- 实时数据缓存管理的初步设计
- 传真数据交换平台的构建
- 数据交换平台的双内存设计
- 数据交换平台的架构设计
- 数据交换平台优化
- FMQ数据交换平台
- 基础平台需求总结
- 架构一个数据交换与信息共享平台
- 数据交换平台规划图
- 交换数据方法总结
- 简单类的初步设计
- 数据的传输与交换的区别
- IBM助力美的整合数据交换平台
- 如何部署安全可靠的传真数据交换平台
- Java_并发线程_Semaphore、CountDownLatch、CyclicBarrier、Exchanger
- Java--字符串
- 三元乙丙胶辊
- GIT服务器实现web代码自动部署
- 试用Android Annotations
- 数据交换平台的需求总结与初步设计
- IT应聘者的简历应该是怎么样的?
- Maven仓库搜索
- hdu 1334 Perfect Cubes
- fmodex.dll文件下载与修复工具
- 签名证书SHA1的值
- python:Non-ASCII character 'xe5' in file报错问题
- 读书笔记-----------windows映射方式
- win32命令行参数