如何通过JDBC连接串指定ML工作负载连接Cloud Spanner只读副本
Cloud Spanner 只读副本连接与性能问题答复
JDBC连接字符串配置只读副本路由的方法
完全支持通过JDBC连接字符串直接配置,不需要修改上层业务代码即可让ML工作负载的请求全部路由到只读副本,注意需要使用2.0及以上版本的官方Cloud Spanner JDBC驱动,低版本不支持相关路由参数。
- 前置规则:连接必须声明为只读模式,所有读写类请求不会被转发到只读副本,从机制上避免数据一致性风险。
- 可直接将路由参数拼接在JDBC连接串后缀,示例连接串如下:
jdbc:cloudspanner:/projects/<你的项目ID>/instances/<实例ID>/databases/<数据库ID>?readOnly=true;routeToReadOnlyReplica=true;autocommit=true
- 核心参数说明:
readOnly=true:直接声明当前连接为只读模式,等价于代码中调用Connection.setReadOnly(true),不需要额外编写业务逻辑。routeToReadOnlyReplica=true:开启只读副本路由策略,驱动会自动选择距离客户端网络最近、负载最低的可用只读副本建立连接,不需要手动指定副本的IP或部署位置。
- 针对ML场景常见的批量拉取训练数据、离线特征查询等需求,还可以在连接串中追加
maxStaleness=<允许的最大数据延迟>参数(比如maxStaleness=15s)开启有界过期读,进一步降低查询延迟、提升副本吞吐。
Cloud Spanner对只读事务的处理能力
Cloud Spanner的基础设施完全可以高效承载这类ML只读负载,核心支撑能力如下:
- 资源隔离性强:只读副本是独立部署的计算存储节点,所有路由到副本的只读请求不会占用主写入集群的CPU、IO、存储带宽资源,即使ML工作负载做大表全量扫描、大批量数据拉取这类重操作,也不会影响核心线上读写业务的稳定性。
- 性能表现稳定:只读副本近实时同步主集群的已提交事务数据,根据选择的读模式提供对应一致性保障:
- 若选择强一致读,副本仅会在查询发起时和主节点做轻量的时间戳校验,查询计算、数据读取全流程都在副本本地完成,延迟比直连主节点低30%以上;
- 若选择有界过期读,请求完全不需要和主节点交互,单副本可支撑10w+ QPS的点查询,大表扫描吞吐可打满节点网卡上限,完全能覆盖ML工作负载的高吞吐数据拉取需求。
- 原生适配批量查询场景:Spanner底层会自动对大范围扫描、聚合类查询做分片并行调度,不需要手动分库分表或做数据拆分,即可高效完成TB级数据集的批量读取,不会出现单节点性能瓶颈。
注意不要在配置了只读路由的连接上执行写入、DDL类操作,驱动会直接抛出异常拦截这类请求,避免出现未预期的错误。
内容的提问来源于stack exchange,提问作者e6573
相关产品推荐
相关产品推荐

