更新时间:2024-04-29 GMT+08:00
分享

一致性级别

云数据库 GaussDB(for MySQL)提供了以下两种一致性级别,满足您在不同场景下对一致性的要求:

  • 最终一致性(默认)
  • 会话一致性

约束限制

  • 一致性级别需要GaussDB(for MySQL)实例内核版本为2.0.28.1及以上。
  • 开启会话一致性还需您的数据库代理内核版本为2.7.4.0及以上。

最终一致性

开启数据库代理后,同一会话内,连续多次SELECT请求会根据权重配比,路由到不同的数据库节点,由于主节点与读节点之前存在复制时延,并且各个读节点的复制时延大小不一定完全相同,可能会导致每次SELECT请求得到的结果存在差异,因此默认情况下,数据库代理只能保证数据的最终一致。

会话一致性

由于最终一致性可能会导致多次SELECT请求的结果存在差异,数据库代理进一步提供了会话级别的数据一致性,保证了在同一会话内,每次SELECT请求都可以获取到上一次写入操作后,数据库的最新数据。

数据库代理会记录每个数据节点的日志序号(Log Sequence Number,简称LSN),同时针对每一个会话也会维护对应的LSN,即Session LSN。当某个会话有数据更新操作执行完毕时,数据库代理会根据当时主节点的LSN来更新对应的Session LSN,后续有读请求来的时候,数据库代理会比较Session LSN以及各个数据节点的LSN,将请求发往LSN大于或等于Session LSN的数据节点,从而保证当前会话内,SELECT请求总能获取到上一次更新操作后的最新数据。

图1 会话一致性实现原理

开启会话一致性后,如果主节点与读节点复制时延较大,各个读节点LSN均小于Session LSN,会导致SELECT请求发送到主节点,从而增大主节点的压力,整个数据库集群的读写性能会有一定的降低。

分享:

    相关文档

    相关产品