图灵奖系列 · DoggyDad 原创

Michael Stonebraker:数据库的多形态革新者,从Ingres到Postgres,再到"一个引擎不能统治一切"

Michael Stonebraker:数据库的多形态革新者,从Ingres到Postgres,再到"一个引擎不能统治一切"

ANSWER-FIRST SUMMARY

本文回答什么问题

Michael Stonebraker:数据库的多形态革新者,从Ingres到Postgres,再到"一个引擎不能统治一切"

  • 主题分类:图灵奖系列
  • 关键词:图灵奖、计算机历史、算法、人工智能、数据库、操作系统
  • 人物实体:Michael Stonebraker

图灵奖第四十九届(2014)| Michael Stonebraker:数据库的多形态革新者,从Ingres到Postgres,再到”一个引擎不能统治一切”

一句话概括:当别人试图打造”万能数据库”时,他坚信”没有一种数据库适合所有场景”——从关系型Ingres到对象关系型Postgres,再到列存储C-Store、流处理StreamBase,他用40年证明:不同的数据问题需要不同的引擎。

🏆 获奖简介

Michael Ralph Stonebraker(迈克尔·拉尔夫·斯通布雷克,1943-)是现代数据库系统的连续革新者,多形态数据库架构的先驱

  • 出生时间:1943年10月11日
  • 出生地点:美国马萨诸セッツ州纽伯里波特
  • 主要成就:创建Ingres、Postgres、C-Store、H-Store、SciDB等多个影响深远的数据库系统
  • 获奖年份:2014年
  • 获奖原因:在现代数据库系统底层概念与实践方面的根本性贡献

为什么他是第四十九位? 1970年代,Edgar Codd提出关系模型理论,但理论到实践的鸿沟巨大。Stonebraker用Ingres证明关系数据库可以高效实现,成为商业数据库(如Oracle、SQL Server)的蓝本。1980年代,当所有人都在优化关系模型时,他看到了对象、复杂数据类型的需求,创造了Postgres(PostgreSQL的前身),开创对象关系数据库时代。进入21世纪,他又提出”一刀切的数据库已死”理念,针对不同负载(分析、流处理、科学数据)设计专用引擎。从学术界到产业界,他创建了至少9家数据库公司,其中VoltDB、Vertica等成为各自领域的标准。他不仅是技术天才,更是将学术创新转化为产业价值的大师。

🚀 重大贡献

1. Ingres:关系数据库的工程实现先驱(1973-1985)

背景(1970年代初):

  • 理论突破:Edgar Codd 1970年发表《A Relational Model of Data for Large Shared Data Banks》
  • 业界怀疑:关系模型被认为”太慢、不实用”
  • 主流技术:层次数据库(IMS)、网状数据库(CODASYL)
  • 挑战:如何将数学化的关系代数转化为高效系统?

Ingres的革命性设计

查询优化器的诞生

问题: SQL查询是声明式的(告诉”要什么”,不告诉”怎么做”),但执行效率差异巨大:

SELECT * FROM employees, departments
WHERE employees.dept_id = departments.id AND departments.location = 'Beijing'

两种执行计划

  1. 笨办法:先笛卡尔积(employees × departments),再过滤 → 百万级操作
  2. 聪明办法:先过滤location=‘Beijing’的部门,再join → 千级操作

Ingres的查询优化器

  • 分解-优化(Decomposition):将复杂查询分解为单变量查询
  • 启发式重写:自动调整查询顺序
  • 成本估算:基于统计信息选择索引或全表扫描

意义: 这是世界上第一个真正的关系查询优化器,奠定了现代数据库的核心技术。今天所有SQL数据库(Oracle、MySQL、PostgreSQL)的优化器都继承了这一思想。

QUEL语言的创新

为什么不用SQL? 当时SQL还是IBM的专利,且语法笨拙。Stonebraker设计了QUEL:

SQL vs QUEL对比

-- SQL (当时)
SELECT E.name, D.name
FROM employees E, departments D
WHERE E.dept_id = D.id AND D.location = 'Beijing'

-- QUEL (更自然)
RANGE OF E IS employees
RANGE OF D IS departments
RETRIEVE (E.name, D.name)
WHERE E.dept_id = D.id AND D.location = 'Beijing'

