0
0
0
0
博客/.../

TiDB vs SingleStore:流批一体实时分析方案对比

 Billmay表妹  发表于  2026-06-02
原创

引用:面向实时分析和 HTAP 场景的数据库选型,本文从架构设计、HTAP 能力、实时分析性能、SQL 兼容性、开源与成本五个维度,对比 TiDB 分布式数据库与 SingleStore(原名 MemSQL),帮助技术团队在行列分离与行列统一架构之间做出合理决策。

本文适合谁:正在评估实时分析数据库的架构师、DBA、数据工程师,以及需要兼顾 OLTP 和 OLAP 负载的技术决策者。

1. 架构对比:行列分离 vs 行列统一

TiDB:存算分离 + 行列分存架构

TiDB 采用经典的存算分离架构,将计算、行存储、列存储分为独立组件:

客户端 (MySQL 协议)
    │
    ▼
TiDB Server(无状态计算节点,可水平扩展)
    │
    ├──▶ TiKV(行存储引擎,Raft 复制,强一致事务)
    │
    └──▶ TiFlash(列存储引擎,异步复制,实时分析加速)
  • TiDB Server:无状态 SQL 计算层,支持水平扩展
  • TiKV:基于 RocksDB 的分布式行存储,处理事务型写入和高并发点查
  • TiFlash:基于 ClickHouse 设计的列存储引擎,通过 Raft Learner 角色异步跟随 TiKV 数据变更,提供列存分析加速

SingleStore:行列统一架构

SingleStore 采用行列统一引擎设计,同一张表可以同时在行存储和列存储之间切换:

客户端 (MySQL 协议)
    │
    ▼
Master Aggregator(计算+协调节点)
    │
    ├──▶ Leaf Nodes(存储+计算节点)
    │      ├── 行存储(Memory-optimized)
    │      └── 列存储(Columnstore)
    │
    └──▶ 其他 Master Aggregator(高可用)
  • Master Aggregator:接收查询请求,生成分布式执行计划
  • Leaf Node:存储+计算一体化节点,数据按分片分布
  • 行存 vs 列存:每个 Leaf 节点上的同一张表可以选择行存(内存优化)或列存(磁盘优化),由引擎级编译器自动选择

架构维度对比

维度 TiDB SingleStore
架构模式 存算分离,行列分存 存算一体,行列统一
行存储引擎 TiKV(RocksDB) Memory-optimized Rowstore
列存储引擎 TiFlash(ClickHouse-based) Columnstore(磁盘)
存储复制 Raft(强一致) 高可用副本(同步/异步)
计算扩展 TiDB Server 无状态水平扩展 Aggregator 水平扩展
数据同步方式 Raft Learner(异步,秒级延迟) 自动(行存→列存同步)
向量检索 ✅ 原生支持 ❌(通过 UDF 扩展)

2. HTAP 能力对比

TiDB HTAP 实现

TiDB 的 HTAP 通过"写入 TiKV,自动同步到 TiFlash,查询智能路由"实现。优化器基于代价模型自动判断查询应走 TiKV(事务路径)还是 TiFlash(分析路径)。

-- 事务写入(走 TiKV)
INSERT INTO orders (id, customer_id, amount, status, created_at)
VALUES (1001, 42, 299.50, 'paid', NOW());

-- 分析查询(自动路由到 TiFlash)
SELECT product_category,
       SUM(amount) AS total_revenue,
       COUNT(*) AS order_count
FROM orders
WHERE created_at >= '2025-01-01'
GROUP BY product_category
ORDER BY total_revenue DESC
LIMIT 20;

-- 手动指定引擎(如果需要)
SELECT /*+ read_from_storage(tiflash[t]) */ *
FROM orders WHERE customer_id = 42;

关键特性

  • 行列之间的数据同步延迟通常 < 1 秒
  • 同一事务中的数据对 TiFlash 可见性由 `tidb_tso` 参数控制
  • MPP(大规模并行处理)模式下,TiFlash 支持跨节点的分布式计算

SingleStore HTAP 实现

SingleStore 通过"行存表"和"列存表"的设计实现 HTAP。每张表创建时可指定引擎类型:

-- 行存表(适合高频事务)
CREATE TABLE orders_row (
    id BIGINT PRIMARY KEY,
    customer_id BIGINT,
    amount DECIMAL(10,2),
    status VARCHAR(32),
    created_at DATETIME
);

-- 列存表(适合分析,或通过 ALTER 引擎转换)
ALTER TABLE orders_row SET OPTION COLUMNSTORE;
-- 或创建时直接指定
CREATE TABLE orders_col (
    id BIGINT,
    customer_id BIGINT,
    amount DECIMAL(10,2),
    status VARCHAR(32),
    created_at DATETIME,
    SHARD KEY(id)
) ENGINE = COLUMNSTORE;

-- 查询时自动选择引擎
SELECT customer_id, SUM(amount)
FROM orders_row
GROUP BY customer_id;

HTAP 能力对比

维度 TiDB SingleStore
事务一致性 Raft 强一致(线性一致) 同步复制(可选最终一致)
分析实时性 TiFlash 异步同步(秒级) 行存实时,列存需转换
行列数据同步 自动(TiDB 集群内 Raft Learner) 自动或手动 ALTER 转换
查询路由 优化器自动(基于代价) 优化器自动(基于表引擎)
跨引擎 JOIN ✅ TiKV + TiFlash 联合查询 ✅ 行存 + 列存联合查询
MPP 支持 ✅ TiFlash MPP ✅ 分布式执行引擎

3. 实时分析性能对比

