在数据库方面,组织有很多选择。在本文中,Robert Sheldon 解释了如何在 SQL 和 NoSQL 数据库之间进行选择。
支持数据密集型应用程序的组织必须就如何最好地实施和维护它们做出许多决定。最大的决定之一是确定用于存储和交付应用程序数据的最佳平台。过去,大多数组织选择 SQL 数据库是因为它们能够保护数据并确保其完整性。但互联网和云技术的兴起——以及随之而来的数据激增——已经导致许多组织转向 NoSQL 数据库,这在很大程度上是因为它们可以更好地处理大量非结构化和半结构化数据。
尽管有这种趋势,但许多 IT 团队继续支持更传统的工作负载,通常与他们的现代应用程序结合使用,并且并不总是清楚他们应该选择哪种类型的数据库系统——SQL 或 NoSQL。两者都有优点和缺点,但它们的构建方式、存储数据的方式以及应用程序访问它们的方式不同。只有了解这些差异,组织才能就哪种类型最适合现在和可预见的未来的工作负载做出明智的决定。
SQL 数据库简介
SQL 数据库通常被称为关系数据库,因为它基于 Edgar F. Codd 在 1970 年代早期引入的关系模型。关系模型定义了一种将结构化数据组织成关系(具有列和行的表)以及定义这些表之间关系的方法。当然,关系理论远不止这些——我对它的术语相当宽松——但重要的一点是,关系数据库在引入后很快成为存储和管理的事实上的标准各种规模的组织中的数据,直到今天仍然是一种流行的技术。
关系模型的核心是结构化查询语言 (SQL),这是一种基于标准的编程语言,用于定义数据库模式和表之间的关系。该语言还用于存储、操作和检索这些表中的数据。SQL 已被美国国家标准协会 (ANSI) 和国际标准化组织 (ISO) 采用,并且广为人知并受到全球开发人员的广泛支持。
关系数据库提供了许多重要的特性,使它们非常适合企业工作负载,这就是组织长期以来一直转向它们的原因。它们针对处理高度结构化的数据进行了优化,其固有特性(例如规范化、原子性和一致性)可确保数据在整个生命周期内的完整性。这些功能还有助于提高存储利用率,同时通过基于标准的 SQL 提供灵活的查询支持。
然而,关系数据库并非没有挑战。它们适用于结构化数据,但不适用于半结构化或非结构化数据,尤其是大规模数据。事实上,SQL 数据库很难横向扩展,即使对于结构化数据,也很难将它们用于分布式大数据工作负载。关系数据库还需要一个严格的模式,必须仔细规划,并且不容易适应不断变化的需求,为当今许多应用程序和开发方法的动态特性留下了很小的空间。
然而,尽管存在这些挑战,SQL 数据库仍然是许多组织的流行选择,供应商提供各种复杂的关系数据库产品,例如 Microsoft SQL Server、Oracle 数据库、IBM DB2、MySQL、PostgreSQL 等。
介绍 NoSQL 数据库
由于非结构化和半结构化数据的涌入,许多组织一直在选择 NoSQL 数据库,该术语通常表示“非 SQL”或“不仅是 SQL”。虽然这样的命名有些含糊,但它指向了一类比传统 SQL 数据库更灵活和可扩展的数据库。NoSQL 数据库不遵循关系数据库固有的严格模式结构,也不限于像这些数据库那样的单一数据模型。
事实上,没有什么可以说 NoSQL 数据库必须遵循任何特定模型,而且该行业仍然充满活力,可以想象任何可能的场景。即便如此,已经出现了四种基本的 NoSQL 模型,每种模型都有可用的产品:
- 键值数据库。数据存储在键值结构中,该结构将唯一标识符与特定数据 blob 相关联,从而可以以任何形式存储几乎任何类型的数据。示例产品包括 Redis、Berkeley DB 和 Amazon DynamoDB。
- 文档数据库。数据以 JSON 或 XML 等格式存储为文档,每个文档都分配有自己的唯一键,但不限于预定义的字段或元素。示例产品包括 MongoDB、CouchDB 和 BaseX。
- 面向列的数据库。数据存储为强类型列而不是行,从而可以非常快速地查询和聚合大量数据。这些类型的数据库也有其他名称,例如列存储、宽列存储和列族。示例产品包括 HBase、Bigtable 和 Cloudera。
- 图数据库。数据存储在定义数据如何互连的图形结构中,本质上将数据之间的关系视为与数据本身一样重要。产品示例包括 Neo4J 和 InfiniteGraph。
每种类型的 NoSQL 数据库都有其优点和缺点,具体取决于组织试图支持的工作负载。此外,并非所有 NoSQL 产品都适合这些类别中的每一个。例如,Azure Cosmos DB 提供了五个 API,使服务更加通用。其中包括 SQL API、MongoDB API、Cassandra API、Gremlin API 和 Table API。
然而,无论产品如何,任何可靠的 NoSQL 数据库都应该能够横向扩展并处理分布式大数据工作负载,同时提供比 SQL 数据库更大的灵活性。NoSQL 数据库还使开发团队更容易开始他们的项目,因为他们没有被锁定在严格的模式结构中。也就是说,NoSQL 数据库不如关系数据库产品成熟,并且通常无法保证相同级别的数据完整性。
比较 SQL 和 NoSQL 数据库
在决定 SQL 和 NoSQL 数据库之间的关系时,查看这两种类型的并排比较有助于更好地了解它们的差异。下表分解了许多将 SQL 和 NoSQL 区分开来的主要特征。
| SQL数据库 | NoSQL 数据库 | |
|---|---|---|
| 数据结构 | SQL 数据结构基于一种关系模型,该模型对严格定义的表中的数据进行规范化并标准化这些表之间的关系,使 SQL 数据库非常适合高度结构化的数据。 | NoSQL 数据结构不需要规范化配置或遵循关系模型,而是足够灵活以适应不同的模型,包括键值、文档、面向列和图形。 |
| 语言 | SQL 数据库都是关于 SQL 语言的。一些关系数据库产品支持纯 SQL,但许多产品包括该语言的增强版本(例如 SQL Server 的 Transact-SQL (T-SQL))以适应产品特定的功能。但是,所有 SQL 数据库都支持核心 ANSI/ISO 语言元素。 | NoSQL 数据库不会被锁定为一种语言。使用的语言取决于 NoSQL 数据库的类型、个别实现和具体操作。例如,MongoDB 以 JSON 格式存储所有文档,查询基于 JavaScript 编程语言。 |
| 模式 | SQL 数据库需要一个预定义的架构来确定表的配置方式和数据的存储方式,从而形成有助于优化存储和确保数据完整性的刚性结构,但限制了灵活性。 | NoSQL 数据库使用不需要预定义数据结构的动态模式,因此具有高度的灵活性,例如能够将具有不同字段的文档添加到同一数据库中。 |
| 数据的完整性 | SQL 数据库提供高度的数据完整性,遵循原子性、一致性、隔离性和持久性 (ACID) 原则,这在支持金融交易等工作负载时至关重要。 | NoSQL 数据库可能难以提供与 SQL 数据库相同级别的数据完整性,并且大多数都遵循 BASE 原则(基本可用性、软状态和最终一致性),这意味着分布式环境中的数据可能会暂时不一致。 |
| 可扩展性 | SQL 数据库主要垂直扩展,这意味着它们可以通过添加 CPU 或内存等资源轻松扩展,但 SQL 数据库在水平扩展方面效率不高,因此不适合大型分布式数据集。 | NoSQL 数据库可以在系统和位置之间非常有效地水平扩展,从而可以容纳大量分布式数据,同时支持更高级别的流量。 |
| 查询 | SQL 数据库在处理查询和跨表联接数据方面非常高效,从而可以更轻松地针对结构化数据执行复杂查询,包括临时请求。 | NoSQL 数据库缺乏跨产品的一致性,通常需要更多的工作来查询数据,特别是随着查询复杂性的增加。 |
| 到期 | SQL 数据库建立在成熟的技术之上,这些技术为大型开发人员社区所熟知并提供支持。 | NoSQL 产品不如 SQL 产品成熟,技术支持也不如 SQL 产品,但 NoSQL 技术正在快速进入行业,开发者社区不断壮大。 |
尽管以这种方式比较 SQL 和 NoSQL 数据库很方便,但它们之间的差异并不总是那么黑白分明。供应商一直在稳步地将功能整合到他们的产品中,以使其更具通用性。例如,MongoDB 现在支持多文档 ACID 事务,MySQL 现在包含用于存储和验证 JSON 文档的原生 JSON 数据类型。
如何在 SQL 和 NoSQL 数据库之间进行选择
SQL 和 NoSQL 之间的决定在很大程度上取决于您计划支持的工作负载以及数据的结构和数量。但是,您还应该考虑数据库产品本身的差异,例如成熟度、稳定性、许可费用、供应商支持以及开发者社区的范围和参与度。
同时,下表提供了一些您在权衡一种类型与另一种类型时可能会考虑的一般准则。
| 在以下情况下考虑 SQL 数据库… | 在以下情况下考虑 NoSQL 数据库…… |
|---|---|
| 1.您的数据是高度结构化的,并且该结构不会经常更改; 2.您支持面向交易的系统,例如会计或财务应用程序; 3.您需要高度的数据完整性和安全性; 4.您经常执行复杂的查询,包括临时请求; 5.您不需要 NoSQL 提供的横向扩展功能 | 1.您正在处理大量不适合关系模型的非结构化或半结构化数据 2.您需要动态模式的灵活性或希望对数据模型有更多选择 3.您需要一个可以水平扩展的数据库系统,可能跨越多个地理位置; 4.您希望简化开发并避免结构化方法的开销; 5.您的应用程序不需要 SQL 数据库提供的数据完整性级别 |
同样,这些只是指导方针。您应该单独考虑每种情况,同时考虑数据的形状和工作负载要求。同时,请记住,您不仅限于一种数据库类型。许多组织同时实施了 SQL 和 NoSQL 数据库系统以满足其不同的需求,从而可以两全其美。此外,请记住,数据库技术在不断发展,新变量会定期添加到组合中。
然而,无论行业如何变化,有一件事是确定的:您对数据和可用数据库选项了解得越透彻,您在选择数据库系统时就可以做出越明智的决定,并且您能够做得越好支持您未来的工作负载。