QUEL更接近关系代数,表达力更强(支持传递闭包等),但最终SQL因为标准化胜出。

商业化的波折与成功

学术 → 产业的艰难转型

  • 1980:Stonebraker与学生创立Relational Technology Inc. (RTI)
  • 产品:Ingres商业版
  • 竞争对手:Oracle(Larry Ellison盗用了Ingres的部分思想!)
  • 1994:被Computer Associates收购
  • 遗产:PostgreSQL、Actian Ingres继续发展

影响: Ingres证明关系数据库可以商业化,激发了Oracle、Sybase、Informix等数据库产业的爆发。

2. Postgres:对象关系数据库的开创(1986-1994)

背景(1980年代):

  • 关系模型的局限
    • 只支持简单数据类型(整数、字符串、日期)
    • 无法存储复杂对象(图像、地理信息、时序数据)
  • 面向对象编程兴起:C++、Smalltalk流行
  • 需求:数据库能否支持”对象”?

Postgres(Post-Ingres)的革命性特性

可扩展类型系统

传统数据库:类型固定(INT, VARCHAR, DATE) Postgres:用户可以定义新类型!

例子:地理信息系统

-- 定义新类型:点、线、多边形
CREATE TYPE point AS (x float, y float);
CREATE TYPE polygon AS (points point[]);

-- 定义新操作符:包含、相交
CREATE FUNCTION contains(polygon, point) RETURNS bool AS ...
CREATE OPERATOR @ (leftarg=polygon, rightarg=point, procedure=contains);

-- 查询:哪些城市包含某个坐标?
SELECT city FROM cities WHERE boundary @ point(116.4, 39.9);

意义: 这使得Postgres能支持任何领域的数据,无需修改内核。今天PostgreSQL的JSON、地理空间(PostGIS)、时序数据扩展,都源于此。

复杂查询:嵌套与继承

支持嵌套关系

-- 一个员工可以有多个技能
CREATE TABLE employees (
    name text,
    skills text[]  -- 数组类型!
);

SELECT name FROM employees WHERE 'Python' = ANY(skills);

支持表继承

CREATE TABLE persons (name text, age int);
CREATE TABLE students (grade int) INHERITS (persons);
CREATE TABLE employees (salary int) INHERITS (persons);

-- 查询所有persons(包括students和employees)
SELECT * FROM persons*;

规则系统与触发器

需求:数据库能否”主动”响应事件?

例子:物化视图

-- 创建摘要表
CREATE TABLE dept_summary (dept_id int, total_salary int);

-- 定义规则:当employees更新时,自动更新摘要
CREATE RULE update_summary AS
ON UPDATE TO employees
DO UPDATE dept_summary SET total_salary = ...

这是世界上第一个商业级触发器系统

时间旅行(Time Travel)

创新理念:数据库能否记住”历史”?

Postgres中,每行数据有时间戳,可以查询”过去的状态”:

-- 查询1990年1月1日的员工工资
SELECT * FROM employees AS OF '1990-01-01';

虽然因性能问题后来移除,但启发了时态数据库版本控制数据库的研究。

Postgres的遗产

  • 1996:开源为PostgreSQL,成为最先进的开源数据库
  • 今天:全球数百万安装,云数据库服务(AWS RDS、Google Cloud SQL)的首选
  • 技术领先:JSON支持、全文搜索、外部数据包装器(FDW)

3. “一个尺寸不适合所有”:专用数据库引擎(2000s-2010s)

Stonebraker的洞察(2005): 在论文《“One Size Fits All”: An Idea Whose Time Has Come and Gone》中,他宣告:

传统数据库试图满足所有需求(OLTP、分析、流处理),结果是什么都做不好。未来属于专用引擎。

C-Store / Vertica:列存储分析数据库

问题:OLTP数据库按行存储,分析查询需要扫描大量行但只用少数列,浪费巨大。

例子

-- 传统行存(浪费)
Row 1: [id=1, name='Alice', age=30, salary=50000, dept='IT', ...]
Row 2: [id=2, name='Bob', age=35, salary=60000, dept='HR', ...]
...
-- 查询:SELECT AVG(salary) FROM employees WHERE dept='IT'
-- 需要读取所有列,虽然只用salary和dept

