数据库工单模块设计
一 功能:为研发提供自审核执行,加快应用上线速度,减轻DBA的工作量
二 核心工具:inception
三 环境:
test 测试环境
beta 预发环境
online 线上环境
四 设计
一 权限设计
1 按照组分类,每组成员可以查询相应的线上从库数据
2 按照组分类,每组组长能审批各组成员具体sql,并且执行
二 事务相关
1 sql预处理
1 格式化sql本身,美化输出,可以对sql语句的标点符号处理
2 sql语法校验,可以查看是否sql本身语法合法
3 单表多DDL的语句合并
这里推荐soar工具,能实现以上功能
2 sql事务提交
1 提供DML事务提交审核,提交给相应组长
三 DDL语句
1 操作目标过滤
1 create 建表,可交与研发执行建表操作,一旦经过审核,便可执行,对线上影响不大
2 alter 更改表,inception会调用percona操作对大表进行处理,理论上也没问题
2 相关功能
DDL的问题
1 警告功能:由于DDL操作对数据库压力可能会很大,所以要制定数据库负载检测功能,当数据库负载高于一个制定阈值时,提出警告,告知研发者
2 进度条功能:DDL操作提供执行进度条,可供研发者观察进度,当长时间不动时需要联系DBA进行数据库进行观察
3 DDL合并功能:一定要使用sql预处理合并多DDL单表的语句,能减少操作的成本
3 其他操作
对于drop truncate等功能,建议由DBA进行执行
四 数据字典
1 汇总线上所有库表和对应关系,形成可快速定位目标
2 自动扫描
当数据库库表变更时触发对数据字典进行更新,保证数据字典的最新有效
五 回滚语句
1 通过inception备份库进行查询回滚语句,展示在前端
2 通过回顾语句进行执行进行数据修复
六 账号功能
1 当研发执行完sql语句需要验证数据时建议提供一个主库查询账号
因为一般大批量的sql工单处理完时从库都会有延迟,这个主库查询账号由各组组长负责,进行功能验证
七 思考问题
1 inception问题
1 不合规的sql可能包括哪些方面
对于事务操作,影响和扫描行数过多,但是又有特殊需求
对于DDL操作, 建表不符合规范,但是又有特殊需求
2 如果研发提出的sql平台无法通过,有两个解决办法
1 对于 事务操作利用主键拆分,进行批量执行
2 对于 建表操作,建议绕过平台执行
七 线上实施的问题
1 一定要保证 测试 预发和线上的审核规则统一
2 和研发多沟通,制定一个严格但是能符合实际的sql审核规范,确保业务正常发布
3 工单的提交一定要DML操作和DDL操作进行拆分分别执行
4 制定一个使用规范,放置在平台上,供研发进行观看
八 总结
暂时就想到这么多,有问题再补充