GaussDB(DWS)《ROACH小课堂Ⅰ测试方法篇之数据一致性校验测试》
ROACH小课堂Ⅰ测试方法篇之数据一致性校验测试(实时转账业务)
1. 前言
对于GaussDB(DWS),一个基于ACID原则的关系型数据库,数据的一致性是至关重要的。而对于保证数据安全性的工具ROACH而言,如何校验各种场景下恢复出来的数据是否正确,或者说是否与备份时一致,就是一个关键的验证点。对于集群级的备份(快照)而言,本身在备份时是有全局一致性点的。但是,对于测试而言,如果模拟用户使用场景,备份的同时对数据进行修改,即便有全局一致性点,但因为不能简单的获取一致性点时刻,每张表的数据状态,从而无法在恢复后验证恢复的正确性。解决这个测试的难点,既能提升产品的质量,也能在客户对工具有质疑时,提供基础的质量信心。因此,我们引入模拟银行实时转账的业务模型。
2. 银行实时转账业务的流程和测试原则
转账业务的核心操作:
增删改,既钱在不同账号之间的流转
测试原则:
① 所有表的某一列之和不变
②一笔完整的转账操作,必须具有原子性
当发生转账操作后,钱在不同账号的流转关系和状态,如下图所示,假设有两张表c1,c2分别代表两个账号
两个账户C1和C2,因为每一笔转账操作,是在事务内执行的,保证每一次修改的原子性,所以预期C1 + C2永远都等于100。
当我们在任意时刻发起备份,备份达到一致性点的时刻,数据的整体预期就是明确的,如C1 + C2=100 。
如果不使用转账模型,假设仍是两张表C1 和 C2,那我们就必须要知道备份达到一致性点时刻,动态的业务修改,使两张表达到什么状态。
而这其中,又牵扯到一致性点时刻最后一笔修改的事务是否提交等存储底层的问题。会使数据的一致性校验变的非常复杂,难以实施。
3.基于该方法的拓展测试
转账模型提供了在ACID数据库上,如何校验动态一致性的简单方法。我们可以在它的基础上,增加两类的验证。
①不同表类型的转账模型一致性,如列存表,列存delta表,toast表,hstore表等。
②上述转账模型是发生在多表间的转账,我们可以在此基础上,增加单表内部不同列的转账,以满足更多的验证场景需要。
- 点赞
- 收藏
- 关注作者
评论(0)