-- 列存(高效)
Column salary: [50000, 60000, ...]
Column dept: ['IT', 'HR', ...]
-- 只读取需要的列,压缩效率高(相同列数据相似)

C-Store的创新

  • 列式存储:每列独立存储、压缩
  • 投影优化:预计算常用列组合
  • 混合存储:热数据按行(快速写入),冷数据按列(高效查询)

商业化

  • 2005:创立Vertica公司
  • 2011:被HP以3.4亿美元收购
  • 影响:亚马逊Redshift、Google BigQuery等云数仓都采用列存

H-Store / VoltDB:内存OLTP

问题:传统数据库为磁盘优化(缓冲池、B树索引),但现代服务器内存已达TB级,为何不全放内存?

H-Store的激进设计

  • 全内存:无磁盘I/O
  • 无锁:单线程执行事务(避免锁开销)
  • 分区:数据按分区键分布到多核心
  • 存储过程:预编译事务代码,极致性能

性能: 传统数据库(MySQL):~1000 TPS VoltDB:~100,000 TPS (100倍提升!)

商业化

  • 2009:创立VoltDB公司
  • 应用:金融交易、电信计费、广告竞价(低延迟场景)

SciDB:科学数据管理

问题:科学数据(天文、基因组、气候)是多维数组,关系模型不合适。

传统做法(笨拙):

-- 存储3D气象数据:温度[时间][经度][纬度]
CREATE TABLE climate (
    time int,
    lon float,
    lat float,
    temp float
);
-- 查询某时间片→需要复杂JOIN和聚合

SciDB(优雅)

-- 直接定义数组
CREATE ARRAY climate<temp:float>[time=0:*, lon=0:360, lat=0:180]

-- 切片查询
SELECT * FROM climate WHERE time=100

-- 数组运算
SELECT AVG(temp) FROM climate GROUP BY lon, lat

特点

  • 原生多维数组
  • 分布式并行计算
  • 支持科学计算算子(FFT、矩阵运算)

影响: NASA、NIH等机构使用,启发了TileDB、Rasdaman等系统。

StreamBase / Aurora:流数据处理

问题:传统数据库假设数据”静态存储”,但物联网、金融交易数据是”流”。

流数据库的范式转换

  • 传统:查询固定,数据变化 → SELECT * FROM logs WHERE timestamp > ?
  • 流处理:数据流动,查询固定 → “每分钟统计错误数”

Aurora的连续查询

-- 注册持续查询
CREATE CONTINUOUS QUERY error_monitor AS
SELECT COUNT(*)
FROM error_logs[RANGE 1 MINUTE]
GROUP BY server_id;

-- 数据流入时自动更新结果

商业化

  • 2003:创立StreamBase
  • 2013:被TIBCO收购
  • 影响:Apache Flink、Kafka Streams继承了思想

4. Stonebraker的企业家精神:从学术到产业

9家数据库公司的创业传奇

年份公司产品结果
1980RTIIngres1994被CA收购
1994Illustra对象关系数据库1996被Informix收购
2001StreamBase流处理2013被TIBCO收购
2003Vertica列存分析2011被HP收购(3.4亿)
2005VoltDB内存OLTP现存,开源+商业
2008Paradigm4SciDB继续运营
2012Tamr数据整合被Databricks收购
2016Goby基因组数据早期阶段

每个公司都源于学术项目,都解决特定领域问题。

Stonebraker的创业哲学

  1. 学术严谨:先写论文验证思想
  2. 原型系统:在大学开发开源原型
  3. 商业验证:找到刚需场景
  4. 产业化:组建团队,融资,市场拓展
  5. 退出或持续:被收购或独立发展

争议与批评: 有人批评他”学术资源商业化”,但他反驳:

“技术不产业化就是浪费。我的论文和代码都开源,任何人都能用。创建公司只是确保技术真正服务社会。”

🌍 对世界的深远影响

对数据库技术

