从 OLTP 到 OLAP:Spanner 到 StarRocks 架构演进与实现

同样的数据,放在不同的系统里,成本可以相差数倍。这是我们的用户完成 Google Spanner 到 StarRocks 迁移后的真实结果,分析成本直接降低了 70%--80%。

这一差距主要是因为 Spanner 是为事务设计的,计费模型也围绕事务场景构建。当分析负载逐渐堆积在上面时,不仅查询慢,资源利用率低,成本更是不断攀升。而 StarRocks 面向实时分析场景,从架构、性能到成本都更适合承载分析查询业务。

本文将介绍如何实现 Google Spanner 到 StarRocks 的数据迁移同步,让数据库架构更合理,同时有效控制成本。

Google Spanner 的局限

Google Spanner 是一款全球分布式关系型数据库,在强一致性、跨区域事务和高可用性方面有着成熟的应用。对于金融交易、订单系统、多区域数据一致性等核心业务场景,Spanner 都是非常可靠的选择。

但当分析查询开始大量集中到 Spanner 上时,它的局限性也逐渐显现。

在技术层面,Spanner 的设计目标是 OLTP。它采用行式存储,并围绕分布式事务做了大量优化,这些能力在事务写入场景中非常高效,但在大规模扫描、宽表聚合或复杂 Join 等分析型操作上并没有优势。在报表类 SQL 场景中,常常需要等待几十秒,甚至可能出现超时。

成本问题则更突出。Spanner 按处理单元(Processing Unit)持续计费,1 个节点约 6.2 元/小时。即使没有查询,计算资源仍然产生费用。在分析高峰期,为了避免查询变慢甚至影响线上事务,通常需要提前扩容节点。而在低峰期,这些扩容节点大多处于闲置状态,但费用却在不断累积。

举个例子,假设数据规模在 2TB 左右,部署 3 个节点用于分析负载,仅基础成本每月就接近 17000 元(计算约 13000 元,存储约 4000 元)。一旦分析查询增多,节点数通常需要扩展到 5--6 个,每月成本很容易超过 27000 元。

核心问题在于,Spanner 并不是为分析而设计的系统。 把分析负载运行在上面,既跑不快,成本又高。

为什么同步数据到 StarRocks

为了提高分析性能,控制成本,很多团队开始选择把数据同步到 StarRocks。StarRocks 是面向实时分析的云原生高性能 OLAP 数据库,在这一场景下可以帮助团队极大地降本增效:

  • **查询性能:**StarRocks 采用列式存储与向量化执行引擎,在聚合分析、宽表扫描场景下性能表现突出,与 Spanner 相比,同类分析查询通常有数十倍的提升。
  • 分析成本:StarRocks 支持存储计算分离架构,冷数据可以落到对象存储(如 GCS 或 S3)。计算节点可以按需使用,避免为闲置容量持续付费。整体成本相比 Spanner 可以降低约70%-80%

通过把数据从 Spanner 同步到 StarRocks,将事务层与分析层解耦,Spanner 继续承载核心交易业务,StarRocks 专注分析查询,性能更强,也更省钱。

数据同步方案选型

明确目标之后,关键问题在于如何将 Spanner 中的数据同步到 StarRocks。

常见方案其实并不少,但实现方式和复杂度差异很大。

定时导出 + 导入

这是最直接的一种方式,通过定时任务做数据导出,比如将 Spanner 数据周期性导出到对象存储(如 GCS),再导入到 StarRocks。

这种方式实现简单,但数据延迟较高,更适合离线分析或一次性迁移。

Dataflow 方案

借助 Dataflow 订阅 Spanner Change Streams,并将处理结果写入 StarRocks。

这种方式技术上可行,但开发周期长,而且 Dataflow 本身也在 GCP 计费,并不能达到降本的目的。

自建 CDC 链路

也可以基于 Google Spanner 的 Change Streams,自己实现一套 CDC(Change Data Capture)链路。通常做法是从 Spanner 拉取变更日志,解析成标准事件,再通过自建程序写入 StarRocks。

这种方式灵活性高,但也意味着你需要从头搭建一套系统,处理数据顺序、事务一致性、断点续传等各种问题。

