Skip to content
横幅:NoSQL、NewSQL 与数仓——数据系统生态全景图

NoSQL、NewSQL 与数仓——数据系统生态全景图 ​

从 NoSQL 的弹性到 NewSQL 的强一致性,从 OLTP 的实时到 OLAP 的分析——数据系统是一个丰富多彩的生态系统,每种系统都有它最擅长的战场。

前十四篇文章,我们沿着 DDIA 的脉络,把数据系统的各个核心组件拆解了一遍。但我们还没有回答一个实际问题:在真实的生产环境中,这些技术怎么组合?

今天这篇文章,我们把视角拉高,看看整个数据系统的生态全景图。

从 NoSQL 到 NewSQL,从数据仓库到数据湖,从 OLTP 到 OLAP——理解这些技术之间的定位和边界,是做好技术选型的第一步。在可预见的未来,数据系统不会是“一种数据库打天下”,而是 多种技术共存的混合持久化生态。

一、OLTP vs OLAP:两种工作负载 ​

在讨论具体技术之前,先厘清一个基本分类。

DDIA 第三章提到,数据系统处理的工作负载大致分为两类:

维度OLTP(在线事务处理)OLAP(在线分析处理)
核心操作点查询、小范围查询、写入(INSERT/UPDATE/DELETE)全表扫描、聚合、JOIN、分组
数据特征最新状态,行级细粒度历史快照,列级粗粒度
用户群体终端用户、业务人员分析师、数据科学家
响应时间毫秒级(在线等待)秒~分钟级(离线批处理)
典型系统MySQL、PostgreSQLSnowflake、ClickHouse

OLTP 是“数据库的日常”——处理每一条订单、每一次登录、每一笔交易。OLAP 是“数据库的夜班”——等白天业务结束了,把大量数据拉出来做分析、出报表。

这两类工作负载对存储引擎的需求截然不同:

  • OLTP 需要行式存储,因为需要快速读写单条记录
  • OLAP 需要列式存储,因为分析查询只涉及少数列,列式存储可以大幅减少 I/O,同时列内数据同构,压缩率极高

二、NoSQL:为“非关系”场景而生的弹性数据库 ​

起源与驱动力 ​

NoSQL(最初是 Non-SQL,后来被解读为 Not Only SQL)兴起于 2010 年前后。它的出现不是要取代关系数据库,而是为了应对关系数据库不擅长的场景:

  • 超大规模数据:单机放不下,需要水平扩展
  • 高吞吐写入:每秒百万级写入,关系库撑不住
  • 灵活的数据模型:Schema 变化频繁,改表太痛苦
  • 高可用:不能有单点故障

NoSQL 的四大门派 ​

NoSQL 并不是一种技术,而是一个技术家族。

类型代表系统数据模型典型场景
键值存储Redis、Riak哈希表缓存、会话存储
文档存储MongoDB、CouchDBJSON/BSON内容管理、用户画像
列族存储Cassandra、HBase宽表日志、时序数据
图数据库Neo4j、JanusGraph图(顶点+边)社交网络、推荐

何时选 NoSQL? ​

选 NoSQL,通常是因为以下需求中的至少一项:

  • 写吞吐极高(每秒百万级)→ Cassandra、HBase
  • 数据量大到单机放不下(TB 级以上)→ 几乎所有 NoSQL 都支持水平扩展
  • Schema 极其灵活(每个文档结构都不同)→ MongoDB
  • 关系极度复杂(多跳查询)→ Neo4j

代价也很清楚:大多数 NoSQL 牺牲了事务(ACID)和 JOIN 能力,换取扩展性和性能。

三、NewSQL:既要扩展性,又要 SQL,还要 ACID ​

NoSQL 的遗憾 ​

NoSQL 解决了扩展性问题,但它留下了一个巨大的缺口:很多业务场景既需要水平扩展,又需要 SQL 和 ACID 事务。

电商、金融、游戏——这些行业的核心系统,不能接受“最终一致性”,也不能接受“不支持 JOIN”。但传统关系数据库在数据量和流量达到一定规模后,确实撑不住了。

什么是 NewSQL? ​

NewSQL 是一类保留了关系模型的 SQL 能力,同时具备 NoSQL 水平扩展能力的数据库。它对应用程序提供和传统关系数据库完全相同的 SQL 体验,底层却用分布式架构来支撑海量数据和超高吞吐。

典型代表:

系统特点
Google Spanner全球分布、TrueTime、强一致性
TiDBMySQL 协议兼容、Raft + MVCC
CockroachDB云原生、PostgreSQL 协议兼容
OceanBase金融级分布式数据库

NewSQL 的架构共性 ​

大多数 NewSQL 数据库遵循类似的设计:

  • 计算与存储分离:SQL 层(计算)和存储层(KV)分离,各自独立扩展
  • 共识算法做复制:Raft 或多 Paxos 保证数据强一致
  • 分布式事务:用 2PC 或 Percolator 模型支持跨节点事务
  • 自动分区与负载均衡:数据自动分片,自动再平衡

NoSQL vs NewSQL:选哪个? ​

维度NoSQLNewSQL
SQL 支持弱或不支持完整 SQL
ACID 事务通常不支持完整支持
水平扩展原生支持原生支持
一致性模型最终/因果为主强一致
运维复杂度低高
适用场景缓存、日志、画像、推荐核心交易系统

简单来说:如果你的业务强依赖 SQL 和事务(电商订单、金融账务、游戏充值),选 NewSQL;如果可以接受弱一致性和弱查询能力,选 NoSQL。

