fastdb的REPLICATION SUPPORT

先看文档中的 Fault tolerant support 部分

primary node 和 standby node 在主数据文件之外,还多了一个以 cnt 为后缀的文件,这个文件里面存储的是整数数组,有物理上能存多少个页面,这个数组就有多在,数据的每一个元素与一个页面相对应,是只增不减的,当这个页面更新过之后,这个整数就递增,不一定是递增1。这个文件主要是为了增量恢复,当primary node 和 standby node 中对应的整数相等时,就说明这两个结点的内容相同,否则,就应是从较大的拷贝,覆盖较小的,

primary node 和 standby node 之间是通过socket进行通信的,每次传递的数据是页面大小4K的整数倍,把每次修改后的相邻页面做为一个整体发送,

数据的接收是在dbfile类的:

bool updatePages(socket_t* s, size_t pos, int updateCount, int size);
    bool concurrentUpdatePages(socket_t* s, size_t pos, int updateCount, int size);

发送是在在dbfile类的:

int dbFile::flush(bool physical)

 

在数据库的启动过程中,

master node 向slave node 发送 ONLINE 状态;slave node 向 master node 发送 RECOVERED 状态,为的是当找到新的master node 后,从其同步最新的数据

master node 将自身的状态改为 ACTIVE;slave node 会轮寻 master node ,直到收到的的master node 状态改为ACTIVE;

 

之后交给void dbReplicatedDatabase::reader(),创建的线程进行双方的通信

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值