关系数据库的实用化: Ingres证明关系模型不是”玩具”,直接促成了:

  • Oracle的商业成功(Larry Ellison承认从Ingres论文学习)
  • IBM DB2的推出(追赶Ingres的压力)
  • Microsoft SQL Server的诞生

PostgreSQL的生态: 今天PostgreSQL是:

  • 云数据库的基础:AWS Aurora、Google AlloyDB都基于Postgres
  • 创业公司首选:Stripe、Instagram、Reddit都用Postgres
  • 扩展生态:PostGIS(地理)、TimescaleDB(时序)、Citus(分布式)

专用引擎的繁荣: Stonebraker的”一个尺寸不适合”理念引发了数据库碎片化(但这是好事!):

  • 列存:Vertica、Redshift、ClickHouse、Apache Druid
  • 时序:InfluxDB、TimescaleDB、Prometheus
  • 图数据库:Neo4j、TigerGraph
  • 流处理:Apache Flink、Kafka Streams
  • 搜索:Elasticsearch、Solr

对数据科学

SciDB的理念影响了:

  • Xarray(Python):多维数组库
  • Dask:分布式数组计算
  • TensorFlow/PyTorch:深度学习框架的张量计算

对云计算

Vertica启发了云数仓

  • Amazon Redshift(2012):采用列存
  • Google BigQuery(2010):Dremel列存引擎
  • Snowflake(2014):分离存储与计算

VoltDB启发了分布式数据库

  • Google Spanner:全球分布式一致性
  • CockroachDB:Postgres协议的分布式版本

🏆 获奖理由(通俗版)

ACM官方:“在现代数据库系统的概念与实践方面做出了根本性贡献,尤其是Ingres、Postgres、C-Store等系统。”

更通俗的理解

如果把数据库比作工具,传统思维是造一把”瑞士军刀”(啥都能干,啥都不精)。Stonebraker说:

“别妄想一把刀切所有东西。切肉用切肉刀,削水果用水果刀,修螺丝用螺丝刀。”

他花40年证明:

  • OLTP用行存(快速读写单条记录)
  • 分析用列存(扫描大量数据)
  • 流处理用特殊引擎(持续查询)
  • 科学数据用数组(多维计算)

今天数据库的繁荣(从MySQL到Snowflake到ClickHouse),都源于他的多元化理念。

👤 个人生平与传奇

早年与学术生涯

背景

  • 1943年10月11日:出生于马萨诸セッツ州纽伯里波特
  • 1965年:普林斯顿大学电气工程学士
  • 1971年:密歇根大学计算机科学博士

博士论文: 关于操作系统的资源管理,但很快转向数据库(受Codd论文启发)。

加州大学伯克利分校(1971-1999)

  • Ingres项目(1973-1985):与Eugene Wong教授共同领导
  • Postgres项目(1986-1994):独立领导
  • 培养学生:数十位博士,多人成为数据库领域教授或创业者

MIT(1999-至今)

  • CSAIL(计算机科学与人工智能实验室)兼职教授
  • 继续研究与创业

性格与风格

争议性人物: Stonebraker以”直言不讳”著称,经常公开批评竞争对手:

  • 批评Oracle”技术落后,靠营销赚钱”
  • 批评Hadoop”架构笨拙,性能差”
  • 批评NoSQL”放弃一致性是倒退”

学术界评价

  • 支持者:“他敢于挑战正统,推动技术进步。”
  • 批评者:“他太商业化,论文质量下降。”

个人哲学

“我不相信’平衡’。如果你不是极端主义者,就不会创造真正新的东西。”

工作狂: 70岁仍在创业,学生回忆他经常凌晨2点发邮件讨论技术。

荣誉

  • 图灵奖(2014)
  • ACM软件系统奖(1988,Ingres;1992,Postgres)
  • SIGMOD Edgar F. Codd创新奖(1992)
  • IEEE John von Neumann奖章(2005)
  • 美国国家工程院院士(1997)

💭 为什么他值得纪念?

1. 他证明了学术与产业不矛盾

学术严谨 + 商业落地: 每个产品都源于顶级论文(SIGMOD、VLDB发表),但不止于论文:

  • Ingres → 50+篇论文 + 商业数据库
  • Postgres → 40+篇论文 + PostgreSQL开源生态
  • C-Store → VLDB 2005最佳论文 + Vertica公司