上面这些方案都有一个共同点:需要团队自己开发,落地成本和运维成本都较高

如果希望开箱即用、减少自研投入,也可以考虑产品化的数据同步平台,比如 CloudCanal。

CloudCanal 最近支持了 Spanner 源端的数据迁移同步能力,是目前少数原生支持 Google Spanner 作为数据源的数据同步平台。在 CloudCanal,全量迁移和 CDC 增量同步集成在同一个数据链路里,系统内置类型映射与数据处理能力,全程可视化操作、可观测、可管理,完全不需要写代码。

整体数据链路如下:

在常规业务写入量下,同步延迟通常可以稳定在 3 秒内,满足绝大多数分析场景对数据实时性的要求。

实操演示

接下来,我们将演示如何在几分钟内,搭建出一条 Spanner 到 StarRocks 的实时链路。

步骤 1:安装 CloudCanal

进入 CloudCanal 官网,点击 免费社区版

参考 全新安装(Docker),安装 CloudCanal 私有部署版本。

安装完成后,用默认账号(test@clougence.com / clougence2021)登录控制台。

步骤 2:添加数据源

点击 数据源管理 > 新增数据源,填写以下信息,分别添加 Google Spanner 和 StarRocks。

添加 Google Spanner

  • 部署类型:谷歌云
  • 数据库类型:Spanner
  • 网络地址:填写连接 Spanner 实例的 IP 和 host
  • 认证方式:选择合适的认证方式

修改以下额外参数:

  • spannerProjectId:修改为 Google Cloud 项目 ID
  • spannerInstanceId:修改为 Spanner 实例 ID
  • spannerDatabaseId:修改为 Spanner 数据库 ID
  • customParams:修改为 Spanner 连接自定义 JDBC 参数

添加 StarRocks

  • 部署类型:自建
  • 数据库类型:StarRocks
  • Client 地址:填写连接 StarRocks 实例的 IP 和 host
  • 认证方式:选择合适的认证方式

修改以下额外参数:

  • privateHttpHost:修改为 FE/BE 节点的 IP 和 host

步骤 3:创建链路

点击 同步任务 > 创建任务,进入任务创建流程。

选择源端和目标端数据源,点击 测试连接

在功能配置页面,任务类型 选择 增量同步 ,并勾选 全量初始化

在表 & action 过滤页面,勾选要迁移的表。

在数据处理页面,勾选要迁移的列。

在创建确认页面,点击 创建任务

CloudCanal 将自动开始运行任务,在任务列表可查看进度。

总结

把分析负载从 Spanner 放到 StarRocks,解决的不只是一个成本问题,更是让两个系统各自负责自己更擅长的部分。Spanner 继续承担事务处理,StarRocks 专注分析查询,而 CloudCanal 作为中间的数据链路,负责把数据持续、稳定地连接起来。

当事务与分析不再混跑,架构会更清晰,资源使用也更合理,成本自然随之下降。

如果你也在寻找 Spanner 数据迁移同步的方案,或希望验证方案可行性,欢迎尝试 CloudCanal 免费社区版。

相关推荐
qiuyunoqy2 小时前
Redis 常见数据结构,编码方式
数据库·redis·缓存
Full Stack Developme2 小时前
Hutool TreeUtil 教程
大数据·windows
qq_424098562 小时前
HTML5中解决数据库版本号管理混乱的规范化建议
jvm·数据库·python
科技AI训练师2 小时前
2026工业风机行业观察:英飞风机在中高端通风排烟领域表现
大数据·人工智能
大大大大晴天️2 小时前
Flink技术实践-Flink指标监控全景指南
大数据·flink
Irene19912 小时前
Python下载第三方库:requests、oracledb,连接 Oracle 数据库,测试数据输出(切记不要操作或删除系统表)
数据库·python·oracledb
蓝眸少年CY2 小时前
Canal - 数据同步
大数据·canal
四维迁跃2 小时前
HTML5中SVG利用Javascript实现图形拖拽与缩放
jvm·数据库·python
中科天工2 小时前
中科天工智能包装技术是什么?
大数据·人工智能