Otter源代码解析(六)

全部文档索引:

Otter源代码解析(一): http://eyuxu.iteye.com/blog/1941894

Otter源代码解析(二) : http://eyuxu.iteye.com/blog/1942518

Otter源代码解析(三): http://eyuxu.iteye.com/blog/1942519

Otter源代码解析(四): http://eyuxu.iteye.com/blog/1942521

Otter源代码解析(五): http://eyuxu.iteye.com/blog/1942522

Otter源代码解析(六): http://eyuxu.iteye.com/blog/1942549

Otter源代码解析(七): http://eyuxu.iteye.com/blog/1942578

Otter源代码解析(八): http://eyuxu.iteye.com/blog/1942780

Otter源代码解析(九): http://eyuxu.iteye.com/blog/1942786

下面进入核心的部分:SETL中的Select过程:本身描述能力有限,自认为单纯看我写的文档就能够了解地比较深入,不太现实。所以最好是代码阅读和文档阅读结合的方式来理解Otter:



 

 

关于HA:采用多个节点竞争的模式来实现,一旦一个节点宕机,其他的节点就会获取竞争条件,这个事件叫做MainstemEvent

.每个SETL过程的设计基本上都是由xxxTask + OtterXXXFactroy + OtterXXX的设计方式,但是细节上差别比较大。

. Select过程是需要串行的(需要保证顺序性),但是为了尽可能提高效率,将Get和ACK(Canal的滑动窗口)分在两个线程里面去做,依据的假定就是绝大多数数据是不需要回滚的,但是一旦回滚了,代价就比较大(Otter的官方文档有相关的说明)。这个设计有个问题就是发送的数据是可能重复的,Otter对同步数据表的要求是必须要要有主键,我认为和这个问题有关系(否则Load过程难于知道数据是否是重复的),但是效率能够得到大幅度的提高。

猜你喜欢

转载自eyuxu.iteye.com/blog/1942549