启示: 技术人不必在”象牙塔”与”商业化”间二选一。

2. 他改变了数据库的范式

之前(1970-1990s): 数据库 = 关系模型 = SQL = 通用解决方案

之后(2000s-): 数据库 = 多元化 = 不同负载用不同引擎

今天的证据: 一个典型互联网公司的数据栈:

  • OLTP:MySQL / PostgreSQL
  • 缓存:Redis / Memcached
  • 分析:Snowflake / BigQuery
  • 搜索:Elasticsearch
  • 时序:InfluxDB
  • 流处理:Kafka + Flink
  • :Neo4j

全是专用引擎!Stonebraker的预言成真。

3. 他影响了几代工程师

PostgreSQL社区: 全球数千开发者在他奠定的架构上持续创新。

创业生态: 许多数据库创业公司(Snowflake、Databricks、Confluent)的创始人都受其影响。

学术传承: 他的学生和博士后成为MIT、UC Berkeley、卡内基梅隆等名校的教授。

4. 他永不停止创新

70岁仍在创业(Tamr、Goby),关注:

  • 数据整合:如何整合企业的碎片化数据?
  • 基因组数据:如何管理人类基因组的PB级数据?

他的信念

“数据库领域永远有新问题。只要人类产生数据,就需要更好的管理工具。”

🔍 技术深度:列存储的原理

为什么列存更快?

行存(传统)

Row 1: [id=1|name=Alice|age=30|salary=50000]  <- 一行连续存储
Row 2: [id=2|name=Bob  |age=35|salary=60000]
Row 3: [id=3|name=Carol|age=28|salary=55000]

列存(C-Store)

Column id:     [1, 2, 3]                      <- 每列独立存储
Column name:   [Alice, Bob, Carol]
Column age:    [30, 35, 28]
Column salary: [50000, 60000, 55000]

优势1:只读需要的列

SELECT AVG(salary) FROM employees WHERE age > 25
  • 行存:读取全部4列,浪费75%的I/O
  • 列存:只读age和salary两列

优势2:更好的压缩 列中数据相似度高(例如性别列只有”M”/“F”),压缩率可达10:1甚至更高。

优势3:向量化执行 现代CPU有SIMD指令,可以一次处理多个数据:

// 传统代码:逐行处理
for (int i = 0; i < N; i++) {
    if (age[i] > 25) sum += salary[i];
}

// 向量化:一次处理4个
for (int i = 0; i < N; i += 4) {
    __m128 ages = _mm_load_ps(&age[i]);       // 加载4个age
    __m128 mask = _mm_cmpgt_ps(ages, 25);     // 比较
    __m128 sals = _mm_load_ps(&salary[i]);    // 加载4个salary
    sum += _mm_sum_ps(_mm_and_ps(mask, sals));// 条件求和
}

权衡:写入慢 列存的写入需要更新多个列文件,比行存慢。因此:

  • 行存适合OLTP(频繁小事务)
  • 列存适合OLAP(批量分析)

Vertica的混合架构

WOS(Write-Optimized Store)

  • 新数据先写入行存(内存中)
  • 快速写入,支持实时查询

ROS(Read-Optimized Store)

  • 定期将WOS数据批量转换为列存(磁盘上)
  • 高压缩、高查询性能

查询时: 合并WOS和ROS的结果,用户无感知。

这种设计被广泛采用:ClickHouse、StarRocks、Doris等都有类似机制。

🧪 实践意义:选择合适的数据库

Stonebraker的决策树

步骤1:确定负载类型

  • OLTP(在线事务):订单、用户管理 → 行存关系数据库(PostgreSQL、MySQL)
  • OLAP(在线分析):报表、BI → 列存数仓(Snowflake、ClickHouse)
  • 流处理:实时监控、IoT → 流引擎(Flink、Kafka Streams)
  • 搜索:全文检索 → 搜索引擎(Elasticsearch)
  • 图关系:社交网络、知识图谱 → 图数据库(Neo4j)

