知识卡片

从NoSQL到NewSQL的螺旋回归:一路兜转后,仍需回到关系模型的表达能力上

结构图卡

内容

数据库历史呈现出一条清晰的螺旋轨迹:1970年前后还没有SQL,人们用层次模型笨拙地表达数据;1980年关系模型(SQL)凭借简单易用彻底击败层次模型;2000年前后NoSQL喊出彻底抛弃SQL的口号,认为分布式、高性能才是未来;但玩了几年之后,大家发现放弃了关系模型,本质上是让每个业务方各自重新发明一遍关系数据库的能力,等于开历史倒车退回到层次模型的老路上——这条路走不通;于是2005年前后转向”Not only SQL”,NoSQL阵营开始向关系模型妥协、寻求与SQL共存,MongoDB用JSON替代臃肿的XML、并在此基础上支持索引,Cassandra推出CQL,HBase也发展出各类SQL引擎,本质上都是对关系数据模型的一种让步;到了2013年前后,业界干脆明确表态”No,SQL”(不,我们还是需要关系数据库),因为经过十年折腾后依然发现,关系模型仍然是目前表达数据存取最方便的语言,比其他任何方式都要方便得多——但问题回到了原点:当初正是因为关系数据库无法满足扩展性和性能要求才要做NoSQL的,现在NoSQL反过来加一个关系代数引擎就能解决问题吗?答案依然是不行,该有的限制一个都没少——最终大家殊途同归,回到了”如何让关系数据库本身具备更好的扩展性和性能”这条路上,这正是NewSQL的起源。这条螺旋轨迹揭示了一个深刻的规律:关系模型在”如何方便地表达数据存取需求”这个维度上的优势,是极其牢固、难以被绕开的——历史上多次尝试彻底抛弃它(层次模型时代之后、NoSQL运动早期),最终都被证明行不通,真正需要突破的从来不是”要不要用关系模型”这个问题,而是”如何让关系模型具备分布式系统需要的扩展性和性能”这个更困难、也更根本的技术问题。

结构图

flowchart TB
    A["1970: We have no SQL\n层次模型,Map套Map手工遍历"] --> B["1980: Know SQL\n关系模型凭简单易用胜出\n一句SQL替代逐层遍历代码"]
    B --> C["2000: No SQL\n分布式强一致事务延迟问题倒逼\n彻底放弃事务与SQL换扩展性"]
    C --> D["2005: Not only SQL\n发现完全抛弃SQL等于\n退回层次模型老路\n转向与SQL共存(MongoDB/CQL等)"]
    D --> E["2013: No,SQL!\n十年验证后确认:\n关系模型仍是最方便的数据表达方式"]
    E --> F["NewSQL\n真正的突破方向:\n让关系模型本身获得分布式扩展性与性能"]
    B -.->|"关系模型的表达优势\n始终未被真正撼动"| F

参考来源

- 位置:《高可用架构(第1卷)》第6章《大数据与数据库》"6.7 从NoSQL历史看未来"节,"6.7.5 2005年:不仅仅是SQL"及"6.7.6 2013年:No,SQL"(源文件:_epub-src/OEBPS/Text/Chapter6_7_6.xhtml、Chapter6_7_7.xhtml) - 结论依据:原文说明"这不行啊,这东西不就是让我们每个业务都把关系数据库从新实现一把吗?让我们退回到层次模型上去啊……这就是Not only SQL的起源",以及"经过了10年的折腾,我们还是发现关系模型是目前最方便表达数据存取的语言……最终大家殊途同归,还是回到了如何能够让关系数据库更具有扩展性、性能更好这条路上来……这就是NewSQL的起源",直接支撑本卡片结论与结构图。 - 原始内容:这东西不就是让我们每个业务都把关系数据库从新实现一把吗?让我们退回到层次模型上去啊……经过了10年的折腾,我们还是发现关系模型是目前最方便表达数据存取的语言……最终大家殊途同归,还是回到了如何能够让关系数据库更具有扩展性、性能更好这条路上来。这就是NewSQL的起源。