美文网首页
数据同步(续)

数据同步(续)

作者: fooboo | 来源:发表于2018-10-24 13:07 被阅读17次

这次再次review之前优化的增量同步机制,因为架构是多线程多虚拟机,虚拟机里是协程并发,那么可能会出现两个协程会先后操作同一份数据,时序上有先后。现在的策略是玩家数据一分钟的细粒度增量更新变化的数据,五分钟粗粒度的全量更新数据,不管有没有变化,防止因为意外问题造成数据回档。

但是今天在车上仔细想想好像有点问题,如果增量更新和全量更新的定时器同时触发,而且定时增量更新的数据更新,那么可能出现先进行全量更新后进行增量,此时数据是没问题的,因为同步到DB那边后就是串行操作,后到的覆盖之前的。

如果先增量更新,后全量更新,那么新数据会被覆盖,就有问题。仅这个时间段内出现不一致,因为后面玩家下线,还是以最新的全量更新到DB,达到数据最终一致性,中间可能会出现暂时性的不一致。

为了尽量达到实时的一致性,现在在原来的基础上增加版本号version字段。版本号仅用于增量,当有数据增量到来时,先拿本地版本号和更新版本号对比,如果落后则丢弃本次增量数据,否则append要增量的数据等增量定时器到来。

全量更新的时候,更新增量的版本号,并且重置即将增量的更新,以全量更新为准,这样增量定时器到来后,就不用更新,防止旧的增量同步数据覆盖最新的数据。

这里增量版本号用于控制是否继续保存要增量的数据,要保存则更新,而增量数据是否重置由全量那边处理,这么考虑是以全量为最新数据。

相关文章

网友评论

      本文标题:数据同步(续)

      本文链接:https://www.haomeiwen.com/subject/tsittqtx.html