步骤2:评估数据量

  • < 1TB:单机数据库足够
  • 1TB - 10TB:考虑分布式(Citus、TiDB)
  • > 10TB:云数仓(BigQuery、Redshift)

步骤3:考虑一致性需求

  • 强一致性:金融、库存 → ACID数据库(PostgreSQL)
  • 最终一致性:社交媒体、日志 → NoSQL(Cassandra)

步骤4:成本与运维

  • 自建:有专业DBA团队
  • 云托管:快速启动,按需付费

现实案例

Uber的数据架构

  • 用户/订单OLTP:PostgreSQL(后迁移到Schemaless,自研)
  • 实时流处理:Kafka + Flink
  • 数据仓库:Hadoop(后迁移到Hive/Presto)
  • 搜索:Elasticsearch
  • 缓存:Redis
  • 监控时序:M3DB(自研)

正是Stonebraker”专用引擎”理念的体现!

📚 延伸阅读

经典论文

  1. Stonebraker et al. (1976): “The Design and Implementation of INGRES”

    • 关系数据库工程实现的里程碑
  2. Stonebraker & Rowe (1986): “The Design of POSTGRES”

    • 对象关系数据库的开创性工作
  3. Stonebraker et al. (2005): “C-Store: A Column-oriented DBMS”

    • VLDB最佳论文,列存数据库的理论基础
  4. Stonebraker (2007): “The End of an Architectural Era (It’s Time for a Complete Rewrite)”

    • 宣告传统数据库架构已过时
  5. Stonebraker & Cetintemel (2005): “One Size Fits All: An Idea Whose Time Has Come and Gone”

    • 专用引擎理念的宣言

书籍

  • Stonebraker & Hellerstein (Eds.): “Readings in Database Systems” (The Red Book)

系统

访谈与演讲

  • 2015年图灵奖演讲(YouTube)

    • “One Size Does Not Fit All”
    • 回顾40年数据库演进
  • ACM访谈系列

    • Stonebraker讲述创业故事与技术决策

🌟 精神遗产

”做系统,不只是写论文”

Stonebraker的座右铭:

“一个没有实现的想法只是一个幻想。”

他坚持每个研究项目都要:

  1. 理论论文:严格证明
  2. 原型系统:代码开源
  3. 实验评估:真实数据验证
  4. 产业化:创建公司或被业界采用

启示: 对计算机科学研究者,“端到端”的系统思维比算法优化更重要。

“不要妥协于’平庸的平衡’”

在数据库领域,很多人试图设计”通用”系统(啥都能干)。Stonebraker反其道而行:

“如果你的系统在所有场景都’还行’,那它在任何场景都不出色。宁可在一个场景做到极致。”

现实验证: 今天没有一个”统治一切”的数据库:

  • Oracle市场份额从50%降到20%
  • 专用数据库(Snowflake、MongoDB、Elasticsearch)市值数百亿

”技术应该服务现实需求”

Stonebraker的每个项目都源于真实问题:

  • Ingres:解决商业数据管理
  • Postgres:解决复杂数据类型
  • C-Store:解决分析查询慢
  • SciDB:解决科学家的数据管理难题

他从不为了”学术新颖”而研究,而是为了”世界需要”。


总结语:Michael Stonebraker是数据库领域的”连续革命者”。从1970年代的Ingres到2010年代的VoltDB,他跨越40年持续创新,改变了我们存储、查询、分析数据的方式。他用实践证明:没有完美的数据库,只有最适合场景的数据库。他不仅是技术天才,更是将学术思想转化为产业价值的大师,创建了9家公司,影响了数十亿美元的市场。

从Oracle的SQL优化器到PostgreSQL的类型扩展,从Snowflake的列存到Kafka的流处理,现代数据基础设施的每一层都有他的印记。他教会我们:伟大的系统不是妥协的产物,而是对特定问题的极致追求。在AI和大数据时代,他的”专用引擎”哲学比以往任何时候都更加重要——因为世界不需要一个数据库统治一切,而需要生态繁荣,让每个问题都有最优解。


最后更新: 2024年12月 本文为图灵奖系列文章,旨在以通俗方式介绍计算机科学先驱的贡献

DISCUSSION

评论与补充