◈ DB 选型参考
← 返回首页

Google Spanner

关系型 OLTP #全球分布式 #外部一致性 #TrueTime #水平扩展 #全托管 #专有许可 #HTAP延伸 #多模型

Google Cloud 的全球分布式关系型数据库,用 TrueTime(GPS + 原子钟授时)把"跨洲线性一致性"做成工程现实——它是极少数把 external consistency(严格可串行化)做到全球 OLTP 规模的系统,代价是 GCP 锁定、高起步门槛和"建模即分片"的设计纪律。

用 AI 深挖这款:
证据等级:官方文档 厂商口径 社区实测 社区共识 待验证

基本信息

项内容
厂商Google Cloud
国家美国
起源内部生产 ~2012(支撑 AdWords / Google Play 等);OSDI 2012 论文《Spanner: Google's Globally-Distributed Database》;云服务 GA 2017-02社区共识
许可证专有(闭源)。核心产品是 GCP 托管服务;2025 年新增 Spanner Omni(可下载、客户自运维的容器化版本,仍为专有许可,非开源)
托管服务Cloud Spanner(GCP 托管);Spanner Omni(自托管:on-prem / Kubernetes / AWS / Azure / 边缘)
主类型关系型(原生全球分布式)
兼具类型HTAP 延伸(Data Boost、列存引擎预览中)、图(Spanner Graph / GQL)、向量检索(ScaNN)、全文检索、多模型

硬维度(47 项)

1 静态加密 / TDE 有全量落盘数据默认由 Google

有 全量落盘数据默认由 Google 管理的密钥加密(Google default encryption),无需用户配置;可选用 CMEK(Cloud KMS 客户管理密钥,支持手动创建与 Autokey、外部密钥管理 EKM),备份同样加密。启用 CMEK 对性能与 SLA"无影响"(官方口径)。密钥可轮换、禁用、销毁;KMS API 操作可进审计日志。

2 TLS / 传输加密 有GCP 服务间默认 TLS

有 GCP 服务间默认 TLS;客户端库走 gRPC + TLS;PGAdapter 支持 SSL 连接。查证为"默认启用",无"明文模式"可配项。

3 审计 有Cloud Audit Logs:

有 Cloud Audit Logs:Admin Activity 日志默认开启(免费、400 天保留);Data Access 日志(数据读/写)需显式开启、计费;System Event 日志默认开启;CMEK 密钥使用可审计。不是数据库内核级"谁查了哪行"的细粒度 SQL 审计,而是 GCP 平台级审计模型。

4 认证与权限 有IAM 角色模型

有 IAM 角色模型(roles/spanner.viewer / databaseReader / databaseUser / databaseAdmin,可细到实例/库级);细粒度访问控制(fine-grained access control)支持表/列/行级授权(GA);PG 方言库支持 database roles。无数据库内建密码用户体系(PGAdapter 走 PG 协议时仅支持 password 认证方式,但身份仍映射到 GCP 凭证)。

5 备份恢复 有按需备份 + 备份计划

有 按需备份 + 备份计划(可自动每日全备、7 天保留默认;仅计划备份支持增量);备份最长保留 1 年;PITR:版本保留期(默认 1 小时,可配到 7 天),可恢复到微秒精度任意时间点,可整库恢复或 CREATE DATABASE... AS OF 另建库;支持跨区域拷贝备份;导入导出(CSV/Avro)。恢复走 backup pointer,首字节快厂商口径。

6 可观测性 有Cloud Monitoring

有 Cloud Monitoring 指标、Key Visualizer(键范围热力图,定位热点)、SPANNER_SYS 内省表(查询统计、锁统计、事务统计的 SQL 接口)、Query Insights、EXPLAIN/EXPLAIN ANALYZE、查询计划可视化(Spanner Studio)、客户端侧指标(AFE/GFE 连接/延迟,Java/Go)。迁移案例(Glance)证实 Key Visualizer + SPANNER_SYS 是热点排查主力工具。

7 连接模型 有无传统连接池烦恼:客户端库维护 s

有 无传统连接池烦恼:客户端库维护 session 池 + gRPC 通道池(默认各语言 Min 100 / Max 400 sessions,Node.js 例外);新一代 multiplexed session(单会话承载任意并发事务,免清理、免 keep-alive);PGAdapter 用单 multiplexed session 对外呈现 PG 协议。注意:session 泄漏(事务未提交/回滚)仍是真实坑,官方有专门排障博客。建议"一般不要改默认池大小"。

8 事务与隔离级别 有默认 可串行化 + 外部一致性

有 默认 可串行化 + 外部一致性(= 严格可串行化,业界最强);只读事务无锁、MVCC 快照执行;2024–2025 新增 Repeatable Read(快照隔离实现,有写偏风险)以降低高争用下中止率;支持强读 / 精确 stale 读 / 有界 stale 读。官方限额:单 commit 80,000 mutations(含索引)、commit 大小 100 MiB;2026-09 官方博客宣布 DML 的 80K 上限从"事务级"放宽到"单条 DML 语句级"(新鲜变化,状态 open)。

9 复制与一致性 有每分片(split)Paxos 同

有 每分片(split)Paxos 同步复制;leader 写、并行发给投票副本、quorum 确认即提交;故障自动 leader 重选,无脑裂;副本类型:读写 / 只读 / witness。CAP 下选 CP(少数派分区丢 quorum 即拒写);PACELC 为 PC/EC——正常运行时也为一致性支付跨区延迟。可调一致性有限:只有强读 vs stale 读、隔离级别两档,没有 Dynamo 式 R/W quorum 旋钮。

