Skip to content

Otter数据入库算法

agapple edited this page Aug 17, 2013 · 1 revision

核心算法介绍

实际测试中,otter的同步速度相比于mysql的复制,约有5倍左右的性能提升,这取决于其同步算法的实现. 抛弃了强一致性,得到了性能提升

数据合并

1. insert + insert -> insert (数据迁移+数据增量场景)
2. insert + update -> insert  (update字段合并到insert)
3. insert + delete -> delete 
4. update + insert -> insert (数据迁移+数据增量场景)
5. update + update -> update
6. update + delete -> delete
7. delete + insert -> insert 
8. delete + update -> update (数据迁移+数据增量场景)
9. delete + delete -> delete
说明.

1. insert/行记录update 执行merge sql,解决重复数据执行

2. 合并算法执行后,单pk主键只有一条记录,减少并行load算法的复杂性(比如batch合并,并行/串行等处理)

数据入库算法

   入库算法采取了按pk hash并行载入+batch合并的优化

   a. 打散原始数据库事务,预处理数据,合并insert/update/delete数据(参见合并算法),然后按照table + pk进行并行(相同table的数据,先执行delete,后执行insert/update,串行保证,解决唯一性约束数据变更问题),相同table的sql会进行batch合并处理

   b. 提供table权重定义,根据权重定义不同支持"业务上类事务功能",并行中同时有串行权重控制.

   业务类事务描述:比如用户的一次交易付款的流程,先产生一笔交易记录,然后修改订单状态为已付款. 用户对这事件的感知,是通过订单状态的已付款,然后进行查询交易记录。

   所以,可以对同步进行一次编排: 先同步完交易记录,再同步订单状态。 (给同步表定义权重,权重越高的表相对重要,放在后面同步,最后达到的效果可以保证业务事务可见性的功能,快的等慢的. )


初步性能指标:

1. 单机房同步

   a. 100tps , 延迟100ms

   b. 5000tps, 延迟1s

2. 中美异地机房同步

   a. 100tps , 延迟2s

   b. 5000tps ,延迟10s

ps. 性能指标取决于目标数据库性能,数据大小等多个因素,单机房100b大小,极限tps可以1w+