话说数据库选型:从SQL到Distributed SQL

1,737 阅读5分钟

本文来源于公众号:勾勾的Java宇宙(微信号:Javagogo) 更多干货,支持一下!

原文链接:mp.weixin.qq.com/s/Nq6iBgQkj… 作者:高洪涛

现在,选择合适的数据库成了日常工作中一项必备技能,你即使选择大厂的成熟产品也有可能掉进“坑”里。

为了方便进行数据库选型,我梳理了 SQL、NoSQL、NewSQL、DistributedSQL 的特点,以及它们的联系。

先抛出结论:SQL 是所有数据库的“核心”

为什么这么说呢?你往下看。

SQL 定义

SQL 数据库就是一种支持 SQL 的数据库,它是一种用于查询和处理关系数据库中“数据”的特定领域语言。

SQL 被广泛使用在各种商业、开源数据库中,不仅是研发技术人员,一些其他行业人员,如财务、物流和数据分析等,都以掌握 SQL 作为从业重要技能。

SQL 优点

  • 由于 Schema(模式)的预定义,数据库获得存储相对紧凑,从而导致其性能较为优异
  • 经典的 ACID 给业务带来了可控性
  • 基于标准化 SQL 的数据访问模式提升了企业级应用带的生产力
  • 从数据访问框架、ORM,到数据库中间件,SQL 的生态十分丰富

SQL 缺点

对前期设计要求高,因为后期修改 Schema 往往需要停机,没有考虑分布式场景,在扩展性和可用性层面缺乏支持

NoSQL

NoSQL 数据库是一种非关系型数据库。它专注于分布式场景下数据存储与查询,不需要预先定义 Schema,一般不支持连接且易于扩展,从而更容易地实现业务需求。

NoSQL 数据库因具有庞大的数据存储需求,常被用于大数据和 C 端互联网应用。例如,Twitter、Facebook、阿里和腾讯这样的公司,每天都利用其收集几十甚至上百 TB 的用户数据。

NoSQL 优点

  • 在设计层面天然考虑了使用廉价硬件进行系统扩容,成本低
  • 同时,它放弃了 ACID,性能才没有随着系统规模的扩大而衰减

NoSQL 缺点

  • 由于缺乏 ACID,应用时需要非常小心地处理数据一致性问题
  • 由于其数据模型往往只针对特定场景,一般不能使用一种 NoSQL 数据库来完成整个应用的构建,导致设计层面的复杂和维护的困难

NoSQL 意义

我认为主要体现在以下 3 个方面。

  1. 打破了固有思维,比如 MongoDB 可以很好地解决非结构化场景问题
  2. 打破了 Oracle、IBM 等大型数据库服务商的垄断
  3. 将分布式引入到数据库中

但是 SQL 类数据库应用如此广泛,为了分布式特性就需要抛弃 SQL 显得非常得不偿失。因此一些组织开始构建基于 SQL 的分布式数据库,从表面看它们都支持 SQL,但是根据实现方式,其发展出了两种路线:NewSQL 和 Distributed SQL。

NewSQL 的进击

NewSQL 数据库一般有两种。

  1. 在一个个独立运行的 SQL 数据库实例之上提供了一个自动数据分片管理层

例如,Vitess 使用了 MySQL,而 Citus 使用 PostgreSQL。

  1. 构建新的分布式存储引擎

例如 NuoDB、VoltDB 和 Clustrix 等,他们虽然仍有或多或少的功能阉割,但可以给用户一个完整的 SQL 数据库体验。

NewSQL 数据库最初构建的目的是解决分布式场景下,写入 SQL 数据库所面临的挑战。它可以使用多个传统单机 SQL 数据库作为其存储节点,在此基础上构建起可扩展的分布式数据库。

随着多可用区、多区域和多云的云部署成为现代应用程序的标准,这些数据库也开始力不从心起来。

Distributed SQL 的崛起

像 Google Spanner 和 TiDB 这样的 Distributed SQL 数据库崛起了,他们使用的是特殊的底层存储引擎,来构建水平可伸缩的数据库。

它在 NewSQL 的功能基础上,往往提供的是“地理分布”功能,用户可以跨可用区、区域甚至在全球范围内分布数据。

相比于典型的 NewSQL,一个 Distributed SQL 数据库看起来更像一个完整的解决方案。它的功能一般包括可扩展性、数据一致性、高可用性、地理级分布和 SQL 支持,却并非一些工具的组合。一个合格的 Distributed SQL 数据库应该不需要额外工具的支持,就可以实现上述功能。

此外,由于 Distributed SQL 天然适合与云计算相结合,因此一些云原生数据库也可以归为此门类,如 AWS 的 Aurora 等。

不论是云还是非云数据库,Distributed SQL 几乎都是商业数据库,而 NewSQL 由于其工具的本质,其中开源类型的数据库占有不小的比重。

新一代的 SQL 已经冉冉升起,它来自旧时代。但除了 SQL 这一个面孔外,其内部依然发生了翻天覆地的改变。不过这正是 SQL 的魅力:穿越时光,依然为数据库的核心,也是数据库经典理论为数不多的遗产。


欢迎关注公众号 勾勾的Java宇宙(微信号:Javagogo),拒绝水文,收获干货!