持续交付8-数据管理

数据管理

解决什么问题

企业中,数据是实际业务的核心是企业价值的体现.数据的管理也是很是重要的事情.实际数据的版本化管理能够有效的下降版本迭代风险.同时针对测试数据的管理,经过一些初始化数据来快速完成测试,能够有效的提升迭代效率.数据库

怎么作

实际经过下面方式来进行数据版本管理:缓存

  1. 数据库脚本化
  2. 增量式修改
  3. 数据库回滚和无停机发布
  4. 测试数据的管理
  5. 数据管理和部署流水线
  • 数据库脚本化

数据库的初始化和全部的迁移都须要脚本化,并提交到版本控制中.同时数据库也应该版本化,能够和对应的应用版本相匹配.性能

  • 增量式修改.

增量式修改在多版本环境中是必须的,若是要修改已存在的内容,就要评估下具体影响.持续交付还要求数据库能够自动化数据迁移.实现方式以下:单元测试

  1. 在数据库中建立版本号
  2. 对数据库修改时建立两个脚本,1个是升级脚本,一个降级脚本
  3. 建立配置项指定应用的版本

实际升级时,经过应用版本就能够知道数据库版本,再找到对应的升级脚本执行便可;降级则执行相反操做的降级脚本便可.测试

若是数据库降级删除数据会触发约束条件,则降级就会变得复杂.
因此数据库增量式修改,能有效的保障升级和降级的正常执行.实现数据库的自动化迁移.设计

数据库管理书籍:
refactoring database
recipes for continuous database integration版本控制

  • 数据库回滚

增量式修改,虽然让数据库回滚更简单,可是它还涉及一些数据库难以回滚的状况.这时就要考虑重用原来版本,并进行数据补填.具体方式以下:日志

  1. 经过缓存事务记录回放来避免回滚时数据丢失问题.
  2. 记录UI事件或复制事务日志.
  • 无停机发布

应用在数据库版本迭代时进行版本兼容处理,来支持持续迭代.对象

  • 测试数据管理

测试性能
测试独立性事件

单元测试:

单元测试不与真正的数据库交互,所有经过模拟数据来快速验证业务处理.

  1. 使用测试替身对象来模拟数据
  2. 使用模拟数据库数据

管理测试与数据的耦合

测试设计方式有三种:

  1. 独立性测试:每一个测试数据只对该测试可见
  2. 适应性测试:每次运行时先检查环境,使用检查的数据进行测试
  3. 顺序性测试:按已知顺序,每一个测试输入是前一个的输出

实际三种方法均可行,可是后两种扩展性比较差.数据问题常常会影响测试.

测试独立性:

每一个测试都是原子性操做:

  1. 最简单的方式经过事务操做,执行完即回滚当前操做,以保证数据库数据不被修改.
  2. 数据进行功能性隔离.专项专用.