10 扩展方式 无手动 reshard

有 纯横向、在线。容量单位:node 或更细的 processing unit(1000 PU = 1 node,最小 100 PU);数据按主键 range 自动切分为 splits,按负载/大小自动再平衡,无手动 reshard;支持托管自动扩缩(Autoscaler,可设 CPU 目标 <65%,支持非对称只读区扩缩)。纵向调参基本不存在——你买的是抽象算力,不是 CPU/内存。

11 兼容性 部分支持两种 SQL 方言:GoogleS

部分支持 两种 SQL 方言:GoogleSQL 与 PostgreSQL 方言(PG 子集 + Spanner 扩展如交错表);PGAdapter(PG 线协议代理,psql 仅支持少数 meta 命令);JDBC;官方客户端库(Java/Go/Python/Node/C# 等);Change Streams(CDC,可接 Kafka/BigQuery/PubSub);dbt 适配器、Dataflow 连接器、BigQuery 联邦查询。2025-08 官方发布 80+ MySQL 函数 UDF 包(开源 DDL 脚本)降低 MySQL 迁移改造成本。

12 许可证与商业模式 不支持 Data Boost

专有 闭源,无开源内核;托管版三档版本:Standard / Enterprise / Enterprise Plus(2024–2026 年版本体系重构,老教程价格已过时);Spanner Omni 为可下载自托管版本(专有许可,商用条款不明,需联系 Google,待验证)。计费模型(只描述模型,不引标价):① 计算按 node-hour / PU-hour 持续计费(实例存在即计费,与 QPS 无关);② 存储按 GB-month(SSD/HDD 分档,含多副本);③ 跨区复制按数据量计费;④ 备份存储另计;⑤ 多区域按每副本算力计费。90 天免费试用实例(10 GiB 存储,Standard 功能 + Graph;不支持 Data Boost);本地 emulator 免费开发。

13 中文资料丰富度 有简/繁中文版

中等 官方文档有简/繁中文版;但中文社区实践帖、故障案例、中文书籍远少于 MySQL/PG/OceanBase/TiDB;英文资料为主。国内选型团队学习曲线陡在"键设计 + 成本建模",而非语言。

14 性能与延迟特征 有

有(TrueTime 外部一致性的代价是提交延迟)。

  • 读写吞吐随节点数扩展(官方称数十万 QPS 量级,厂商口径)厂商口径。
  • 提交需 Paxos + TrueTime 等待,单事务延迟高于单机 DB;只读事务可用快照读降延迟 官方文档。
  • 热点 key 的读写仍受单分片限制,分片键设计是性能关键 社区共识。

15 合规与认证 有

有(继承 Google Cloud 合规体系)。

  • Google Cloud:SOC2、ISO27001/27017/27018、PCI DSS 等厂商口径厂商口径。
  • 无中国区服务;中国用户需评估跨境与数据出境要求 社区共识。

16 成熟度与社区生态 有

有(2012 年论文;2017 年 GA)。

  • 2012 年 Spanner 论文定义全球分布式数据库;2017 年 Cloud Spanner GA 社区共识。
  • Google 内部(Ads 等)大规模使用,外部标杆案例多为大型企业 社区共识。
  • 定价高,长期是“贵但省心”的代表 社区共识。

17 标杆用户 有

有(Google Ads;Pokémon Go)。

  • Google Ads 等内部核心业务 社区共识。
  • Pokémon Go(Niantic)上线初期的标杆案例(公开)社区共识。
  • 外部多为付得起溢价的大型企业 社区共识。

18 生态工具链 有

有(Google 生态集成;备份导入导出内置)。

  • 备份/导出/导入内置(到 GCS);PITR 官方文档。
  • 数据处理:Dataflow/Beam 连接器;CDC:Change Streams 官方文档。
  • 迁移:HarbourBridge(PG/MySQL→Spanner)官方文档。

19 云托管与 Serverless 有

有(纯云服务,无自建版)。

  • Spanner 只有 Google Cloud 托管形态,无自建版 官方文档。
  • 按节点/按量计费,成本高是主要门槛 社区共识。
  • 选即绑定 Google Cloud 社区共识。

20 数据接入与摄入 有

有(Dataflow 模板;GCS Avro/CSV 导入)。

  • Dataflow 模板(Avro/CSV 从 GCS)是官方批量导入通道 官方文档。
  • gcloud CLI 也支持导入导出 官方文档。
  • 大批量导入建议先升节点数再降,省时间 社区共识。

21 外部数据访问 部分支持

部分支持(自身无外部表;BigQuery 可联邦查 Spanner)。

  • Spanner 无外部表语义 官方文档。
  • BigQuery 外部连接可联邦查询 Spanner(反向)官方文档。
  • 跨源分析一般走 BigQuery 联邦或导出到 GCS 社区共识。

22 CDC 与下游同步 有

有(Change streams:Dataflow/Kafka)。

  • Change streams 按表/库捕获变更,可接 Dataflow 再到 Kafka/BigQuery 官方文档。
  • 支持精确一次语义的数据流处理 官方文档。
  • 保留期与分区拆分是设计要点 社区共识。

23 TTL 与数据生命周期管理 部分支持

部分支持(无原生 TTL;靠定时删或分区设计)。

  • 无原生行级 TTL,需应用定时批量删 社区共识。
  • 交错表/分区键设计可让过期删除更高效 社区共识。

24 在线 DDL 与 Schema 演进 部分支持

部分支持(schema 更新无停机;改主键/分区键未找到证据;验证类在线后台执行)。

  • 只改定义:加非键列/删非键列/改默认值无需数据验证,分钟级完成 官方文档;重命名列未找到证据(未找到证据)。
  • 重写数据:STRING↔BYTES、PROTO↔BYTES、长度变更、ENUM 加值等在线可改;加二级索引后台回填,分钟到小时级 官方文档。
  • 搬数据:改主键/分区键/交错层级在官方"支持/不支持"清单中均无明确说明(未找到证据)。
  • 验证约束:加 NOT NULL/缩长度/加 CHECK/加外键/加存储生成列需全表后台验证,优先级低于生产流量、可取消 官方文档;NOT VALID 分阶段写法未找到证据(未找到证据)。
  • 规模:验证/回填 O(n),耗时取决于数据量、实例算力与负载;大表加索引高峰期可达数小时 官方文档。
  • 语义:DDL 经 UpdateDatabaseDdl 长操作提交,不入用户事务;一批语句按 schema 版本原子应用 官方文档;验证期间禁止对受影响实体的冲突 schema 更新(串行) 官方文档;加 NOT NULL 后新写入的 NULL 几乎立即被拒、早于验证完成——验证失败也会留下一段写阻塞窗口 官方文档。(Cloud Spanner 持续交付无固定版本,2026-10-02 核验)

25 多租户与资源隔离 部分支持

部分支持(实例/库级隔离为主)。

  • 租户隔离靠多实例/多库,单实例内无租户资源组 社区共识。
  • 托管自动扩缩部分缓解 noisy neighbor 官方文档。

26 跨地域多活 有

有(全球多活,原生强项)。

  • TrueTime 下全球多活写,外部一致性,region 故障自动 官方文档。
  • 跨区延迟是物理下限, schema 设计(交错表)可优化 官方文档。
  • 多区实例成本显著高于单区 社区共识。

27 高可用架构与 RTO/RPO 有

有(托管全球多活,用户无感知)。

  • Paxos 多副本跨区,故障自动,RTO 秒级 官方文档。
  • RPO=0,外部一致性 官方文档。

28 行级安全与数据脱敏 部分支持

部分支持(无原生RLS;靠IAM与应用层)。

  • Spanner 无原生行级安全,细粒度访问靠 IAM 条件、应用层过滤或视图 官方文档
  • 列级权限粒度有限,强隔离场景需应用层实现 社区共识
  • 动态脱敏无内置能力 待验证

29 JSON 与半结构化能力 有

有(JSON 类型;PG 方言 jsonb)。

  • GoogleSQL JSON 类型,PG 接口 jsonb 官方文档。
  • JSON 查询下推有限,复杂嵌套注意性能 待验证。

30 全文检索能力 无

无(查证为无全文索引;外挂检索)。

  • 无全文索引(查证为无)官方文档。
  • 全文场景外挂 Elasticsearch 社区共识。

31 存储效率与压缩 有

有(分布式存储层自动压缩)。

  • 底层 Colossus 分布式文件系统与存储层自动压缩去重,用户按量付费。官方文档
  • 交错表(interleaved tables)等 schema 设计可减少存储冗余。官方文档
  • 压缩为平台黑盒能力,无用户可调参数,压缩比不公开。待验证

32 开源协议与厂商锁定风险 有

有(Google Cloud 专属;无开源实现)。

  • Spanner 是 Google Cloud 专属的全球分布式数据库,无开源版本,完全绑定 GCP。官方文档
  • TrueTime、全球时钟同步等核心能力依赖 Google 基础设施,无法自建复现。社区共识
  • 迁出需重写全球一致性假设与 schema 设计,成本极高。社区共识

33 查询优化器与计划稳定性 有

有(分布式 CBO;优化器版本化)。

  • 分布式 CBO,查询优化器版本化可控升级 官方文档。
  • hint 有限(JOIN 方法/顺序)官方文档。
  • 计划翻转多与 interleaved 表设计相关 社区共识。

34 参数调优与自治能力 有

有(自治标杆:自动分片,零调参)。

  • 自动分片、自动 rebalance,几乎无调参 官方文档。
  • 性能问题多源于 schema 设计而非参数 社区共识。

35 静默数据损坏防护 部分支持

部分支持(云厂商底层兜底,用户无可见校验开关)。

  • 多区域同步复制与底层校验由 Google 内部完成,用户无页校验开关。官方文档
  • 损坏检测与自愈完全依赖云厂商内部机制,用户无法配置或审计。厂商口径
  • 真值查询(TrueTime)保障一致性,但不覆盖静默位损坏场景。社区共识

36 存储过程/触发器/过程语言 无

无(查证为无存储过程/触发器)。

  • 无存储过程、触发器(查证为无)官方文档。
  • 逻辑在应用层 社区共识。

37 约束与数据完整性 有

有(FK/CHECK+交错表强制)。

  • 外键、CHECK 强制,交错表(interleaved)物理共置 官方文档。
  • 跨 split 外键有延迟代价,建模建议共置 官方文档。

38 分析 SQL 完备性 有

有(GoogleSQL 窗口函数)。

  • GoogleSQL 窗口函数、CTE 可用 官方文档。
  • 非 OLAP 定位,重分析用 BigQuery 社区共识。

39 被遗忘权与数据擦除 部分支持

部分支持(手动DELETE;版本保留窗口残留)。

  • Spanner 保留版本历史用于 stale read,被删数据在版本保留窗口内仍可读 官方文档
  • 备份与导出构成额外残留面 社区共识
  • TrueTime 多版本架构下“立即物理擦除”不可行,需接受窗口期 社区共识

40 数据血缘与目录集成 有

有(Dataplex/Datastream 血缘集成)。

  • 与 Dataplex 数据血缘、Data Catalog 集成 官方文档。

41 存算分离 vs 存算一体 有

有(存算分离:Colossus+分布式计算)。

  • 存储(Colossus)与计算分离的全球分布式架构 官方文档。

42 多模能力 部分支持

部分支持(关系+JSON+全文;向量待验证)。

  • JSON 类型、全文搜索(2023+)官方文档。
  • 向量检索能力待验证 待验证。

43 FinOps 成本可观测性 有

有(按处理单元计费,标签+预算告警完备)。

  • 按处理单元/节点小时与存储计量,支持 labels 做实例级成本归因。官方文档
  • Cloud Billing budgets 支持阈值告警,账单可导出 BigQuery 分析。官方文档

44 驱动与多语言生态 有

有(官方多语言客户端;JDBC 靠 Simba)。

  • 官方 Java/Python/Node/Go 客户端 官方文档。
  • JDBC/ODBC 靠 Simba 第三方 社区共识。

45 物化视图 无

无(查证为无物化视图能力)。

  • 无物化视图(查证为无)官方文档。
  • 预聚合在应用层或 BigQuery 侧 社区共识。

46 支持跨云 无

无(GCP 绑定,无跨云)。

  • 仅 GCP,无其他云版本 官方文档。
  • 迁出需导出重建,无跨云复制 社区共识。

47 热点数据更新能力 部分支持

部分支持(冲突 abort 重试,单行热点官方确认拆不动)。

  • 并发控制原语:默认 Serializable,写操作加悲观锁(读共享锁与排他锁带优先级);热点 key 的并发更新会导致等待或被 abort 官方文档。
  • 冲突行为:高争用返回 ABORTED 错误;单条 DML 或单行写经内部临时事务执行时由客户端库静默自动重试,显式事务必须由应用层重试整个事务 官方文档。
  • 内置缓解:负载驱动的自动分裂可拆分热点 split,但官方明确记载单行热点(UNSPLITTABLE_REASONS=HOT_ROW)不可拆,行内无法加分裂点 官方文档。
  • 衰减形态:单 key 高写入率下 abort 率随并发上升,重试放大延迟;热点 split 的瓶颈在其 leader 单点上 官方文档。
  • 应用层模式:官方建议分片计数器(多行分摊、读时汇总)、重设计 schema 分散负载、降低热点 split 的 QPS;单调递增主键是官方点名的反模式,改用 UUID 或哈希键打散;代价是读侧聚合复杂度与建模成本 官方文档。

招牌能力

  1. TrueTime + 外部一致性:把"全球线性化"做成产品

它是什么:每个数据中心 GPS + 原子钟,TrueTime API 返回的不是时间点而是区间 [earliest, latest];事务提交时取 commit_ts = TT.now().latest,然后 commit-wait(等到 TT.now().earliest > commit_ts 才释放锁、回 ACK),保证任何后开始的事务拿到更大的时间戳——全球任意两节点的因果序与实时序一致。 为什么是真本事:不靠单点授时中心、不靠中心化协调器,CockroachDB 的 HLC 方案在同样问题上只能做到可串行化而保不住跨键线性化(Jepsen 2017 确认其 causal-reverse 为 by-design)。Spanner 是极少数在论文之外、生产了 10 年以上的实现。 边缘真相:① 每次提交固定支付不确定性窗口(通常个位数 ms,且常被 Paxos quorum RTT 掩盖——官方口径);② TrueTime 是 Google 内建能力,你无法在别处复现,选了 Spanner 就等于把正确性赌在 Google 的时钟基建上;③ 若时钟不确定性超界,Spanner 选择阻塞而非冒险——这是保正确性的设计,但意味着极端时钟故障时写停摆。 证据:OSDI 2012 论文;Google Cloud 官方博客《Strict Serializability and External Consistency in Spanner》;2025 ACM SIGMOD Systems Award(厂商口径荣誉)。

  1. 无感水平扩展:自动分片、自动再平衡

它是什么:数据按主键 range 切分为 splits,负载/大小变化时自动分裂与迁移,无手动 reshard;加 node/PU 在线完成。 为什么是真本事:从单库 MySQL 长大到跨区多写,传统路线要经历"分库分表 + 应用层路由 + 一致性自理"的重构;Spanner 把这条路走完了且对外只暴露"加算力"。 边缘真相:① 扩展的是算力配额,热点键的单 split 吞吐天花板不会因加节点而消失——加 10 个节点也救不了一个热点主键(见深水区二);② 扩容按 node-hour 计费,缩容不及时就是烧钱;③ 自动再平衡的 split 迁移在后台吃 IO/网络,极端时可被观测到(Key Visualizer 可见)。

  1. 交错表(Interleaved Tables):物理共置的父子关系

它是什么:子表行与父表行按主键前缀物理存储在一起,INTERLEAVE IN PARENT... ON DELETE CASCADE;父+子的点查/join 是本地操作。 为什么是真本事:这是"分布式 join 很贵"问题的结构性解法——把访问模式编码进物理布局,90%+ 访问走父键的场景下,跨表读的延迟和成本都下来。 边缘真相:① 交错关系建表时确定,事后不可更改——建模错了要重建表迁数据;② 父子基数 1:N 且 N 极大(>10K 级)或子行独立高频更新时,交错反而制造热点/锁争用;③ ON DELETE CASCADE 对金融类数据是危险默认(删父带走一切),社区迁移指南明确建议金融表用 ON DELETE NO ACTION。 证据:官方 schema 设计文档;多份社区迁移技能指南一致建议。

  1. 双重 SQL 方言 + 多模型一库

它是什么:同一引擎同时讲 GoogleSQL 和 PostgreSQL 方言;之上叠加 Spanner Graph(GQL/openCypher)、ScaNN 向量检索(单索引 100 亿+向量,厂商口径)、全文检索、JSON/ARRAY/STRUCT 类型、Change Streams。 为什么是真本事:OLTP 主库顺手做图遍历、向量召回、CDC 下游,不用为每个模型再搭一套库——2026 年 Google 把它包装成"Agentic Data Cloud"底座,方向是对的。 边缘真相:① PG 方言是"子集 + 扩展",不是真 PG(见深水区五);② 图/向量/列存都是外挂能力,重度场景(大规模 OLAP、专业图分析)仍建议联邦到 BigQuery/专用引擎——官方自己也把重分析定位为"联邦",不是"原生"。

  1. Spanner Omni:GCP 之外的逃生舱

它是什么:2025 年发布的可下载容器化 Spanner,跑在 VM/Linux 容器/Kubernetes,可部署在 on-prem、AWS、Azure、边缘;支持与 GCP 托管版组成主备(热冷 failover)、多主权 jurisdiction 部署。 为什么是真本事:它部分回答了 Spanner 头号结构性批评——"只能跑在 Google Cloud"。对受监管行业(数据主权、灾备合规)是实质性解绑。 边缘真相:① 仍是专有许可,不是开源,商用条款/价格不明(需联系销售,待验证);② TrueTime 在 GCP 之外如何保证授时精度,官方细节未完全公开——全球强一致的魔法在自有机房里打几折,待验证;③ 自运维后,"零运维"这个最大卖点就没了。

深水区

深水区一:TrueTime 与外部一致性——正确性的基石,也是单点信任(domain:事务与时间)

  • 机制:GPS + 原子钟的 TrueTime 区间授时;提交走 Paxos quorum + commit-wait;只读事务取安全时间戳、无锁、可由任意已 apply 到该时间戳的副本服务。
  • 推到边缘:① 跨区写延迟 = 洲际 RTT + commit-wait,亚毫秒 OLTP 别想;② 时钟不确定性超界时写阻塞(保正确弃可用,CP 写进基因);③ 读-写事务的高争用场景下可串行化导致 abort 率上升——官方为此新增了 Repeatable Read(快照隔离,有写偏风险)做泄压阀,等于承认"最强隔离"在热点下有税。
  • 选型含义:需要全球多写 + 线性一致(金融账本、库存、监管系统)时它是极少数答案;但"全球强一致"的代价是写延迟下限由物理距离决定,选型前必须用真实跨区拓扑压测,而不是看单区数字。

深水区二:交错表与主键设计——建模即分片,错了没有后悔药(domain:数据建模)

  • 机制:range 按主键分区为 splits;交错表父子物理共置;单调递增键(自增 ID、时间戳)把所有新写打到同一个 split 末尾。
  • 推到边缘:① 单调键热点是最大 gotcha:吞吐被单个 split 封顶,加节点无效——HN 有用户为此在前面搭了"动态加内存的 write-through 缓存",每月多出可观的额外成本(社区案例口径),最后发现读多写少场景下"PG + 缓存"更便宜;② 交错关系不可事后修改,N>10K 的父子扇出或子行独立更新会把局部性优势变成锁争用;③ 官方限额硬约束:单 commit 8 万 mutations、commit 100 MiB(2026-09 起 DML 的 8 万上限放宽到单语句级),大事务/ETL 必须用 Partitioned DML 或拆批——这是从 MySQL 迁过来最容易踩的坑。
  • 选型含义:POC 必须用真实主键分布 + 真实事务模型压测;主键设计是 day-1 架构决策,不是 DBA 后期调优项。UUID v4 / bit-reversed / 哈希打散三选一,没有银弹。

深水区三:stale read 与延迟权衡——一致性是有旋钮的,但只有两档(domain:一致性/性能)

  • 机制:强读走 leader、线性一致;stale 读(精确时间戳/有界过期)可由任意副本无锁服务;只读事务复用同一时间戳;MVCC 版本保留默认 1 小时、最长 7 天(超长保留增加存储成本)。
  • 推到边缘:① 跨区强读的延迟 = 到 leader 区的 RTT,全球读多写少场景下,不加 stale 读等于为不需要的强一致付延迟税;② 版本保留拉长到 7 天做 PITR,代价是旧版本存储膨胀——保留期是按库配置、按存储计费的;③ stale 读的"过期界"由应用自己定,定错了就是业务 bug,不是数据库 bug——这个责任边界官方文档不会替你划。
  • 选型含义:读写比、地域分布决定了你要不要开 stale 读;7 天 PITR 是逻辑误删的救命绳,但别把它当备份策略的全部(另有最长 1 年备份)。

深水区四:成本模型与起步门槛——为"存在"付费,不为"使用"付费(domain:成本)

  • 机制:计算按 node-hour/PU-hour 持续计费(实例存在即走表,与 QPS 无关);存储按 GB-month(含多副本);跨区复制按量计费;多区域按每副本算力计费;三档版本 Standard/Enterprise/Enterprise Plus 功能与单价不同。
  • 推到边缘:① 小规模/低负载场景下,Spanner 的"地板价"显著高于 Cloud SQL(社区反复验证的共识;Google 自己也承认"expensive"印象源于早期 3 节点起步,granular 实例 + 90 天试用是补救);② 账单三大黑洞:闲置算力(忘了缩容)、多区域每副本计费(全球部署成本乘数)、长 PITR 保留 + 备份留存(存储膨胀);③ 按"存在"计费意味着流量低谷期也在烧钱——Autoscaler 是必选项,不是可选项。
  • 选型含义:做 TCO 时要把"3 年持续算力 + 跨区复制 + 备份"一起算;和 Aurora DSQL(按请求计费、可缩零)是两种哲学:Spanner 奖励稳定高基线负载,惩罚小而波动的负载。

深水区五:PostgreSQL interface 的兼容边界——"能连"不等于"能迁"(domain:兼容/迁移)

  • 机制:PG 方言是"PG 语法子集 + Spanner 扩展";PGAdapter 提供 PG 线协议代理。
  • 推到边缘(官方文档查证为无,非"未找到证据"):PG 方言不支持 triggers、SERIAL、SAVEPOINT、事务性 DDL、partial index、extensions、FDW、用户自定义类型/函数/操作符;存储过程整体不支持(仅 CALL 调用内置示例过程);psql 仅支持 \d \dt \dn \di \l 几个 meta 命令;PGAdapter 仅支持 password 认证、COPY 仅 STDIN/STDOUT BINARY。JDBC/客户端库是正路,PG 生态工具链是"部分可用"。
  • 选型含义:从 PG 迁过来的收益主要是"应用层少改 SQL 方言",但触发器/存储过程/扩展重度用户等于重写;别把"PG 兼容"理解成"把 PG dump 倒进去就能跑"——schema 重设计(交错、键打散)才是大头。

深水区六:与 AlloyDB 的定位三角——Google 自己画的线(domain:定位与选型)

  • 机制:Google Cloud 官方三件套:Cloud SQL = 标准开源托管(最便宜、lift-and-shift);AlloyDB = PG only,高性能 HTAP(主实例纵向写扩展天花板,跨区异步);Spanner = 无限水平写扩展 + 全球强一致 + 99.999% SLA厂商口径。
  • 推到边缘:① 单区 PG 负载上 Spanner:为用不上的全球一致付了数倍账单和建模改造成本,性能感知为零——这是最常见的"选错工具";② 需要超大单库/无限写扩展/全球多写时,AlloyDB 的主实例写天花板和异步跨区是硬伤,Spanner 是唯一答案;③ MySQL/SQL Server 团队:AlloyDB 是 PG only,Spanner 有 MySQL 函数包但内核仍是 Spanner,两边都没有"零改造"选项。
  • 选型含义:三选一先看写扩展需求和一致性需求,再看方言锁定;AlloyDB 和 Spanner 不是竞品,是 Google 按"规模/一致性"切分的两档答案。

客户经验

内核 TrueTime + 外部一致性 —— 全球多活强一致的唯一解

一句话
跨大洲多活、读写强一致、且一致性包含真实时间顺序(外部一致性)——31 款里没有对手的领地;Google 广告计费后端 F1 在上面跑了十多年。
窄场景
全球化业务的"钱/账"类核心数据——广告计费、支付账本、库存扣减;要求任意 region 写入、任意 region 读到最新、且"先发生的交易在全局先成立";不一致 = 直接经济损失的场景。
机制
TrueTime 是硬件时钟源(GPS + 原子钟)给出的带不确定性区间的时间戳(通常 ε < 7ms)。事务提交时做"提交等待"(commit wait):等到不确定性窗口彻底过去才真正提交,从而保证:真实时间上先提交的事务,时间戳一定更小。这就是外部一致性——等价于严格可串行化 + 真实时间顺序。多数分布式库只做到可串行化(事务顺序自洽),不保证与真实时间一致。
生产验证
F1(Google AdWords 广告后端):5 副本跨约 100ms 地理距离,commit 延迟 50–100ms,承载广告计费——"广告超预算 = 直接亏钱"的场景,2012 年起生产使用(Google 官方口径);Google 官方博客系统阐述该保证(https://cloud.google.com/blog/products/databases/strict-serializability-and-external-consistency-in-spanner/)。
竞品差距
CockroachDB 默认可串行化 + HLC 混合逻辑时钟,无硬件 TrueTime,做不到外部一致性的时间保证;TiDB 多 AZ 强一致、跨洲多活语义弱;YugabyteDB xCluster 异步双活有 RPO。"全球多活 + 强一致 + 真实时间顺序"三者兼得,31 款只有 Spanner。
证据等级
厂商论文/官方博客(机制)+ Google 第一方生产使用(F1/Ads,Google 官方口径)
最后核验
2026-10-01

内核 交错表(Interleaved Tables)—— schema 设计即物理布局

一句话
父子表在 schema 层声明交错,行在物理上共置于同一分片,跨表 join 不出分片——用对了是神器,用错了是脚铐。
窄场景
强层次数据模型(客户→订单→订单明细、租户→其所有业务表),且查询模式 90% 沿着层次走;需要分布式扩展但不想为每次 join 付出跨节点代价。
机制
`INTERLEAVE IN PARENT` 让子表行与父表行按主键前缀物理共置在同一个 split/directory 内:沿层次的点查/join 是分片内本地操作,不走分布式事务。代价:交错层级过深或单个父行扇出过大(一个客户上亿订单)会制造大 split 热点。这是把"物理数据布局"暴露给 schema 设计师的罕见设计。
生产验证
Google 官方 schema 设计最佳实践文档将其列为核心建模手段并给出反模式警告(https://docs.cloud.google.com/spanner/docs/schema-design)。诚实备注:Spanner 上手最陡的学习曲线不在 SQL,而在交错建模——新手最常见的生产事故就是交错层级设计错,"先画访问路径再定交错"是社区建模第一课。
竞品差距
TiDB 无物理共置语义,join 必走分布式;CockroachDB 无交错表概念,靠 geo-partitioning 做地域共置;YugabyteDB colocated tables 是后加的类似特性,成熟度与文档完备度不及。"层次建模 = 物理共置"的表达力是 Spanner 独有。
证据等级
官方文档 + 社区实践总结(建模方法论层面共识强)
最后核验
2026-10-01

避坑 贵是"时间的物理价格" + 单调主键写热点

一句话
Spanner 的贵不是定价策略,是全球时钟同步与多副本提交的物理成本;且自增/时间戳单调主键会把写压到单个分片——"贵 + 热点"是同一枚硬币的两面。
窄场景
小 workload/低 QPS 场景用 Spanner(起步成本不划算);从 MySQL 带着 AUTO_INCREMENT 习惯直接迁移的团队最容易中招。
机制
成本侧——TrueTime 硬件、多洲多副本、提交等待,每一分钱都对应物理机制。价格演进史:2019 年前最低配 3 节点约 $2000/月,2019 年降为 1 节点起售,2022 年细化到 0.1 节点颗粒度——Google 一路在降低"起步贵"的门槛。热点侧——Spanner 按主键 range 切分 split,单调递增主键让所有新写入落在最后一个 split,退化为单分片写(range 分片的通病);标准解法是 UUID/位反转/哈希打散主键。
生产验证
日本工程师 apstndb 的独立成本分析:第三方量化测算 Spanner 与 Firestore 的盈亏平衡点,结论"贵得明明白白"(https://dev.to/apstndb/is-spanner-really-that-expensive-the-surprising-break-even-point-with-firestore-2ma9)。诚实备注:单调主键写热点的社区踩坑帖本次未留存逐字 URL。
竞品差距
CockroachDB/TiDB 同样有单调主键热点问题(range 分片的通病),但起步成本低得多;Aurora 单区内无此问题。结论:为全球一致性付的物理税,Spanner 最贵也最透明。
证据等级
独立成本分析(量化)+ 社区踩坑共识(热点帖未留存逐字 URL)
最后核验
2026-10-01

用户最买账的 5 点

  1. 近零运维的全托管
  2. 为什么是真的:引擎补丁/升级零停机、无维护窗口;备份计划默认开启(每日全备、7 天保留可配);扩缩容在线;版本升降级约 10 分钟零停机。DBA 的工作从"运维"变成"建模 + 成本管理"。
  3. 边缘与限度:零运维的前提是你接受"黑盒"——split 迁移、compaction、GC 全是 Google 的,出了诡异延迟你只能看 Key Visualizer 干瞪眼(社区有"docs 不写 gotcha"的抱怨);Spanner Omni 自运维后这个优点直接作废。
  4. 出处:官方文档;社区迁移案例(Glance)2023;社区共识,采集 2026-09。
  5. 全球多写 + 外部一致性,真的有人跑出来
  6. 为什么是真的:TrueTime + Paxos 不是论文概念,Google 内部 2012 年起生产验证(AdWords/Play),外部客户金融/零售/游戏多有全球部署;99.999% 多区域 SLA(官方口径)。
  7. 边缘与限度:SLA 是"厂商口径",且只保"可用性"不保"你的延迟";跨区写的延迟下限由物理定死,SLA 赔不了你的 P99。
  8. 出处:官方文档;OSDI 2012 论文;2025 SIGMOD Systems Award厂商口径。
  9. 可观测性是第一梯队
  10. 为什么是真的:Key Visualizer 热力图 + SPANNER_SYS 的 SQL 化内省(查 top SQL、锁、事务统计不用学新工具)+ Spanner Studio 查询计划可视化,热点定位效率在托管库里算顶级。
  11. 边缘与限度:强在"看",弱在"改"——看到热点后,解法还是改主键/加节点,没有在线重分片旋钮给你拧。
  12. 出处:官方文档;Glance 迁移案例社区实测。
  13. PITR + 备份体系完整
  14. 为什么是真的:版本保留最长 7 天、微秒精度时间点恢复、整库或另建库恢复、备份最长 1 年、跨区拷贝、backup pointer 快速首字节。逻辑误删/坏发布回滚有成熟做法。
  15. 边缘与限度:7 天窗口是硬上限,超了只能靠备份;小粒度恢复(几行)仍是手动活,RTO 取决于人工脚本——官方白皮书自己也承认。
  16. 出处:官方灾难恢复文档;Spanner 数据保护白皮书。
  17. 弹性与成本工具在补齐
  18. 为什么是真的:granular 实例(100 PU 起)、托管 Autoscaler(含非对称只读区)、Data Boost(分析负载隔离到独立算力,不影响 OLTP)、列存引擎预览中(官方口径分析扫描加速 up to 200x)。"贵"的地板在逐年降低。
  19. 边缘与限度:Data Boost 免费试用实例不支持;列存引擎仍在 Preview;Autoscaler 配不好会在业务高峰期扩容滞后——弹性不是"不用管",是"换一种方式管"。
  20. 出处:官方 release notes(2025-06/08);官方定价页。

吐槽清单

分类吐槽影响版本状态
成本坑起步门槛高:按"存在"计费,小规模/低负载场景地板价显著高于 Cloud SQL;"expensive" 是社区第一印象全版本partially-fixed(granular 100 PU、90 天试用、emulator 逐年补救,但哲学未变)
成本坑多区域按每副本算力计费,全球部署成本乘数效应明显;闲置算力持续走表全版本open(靠 Autoscaler + 右 size 缓解)
性能坑单调递增主键造成单 split 写热点,加节点无效;最大 gotcha,day-1 设计约束全版本open(文档明确警示,属设计约束)
性能坑OLAP/宽表扫描弱:行存 OLTP 内核,报表查询可达数十秒级(社区 vendor 帖实测口径,需交叉验证)全版本partially-fixed(Data Boost、列存引擎 Preview 中)
性能坑跨区写延迟 = 洲际 RTT + commit-wait,延迟敏感型全球写场景吃力全版本open(物理定律,by-design)
兼容坑PG 方言缺 triggers/SERIAL/SAVEPOINT/事务 DDL/partial index/扩展/自定义类型函数;存储过程整体不支持全版本open(官方文档查证为无)
兼容坑PGAdapter 残缺:psql meta 命令仅 5 个、COPY 受限、仅 password 认证全版本open
运维坑官方文档 gotcha 覆盖不全,性能陷阱靠社区踩坑口口相传(HN 高赞抱怨)全版本open
运维坑session 泄漏(事务未提交/回滚)导致应用阻塞,需应用层纪律全版本partially-fixed(multiplexed session 简化了模型)
迁移坑交错关系建表时确定、事后不可改;键设计错了=重建表迁数据全版本open(设计约束)
授权坑闭源专有,GCP 锁定;Spanner Omni 商用条款不明,TrueTime 在 GCP 外精度待验证全版本partially-fixed(Omni 2025 发布,细节待验证)
生态坑实践社区小于 PG/MySQL;中文资料中等偏下,招人/排障依赖英文全版本open
一致性CP 选择:少数派分区丢 quorum 即拒写;厂商以"Google 私有网络分区极罕见"辩护,属运营论证非 CAP 豁免全版本open(by-design)

判决

  • 一句话定位:为"全球多写 + 线性一致 + 零运维"付费的分布式 OLTP 终点之一;不需要这三样时,它是最贵的错误答案。
  • 适合谁:
  • 跨区多写的全球 OLTP(金融账本、库存、计费),且正确性要求压倒一切
  • 单库 MySQL/PG 已到扩展天花板、又无法接受最终一致性的团队
  • 愿意 All-in GCP、要"写完代码就不用管数据库"的团队
  • 受监管行业需要"托管主 + 自运维备"双活/主权部署(Spanner Omni 路线,待验证细节)
  • 不适合谁:
  • 单区中小规模应用(成本地板 + 建模改造成本双杀,Cloud SQL/AlloyDB 更合适)
  • 分析/扫描密集型负载(走 BigQuery 联邦,别硬上)
  • 延迟极度敏感、吃不下跨区提交等待的场景
  • 需要可移植、厌恶厂商锁定的团队(Omni 缓解但未根除)
  • 重度依赖 PG 触发器/存储过程/扩展,或 MySQL 偏门特性的存量系统
  • 迁移成本:
  • MySQL → 中:80+ MySQL 函数 UDF 包降低 SQL 改造成本,但主键打散 + 交错建模是必修课;自增 ID 依赖必须重构
  • PostgreSQL → 中高:PG 方言 + PGAdapter 降低方言摩擦,但 triggers/SERIAL/扩展/存储过程缺失意味着逻辑层重写;dump 直倒不可行
  • Oracle → 高:无 Oracle 兼容层,PL/SQL 生态零对应,只能应用层重写 + 数据迁移

来源与待验证清单

  • 架构与一致性:OSDI 2012 Spanner 论文;Google Cloud 博客《Strict Serializability and External Consistency in Spanner》;官方 TrueTime/外部一致性文档
  • 复制与限额:官方 replication 文档;官方 quotas 文档(80,000 mutations/commit、100 MiB commit);2026-09 官方博客《Spanner removes DML mutation limits》
  • 安全:官方 CMEK 文档;Cloud Audit Logs 机制(GCP 通用文档);fine-grained access control 发布博客
  • 备份/PITR:官方《Disaster recovery overview》《Recover data using PITR》;Spanner 数据保护白皮书
  • 建模:官方《Schema design best practices》《Schemas overview》;社区迁移技能指南(多份一致)
  • PG 兼容边界:官方《The PostgreSQL language in Spanner》(2026-02-03 更新,明确列出不支持项);官方 procedural language 文档(明确不支持存储过程);PGAdapter FAQ(GitHub)
  • 成本与版本:官方定价页(90 天试用、Standard/Enterprise/Enterprise Plus、计费模型);官方 editions 文档;第三方 2026 年对比分析(价格数字未采用)
  • Spanner Omni:Google Cloud 官方博客《Introducing Spanner Omni》(2025);2026-08 社区实测帖(待验证细节)
  • AlloyDB 定位三角:本项目 alloydb.md 深水区三(Google 官方三件套对比)
  • 第三方综述:druce/dbengines google-cloud-spanner.md(2026-06-04 研究,high confidence;其中 Jepsen 缺失、per-node 吞吐等标注⚠️未验证项,本档案未采纳其未验证数字)
  • 吐槽采集:Hacker News 相关讨论(2023–2025);社区迁移/成本分析帖;dev.to 成本拆解
  • 下次评审:跟踪列存引擎 GA、Spanner Omni 商用条款/授时细节、DML 限额放宽的文档落地、Enterprise Plus 功能矩阵变化