为什么强读是使用路由策略?

https://www.oceanbase.com/docs/common-odp-doc-cn-1000000000380037

路由策略
在以下情况中 ODP 将使用路由策略规则进行路由:
弱读
强读 Primary Zone
强读分区表计算分区失败

问题,如上所述:
为什么在“强读 Primary Zone”或“强读分区表计算分区失败”时使用路由策略规则proxy_route_policy进行路由?

1 个赞

强度primary_zone很好理解啊,我都设置强读这个zone,就算leader不在这个zone上OBProxy也应该发送到这个zone,毕竟是在OBproxy层面已经设置了路由策略

强读分区表计算分区失败,这个应该是跟弱读一样的原理,因为设置了 proxy_route_policy 的原理,因为分区计算失败所以按照配置的路由策略转发。 :joy:

1 个赞

在OceanBase中,路由策略是为了确保数据访问的一致性和高效性而设计的。对于您提到的“强读 Primary Zone”和“强读分区表计算分区失败”的情况,这里解释一下为什么需要使用路由策略:

强读 Primary Zone

在强一致性读取(强读)场景下,为了保证数据的一致性,OceanBase 需要确保读取的数据是最新的,即从数据的主副本(Leader)读取。因此,在这种情况下,OceanBase 使用路由策略来直接定位到数据所在的 Leader 节点,以确保能够获得最新的一致性数据。

根据文档中的描述,对于强一致性读语句,如果 SQL 指定了表名,那么直接路由到该表涉及的分区的 Leader 的 OBServer 节点执行。这意味着不需要经过复杂的路由决策过程,而是直接定位到数据所在的位置,从而保证了数据的一致性和读取效率。

强读分区表计算分区失败

对于分区表,如果在计算分区时遇到失败的情况,OceanBase 也需要使用路由策略来确定数据的具体的位置。这是因为分区表的数据分布在不同的分区中,每个分区可能位于不同的 OBServer 上。在这种情况下,OceanBase 需要根据路由策略来决定如何定位到正确的分区数据,以完成读取操作。

总结

  • 强读 Primary Zone:为了保证强一致性的读取,OceanBase 会直接定位到数据的 Leader 节点进行读取,这通常不需要使用 proxy_route_policy 来进行复杂的路由决策,因为目标很明确。
  • 强读分区表计算分区失败:在这种情况下,OceanBase 需要使用路由策略来确定数据的具体的位置,以便完成读取操作。

需要注意的是,proxy_route_policy 主要用于控制弱一致性读取时的路由策略,例如备优先读等场景,并不是用于强一致性读取的场景。强一致性读取通常直接指向 Leader 节点,不需要复杂的路由策略。

具体信息可参考以下文档:

2 个赞

所以说,下面的表述中的“路由策略”并不是指 proxy_route_policy

在以下情况中 ODP 将使用路由策略规则进行路由:
弱读
强读 Primary Zone
强读分区表计算分区失败

proxy_route_policy 是一个可以配置路由策略怎么去路由弱读的配置项,是路由的一个影响因素。

我纠结的是,强读primary_zone和proxy_route_policy有什么关系?必须设置proxy_route_policy才可以强读吗?

在以下情况中 ODP 将使用路由策略规则进行路由:
弱读
强读 Primary Zone
强读分区表计算分区失败

你是高手,你是高手,你是高手,你就是高手 。