开发者社区> 问答> 正文

retl_mark表id为什么用threadId呢?

看源码过程中发现回环控制给语句打标记时retl_mark表的id键值用的threadId,这个值是一个[0,300]的值,如果一个库有多个上游库往它同步,会不会出现多个上游用到同一个threadId的情况,这样的话针对retl_mark表应该会出现同一记录锁争用的情况吧?

原提问者GitHub用户xmpace

展开
收起
古拉古拉 2023-06-14 21:12:24 91 0
2 条回答
写回答
取消 提交回答
  • 在 OTTER 中,每个线程都有一个唯一的 threadId,这个 threadId 会被用来标记 retl_mark 表中的每个记录,以表示该记录是由哪个线程处理的。这样做的目的是为了避免多线程同时写入同一个记录,从而避免记录冲突的问题。

    在 OTTER 中,每个线程都有一个独立的 retl_mark 表,因此不同线程之间的记录不会发生冲突。如果一个库有多个上游库往它同步,那么每个上游库都会有一个独立的线程号(threadId),不会出现多个上游用到同一个 threadId 的情况。

    总之,OTTER 通过线程号(threadId)来避免记录冲突的问题,保证了数据同步的正确性和稳定性。

    2023-06-16 08:46:28
    赞同 展开评论 打赏
  • 会有概率出现并发,所以设计上用了300个id来降低并发

    原回答者GitHub用户agapple

    2023-06-14 22:15:37
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载