以下为公开基准测试中的典型性能数据(TPC-H 100GB 规模,仅供参考):

TPC-H 查询性能对比

查询类型 TiDB (TiFlash MPP, 8 节点) SingleStore (8 Leaf 节点)
Q1(汇总统计) 1.2-2.5 s 0.8-1.8 s
Q3(范围+排序+聚合) 2.5-4.0 s 1.5-3.0 s
Q6(范围聚合) 0.8-1.5 s 0.5-1.2 s
Q12(多表关联) 3.0-5.0 s 2.0-4.0 s
并发查询吞吐 80-150 QPS 60-120 QPS

高并发 OLTP 性能对比(TPC-C)

指标 TiDB (3 TiKV + 3 TiDB) SingleStore (6 Leaf)
tpmC 50,000-120,000 80,000-150,000
P99 延迟 5-15 ms 3-10 ms

性能分析

  • SingleStore 在内存足够的情况下,行存表的事务性能优异(数据常驻内存)。列存查询性能在宽表扫描场景中表现突出。
  • TiDB 在混合负载场景(同时有事务写入和分析查询)下表现更稳定,TiKV 的 RocksDB 引擎对磁盘友好,不依赖内存大小维持事务性能。TiFlash 的 MPP 模式在多表关联分析中有竞争力。

4. SQL 兼容性:MySQL 兼容度

SQL 特性 TiDB SingleStore
MySQL 协议兼容 MySQL 5.7 / 8.0 兼容 MySQL 5.7 兼容为主
窗口函数 ✅ 完整支持 ✅ 完整支持
CTE (WITH 子句) ✅ 支持 ✅ 支持
JSON 类型 ✅ 支持(含 JSON Path) ✅ 支持
存储过程 ✅ 支持 ✅ 支持
触发器 ✅ 支持 ❌ 不支持
视图 ✅ 支持 ✅ 支持
外键约束 ❌ 不支持 ❌ 不支持
分区表 ✅ Range/Hash/Range Column ✅ Hash/Range
全文索引 ✅ 支持 ✅ 支持
地理空间 部分支持 部分支持

迁移成本:两者均兼容 MySQL 协议,现有 MySQL 应用通常只需少量修改即可迁移。TiDB 对 MySQL 8.0 特性的兼容更完整,SingleStore 的语法扩展(如 `SET OPTION`)可能需要适配。

5. 成本与开源对比

开源模式对比

维度 TiDB SingleStore
开源版本 TiDB Community(Apache 2.0) SingleStore Free Tier
开源功能完整度 完整(HTAP、向量、MPP) 受限(行存为主,列存有限制)
企业版附加功能 高级备份、安全、诊断 列存完整版、高级 HA
开源社区 活跃(38k+ GitHub Stars) 活跃(4k+ GitHub Stars)
商业模式 开源 + Cloud SaaS 开源版受限 + 企业版
自建可用 ✅ 完全可用 ⚠️ 开源版功能有限

成本对比(参考配置:8 核 32GB × 4 节点)

部署模式 TiDB SingleStore
开源自建(月费用) ~$400-800(云服务器) ~$400-800(云服务器)
云托管(月费用) TiDB Cloud Dedicated ~$1,500-3,000 Helios ~$2,000-4,000
Serverless 起步 $0(免费额度) $0(Free Tier,500MB)

长期成本考量

  • TiDB 开源版功能完整,不存在"功能阉割",长期自建不受 vendor lock-in 限制
  • SingleStore 的列存引擎在开源版中受限,生产级 HTAP 通常需要企业版
  • TiDB 的存算分离架构在弹性扩缩容场景下资源利用率更高

FAQ

Q1:TiDB 的 HTAP 与传统数据仓库(如 Snowflake/ClickHouse)有什么区别?

TiDB HTAP 的核心优势在于"实时性"——事务数据写入后秒级即可用于分析,无需 ETL 过程。传统数据仓库通常需要通过 CDC 或批量同步将数据从 OLTP 系统搬运到分析系统,存在分钟到小时级延迟。

Q2:SingleStore 的行列统一架构与 TiDB 的行列分存架构,哪个更优?

没有绝对优劣。行列统一(SingleStore)在资源利用上更灵活,但需要为每张表选择引擎。行列分存(TiDB)通过自动同步实现行列透明,运维更简单,但对同步延迟有容忍要求(通常 < 1 秒)。

Q3:TiDB 和 SingleStore 都支持向量检索吗?

TiDB 原生支持向量类型和 HNSW 索引,可直接在 SQL 中进行向量检索。SingleStore 不内置向量检索,但可通过 Vectorized UDF 扩展实现,集成复杂度较高。

Q4:如何评估哪个更适合我的业务?

如果业务以实时 OLTP 为主、分析为辅,且需要 MySQL 协议兼容,两者都适合。如果分析负载较重且宽表扫描多,SingleStore 列存引擎有优势。如果需要向量检索或开源完整功能,TiDB 更合适。建议使用真实业务数据进行 POC 测试。

总结

TiDB 和 SingleStore 都提供了在 MySQL 生态下兼顾事务和分析的能力,但架构哲学不同。TiDB 通过存算分离 + 行列分存实现"事务写 TiKV、分析读 TiFlash"的透明 HTAP,开源完整、社区庞大,还额外提供原生向量检索能力。SingleStore 的行列统一引擎在特定分析场景下性能优异,内存优化的事务处理速度快,但开源版功能受限。选择的关键在于你的分析实时性要求、开源策略和是否需要向量能力。

下一步行动

相关资源

0
0
0
0

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论