四、数据仓库与数据湖:分析系统的进化 ​

传统数据仓库 ​

数据仓库(Data Warehouse) 是专门为 OLAP 分析而构建的数据库。

与 OLTP 系统不同,数据仓库不直接服务终端用户,而是汇总来自多个 OLTP 系统的数据,供分析师做 BI 报表和数据挖掘。

核心特点:

  • 列式存储:只读取需要的列,大幅减少 I/O
  • 高压缩率:列内数据同构,压缩比极高
  • 批量导入:定期从 OLTP 系统 ETL 数据

典型代表:Snowflake、Teradata、Redshift、BigQuery。

数据湖的挑战:什么是“湖”? ​

数据湖(Data Lake) 是一个存储海量原始数据的集中式存储库,能够存储结构化、半结构化和非结构化数据,且通常以低成本对象存储(如 S3)为底座。

数据湖本身并不提供计算能力,而是与各种计算引擎(如 Spark、Presto)配合使用。存储与计算分离是数据湖的最典型特征。

维度数据仓库数据湖
数据模型高度结构化(Schema-on-write)原始格式(Schema-on-read)
数据质量高(ETL 清洗后入仓)低(原始数据直接入湖)
存储成本相对较高极低(对象存储)
查询性能极快(预建模、预聚合)取决于引擎配置
典型用户分析师、BI数据科学家、工程师
代表系统Snowflake、RedshiftDelta Lake、Iceberg、Hudi

近年来,Lakehouse(湖仓一体) 架构试图融合两者的优点——用数据湖的低成本存储 + 数据仓库的高性能查询。

列式存储详解 ​

列式存储(Column-Oriented Storage)是 OLAP 系统的核心优化手段。

在行式存储中,一行数据的所有字段在物理上连续存放。在列式存储中,同一列的数据在物理上连续存放。这意味着:

  • 查询只需要读涉及的列,而非整行
  • 同列数据同构,压缩率极高
查询类型行式存储 I/O列式存储 I/O
SELECT COUNT(*) FROM orders扫描所有列只扫描一列
SELECT SUM(amount) FROM orders WHERE date > '2026-01-01'扫描所有列只扫描 date + amount
SELECT * FROM orders WHERE id = 12345快速点查相对较慢

这也是为什么 OLTP 用行式、OLAP 用列式——不同工作负载,需要完全不同的存储布局。

五、HTAP:一个数据库同时做 OLTP 和 OLAP ​

为什么需要 HTAP? ​

传统架构中,OLTP 和 OLAP 是分离的:

  1. 业务数据写在 OLTP 系统(MySQL)
  2. 定期 ETL 将数据同步到数据仓库(Snowflake)
  3. 分析师在数据仓库上做 OLAP 查询

这个架构的问题:ETL 有延迟。如果业务需要实时分析(比如实时风控、实时推荐),等待 ETL 就不行了。

HTAP(混合事务/分析处理) ​

HTAP(Hybrid Transactional/Analytical Processing) 系统在一个数据库中同时支持 OLTP 和 OLAP 工作负载,实现在最新数据上做实时分析。

代表性系统:TiDB(TiFlash 列存引擎)、CockroachDB、SingleStore、SAP HANA。

HTAP 的实现方式 ​

HTAP 的实现通常有两种模式:

  • 统一存储:同一份数据同时支持行存和列存,写入时更新行存,异步同步到列存
  • 存储分离:行存处理 OLTP,列存处理 OLAP,两者之间实时同步

HTAP 适合对数据实时性要求高的场景(实时报表、实时风控),但它不是万能的——对极大规模的分析查询,专门的数据仓库仍然性能更好。

六、数据系统生态全景图 ​

把以上所有技术放在一张全景图中:

如何选择? ​

系统设计没有标准答案,但有决策框架:

场景推荐
核心交易系统(订单、账务、游戏充值)NewSQL(强一致 + SQL)
缓存、会话、计数器键值存储(Redis)
用户画像、内容管理、日志存储文档存储(MongoDB)
日志分析、时间序列列族存储(Cassandra)
社交关系、推荐、知识图谱图数据库(Neo4j)
数据分析、BI 报表数据仓库(Snowflake)
数据科学、AI 训练数据湖(Delta/Iceberg)
实时分析(风控、实时推荐)HTAP(TiDB + TiFlash)

关键是:用对工具。在一个系统里混用多个数据库不是架构混乱——而是用对了工具。

七、写在最后 ​

数据系统不是“一种数据库打天下”的世界。

从 OLTP 到 OLAP,从 NoSQL 到 NewSQL,从数据仓库到数据湖——每一种技术都是对特定场景下特定问题的回应。理解这个生态,不是要记住每一个产品的名字,而是要明白:

  • 数据系统本质上是为工作负载设计的——不同工作负载需要不同的存储和计算架构
  • 技术演进的驱动力是新的场景和新的需求——NoSQL 回应了扩展性,NewSQL 回应了扩展性与 SQL 的双重需求,HTAP 回应了实时分析
  • 多系统共存是常态——核心交易走 NewSQL,用户画像走 MongoDB,日志分析走 Cassandra,BI 报表走 Snowflake——这不是混乱,是成熟

正如 DDIA 所说:“没有单一的数据系统能够同时满足所有需求。我们需要根据应用场景,选择合适的工具组合。”

下一篇预告:DDIA 核心思想串讲——全书知识体系一张图

Released under the MIT License.