我记得复制表是在所有OBServer节点都有一份副本,如果修改复制表数据,日志需要所有OBServer上的副本落地才能完成用户提交吗?
1 个赞
是的。
如果有备副本节点故障,会临时拉黑。
3 个赞
谢谢
2 个赞
谢谢大佬
2 个赞
优秀!!!
2 个赞
根据文档库中的信息,复制表并不需要日志全部同步到其他副本才可以提交。以下是详细解答:
-
复制表的日志流特性
根据“副本介绍 → 日志流介绍 → 广播日志流”部分的描述,复制表的数据存储在广播日志流上。广播日志流会在租户内的每个 OBServer 节点上部署一个副本,但这些副本分为两种类型:- F 副本(FULL 副本):参与 Paxos 一致性协议投票的全功能型副本。
- R 副本(READONLY 副本):只读型副本,不参与投票,仅用于提供强一致性读。
因此,并非所有 OBServer 上的副本都需要参与日志同步和提交。
-
事务提交机制
根据“分布式一致性协议”部分的描述,OceanBase 数据库使用 Paxos 协议在同一日志流各副本间同步事务日志。事务提交只需要多数派副本(即 F 副本)同步成功即可完成,而 R 副本并不参与投票。这意味着,即使某些 R 副本尚未同步日志,事务仍然可以提交。 -
总结
复制表的修改并不需要日志同步到所有 OBServer 上的副本才能完成用户提交。事务提交只需满足 Paxos 协议的多数派同步要求即可。R 副本的存在主要是为了支持强一致性读,而不影响事务的提交性能。
希望以上解答能帮助您更好地理解复制表的机制!如果还有其他疑问,请随时提问。
具体信息可参考以下文档:
1 个赞
那这个强一致性咋理解呢?比如:我用到的某张表关联的复制表恰好所在副本就没同步呢,是否要等他同步完才能返回结果?