公告推出MongoDB 8.0,史上最快的MongoDB!阅读更多 >>推出MongoDB 8.0,史上最快的MongoDB!>>

关系型数据库与非关系型数据库的比较

在规划新项目或应用时,数据库需求常常成为讨论的焦点。应该使用哪种数据库?关系型数据库和非关系型数据库有什么区别?

本文旨在通过解释它们是什么以及它们的区别,帮助您做出明智的决定。

数字时代的数据库可以分为操作数据和数据分析数据。

  • 操作数据用于日常交易,需要新鲜度——例如,产品库存和银行余额。此类数据通过在线事务处理(OLTP)系统实时捕获。

  • 分析数据由企业用于发现关于客户行为、产品性能和预测的见解。它包括在一定时间内收集的数据,通常存储在OLAP(在线分析处理)系统、仓库或数据湖中。

数据库是永久存储和检索操作数据和数据分析数据的最有效方式。

根据项目需求,公司需要选择一个可以

  • 存储所有类型的数据。
  • 快速访问所需数据。
  • 立即获得洞察力以做出战略业务决策。

大多数公司需要OLTP(操作)和OLAP(分析)系统来存储数据,可以使用关系数据库、非关系数据库或两者来满足其业务需求。

什么是关系型数据库?

关系型数据库,或关系数据库管理系统(RDBMS),将信息存储在表中。通常,这些表之间共享信息,导致表之间形成关系。这就是关系型数据库名称的由来。

表使用列定义存储的信息,行用于实际数据。每个表将有一个必须具有唯一值的列——称为主键。然后可以使用它来定义其他表中的关系。当第一个表的主键用于另一个表时,这个在第二个表中的列称为外键

与关系型数据库系统交互的最常见方式是使用SQL(结构化查询语言)。开发者可以通过编写SQL查询来执行CRUD(创建、读取、更新、删除)操作。一个简单的查询示例是

SELECT PRODUCT_NAME, PRICE FROM PRODUCT WHERE PRODUCT _ID = 23;

设想你经营一家在线业务。你存储了各种信息,比如客户信息、订单信息和产品。在一个关系型数据库中,这些信息会存储在不同的表中,并在需要时通过键来连接这些表。


relational database storage

关系型数据库中,数据以行和列的形式存储在表中


在这里,customer表存储了基本的客户信息、订单ID地址ID。如果有人需要关于订单或地址的更多信息,他们可以使用INNER JOIN运算符通过id字段查询匹配的orderaddress表。而order表则包含订单中产品项的产品ID。产品的详细信息存储在单独的产品表中。这使得信息更加组织和结构化。

关系型数据库的优势

ACID兼容性

原子性、一致性、隔离性和持久性(ACID)是一个保证数据库事务可靠性的标准。基本原则是如果一项更改失败,整个事务将失败,数据库将保持事务尝试之前的状态。

这很重要,因为有些事务如果未完全完成,将会有实际后果——例如,银行业务。更多详情,请参阅我们的关于ACID的文档

数据准确性

使用主键和外键可以确保没有重复的信息。这有助于保证数据准确性,因为没有重复信息

规范化

规范化的过程涉及确保数据以某种方式组织,以减少或消除数据异常。这反过来又降低了存储成本。

简单性

RDMBS(关系数据库管理系统)或SQL数据库已经存在很长时间,因此已经开发出了各种工具和资源来帮助用户入门和交互关系型数据库。SQL的类似英语的语法还使得非开发者能够从数据中生成报告和查询成为可能。

关系型数据库的缺点

可伸缩性

传统上,RDMBS是为在单台机器上运行而设计的。这意味着如果机器的需求不足,由于数据量过大或访问频率增加,就必须提高机器的硬件性能,这被称为垂直扩展。

这可能会非常昂贵,并且有一个上限,因为最终成本将超过收益。此外,可能最终会达到一个阶段,你将无法获得能够托管数据库的硬件。唯一的解决方案是购买一台支持更好硬件的机器,但这并不便宜。

灵活性

在关系型数据库中,模式是刚性的。你定义列和数据类型,包括任何限制,如格式或长度。常见的限制示例包括电话号码长度或名称列的最小/最大长度。

虽然这意味着你可以更容易地解释数据并识别表之间的关系,但这也意味着更改数据的结构非常复杂。你必须在开始时决定数据将是什么样子,这并不总是可能的。如果你想稍后进行更改,你必须更改所有数据,这涉及到数据库临时离线。

性能

数据库的性能与表的复杂度紧密相关——包括表的数目以及每个表中数据的量。随着这些的增加,执行查询所需的时间也会增加。

什么是非关系型数据库?

非关系型数据库,有时被称为NoSQL(不仅限于SQL),是指任何不使用关系型数据库中的表格、字段和列结构化数据概念的数据库。非关系型数据库的设计考虑到了云环境,因此在水平扩展方面表现出色。

有几种不同的数据库类型,它们以不同的方式存储数据。

文档数据库

文档数据库以文档的形式存储数据,这些文档通常是类似JSON的结构,支持多种数据类型。这些类型包括字符串;数字,如int、float和long;日期;对象;数组;甚至是嵌套文档。数据以键值对的形式存储。

考虑上述相同的客户示例。然而,在这种情况下,我们能够将一个客户的全部数据作为一个单独的文档查看。


Document-based non-relational database structure.

文档非关系型数据库中数据是如何存储的


以下是使用Mongo Query API(类似于上一节中的SQL)获取指定productid的产品名称和价格查询。在这个查询中,第一个参数(_id)代表在集合上使用的过滤器,第二个参数——投影——查询应返回的字段。

db.product.find({"_id": 23}, {productName: 1, price: 1})

由于文档类似JSON,它们对用户来说更容易阅读和理解。数据是有组织的,并且易于查看。无需引用多个文档或集合即可查看单个客户的数据。文档与面向对象编程语言中的对象很好地映射,这使得工作更加容易。

此外,没有模式,这意味着如果插入不同形状的文档,您可以有更多的灵活性。但是,一些文档数据库系统允许应用模式验证,如果您想享受文档数据库的其他优点,但希望数据具有定义的形状。

文档被视为单个单元,这意味着它们可以分布在多个服务器上。此外,数据库是自我修复的,这意味着高可用性。

文档数据库也具有高度的可扩展性。与传统的只能垂直扩展(CPU、硬盘空间等)的关系数据库不同,非关系型数据库,包括文档数据库,可以水平扩展。这意味着数据库可以在多个服务器上复制,同时保持同步。

键值数据库

这是最基本类型的数据库,信息以两部分存储:键和值。

然后使用键从数据库中检索信息。

键值数据库的简单性也是其优势之一。因为一切都被存储为唯一的键和值,这个值要么是数据本身,要么是数据的存储位置,所以读取和写入始终很快。

然而,这种简单性限制了其可用用例的类型。无法支持更复杂的数据需求。

图数据库

图数据库是非关系型数据库类型中最专业的。它们使用称为节点的元素结构来存储数据,它们之间的关系由包含属性的字边连接。

关系在边中定义,这使得与这些关系相关的搜索自然很快。此外,它们很灵活,因为可以轻松添加新的节点和边。它们也不需要像传统的关系型数据库那样有定义的架构。

然而,它们并不擅长查询整个数据库,其中关系定义不佳或根本未定义。它们也没有查询的标准语言,这意味着在不同的图数据库类型之间移动需要学习。

宽列数据库

宽列数据库类似于关系型数据库,将数据存储在表中、列和行中。然而,列的名称和格式在每个行中不必匹配。列甚至可以存储在多个服务器上。它们被认为是二维键值存储,因为它们使用多维映射通过行和列引用数据。

像两列键值数据库一样,宽列数据库的好处是灵活,因此查询速度快。由于这种灵活性,它们擅长处理“大数据”和非结构化数据。

然而,与关系型数据库相比,宽列数据库在处理事务时速度要慢得多。列将相似属性组合在一起,而不是使用行,并将这些属性存储在单独的文件中,这意味着事务必须在多个文件上执行。

文档数据库列存储数据库键值存储数据库图数据库
性能中等
可用性
灵活性中等
可伸缩性中等
复杂性中等
文档数据库
性能
可用性
灵活性
可伸缩性
复杂性
列存储数据库
性能
可用性
灵活性中等
可伸缩性
复杂性
键值存储数据库
性能
可用性
灵活性
可伸缩性
复杂性中等
图数据库
性能中等
可用性
灵活性
可伸缩性中等
复杂性

何时使用关系型数据库

如果您正在创建一个数据在结构、大小和访问频率方面可预测的项目,关系型数据库仍然是最佳选择。

规范化可以通过限制重复数据和异常来帮助减少磁盘上的数据大小,从而降低未来需要垂直扩展的风险。

如果实体之间的关系很重要,关系型数据库也是最佳选择。

非关系型数据库可以在文档内存储文档,这有助于将一起访问的数据保持在同一位置。但如果这不适用于您的需求,关系型数据库仍然是解决方案。例如,如果您有一个具有复杂结构和关系的大型数据集,嵌入可能无法创建足够清晰的关系。

RDMS存在的时间也意味着有广泛的支持可用,从工具到与其他系统数据的集成。

何时使用非关系型数据库

如前所述,有许多类型的非关系型数据库,每种都有其自身的优缺点。

然而,非关系型数据库仍然保持一些一致的优势。如果您存储的数据需要在形状或大小方面灵活,或者需要在将来允许更改,那么非关系型数据库是解决方案。

现代NoSQL数据库是为云设计的,这使得它们在横向扩展方面表现良好,可以启动大量小型服务器来处理增加的负载。

了解您如何将项目从关系型数据库过渡到基于文档的非关系型数据库

为什么您可能更喜欢非关系型数据库而不是关系型数据库?

有很多原因您可能想使用非关系型数据库而不是关系型数据库

  • 非关系型数据库适合操作数据和事务数据。
  • 它们更适合非结构化大数据。
  • 非关系型数据库提供更高的性能和可用性。
  • 灵活的架构帮助非关系型数据库存储更多类型的数据,而无需进行主要的架构变更。

摘要

在这篇文章中,你了解了关系型数据库和非关系型数据库,以及它们之间的区别。你还学习了这两种数据库类型的优缺点,以及哪种数据库类型最适合各种项目。


功能非关系型关系型
可用性
横向扩展
纵向扩展
数据存储优化于处理大量数据中到大型的数据
性能低到中等
可靠性中等高(ACID)
复杂性中等(连接)
灵活性低(严格模式)
适用性适用于OLAP和OLTP适用于OLTP

MongoDB是一种非关系型数据库,它提供可扩展性、高性能、可靠性和灵活性。MongoDB已发展成为更广泛的数据平台,MongoDB Atlas,MongoDB的云数据库,使得数据始终可用。

常见问题解答

所有数据库都是关系型的吗?

不。关系型或SQL数据库以具有公共列的表(称为主键和外键)存储数据,形成表之间的关系。数据始终以定义的架构进行结构化,且难以更改。

但还有其他类型的数据库,统称为非关系型/NoSQL数据库,可以存储非结构化、半结构化或结构化数据。这些数据库允许灵活性和高可用性。一些例子包括MongoDB、Cassandra和CouchDB。

MongoDB是非关系型数据库吗?

是的。MongoDB是一种文档数据库,属于非关系型数据库。数据以BSON文档的形式存储在集合中,结构类似于JSON。数据被认为是非结构化的,因为一个集合可以包含具有不同字段和数据类型的文档。这提供了高度的灵活性。

非关系型数据库有哪些用例?

由于非关系型数据库的灵活性和可扩展性(水平和垂直),它们适用于广泛的用例。

例如,对于存储应用设置,键值数据库非常适合,因为每个设置只有一个值。对于电子商务网站,文档数据库是理想的,因为可以为每个客户存储一个文档,其中包含他们的详细信息和历史订单,因为它们是私人和独特的。

对于像欺诈检测这样的东西,数据之间的关系至关重要,但数据类型通常是不可预测的,图数据库是一个很好的解决方案。

有关非关系型数据库可能不是最佳选择的更多信息的白皮书,请参阅此处

关系型数据库和非关系型数据库之间的区别是什么?

关系型数据库以行和列的表格格式存储数据。使用多个表定义数据之间的关系。例如,为了确定客户与其订单之间的关系,我们需要两个或更多的表:客户表和订单表。非关系型数据库不遵循严格的结构,适合在单个视图中存储大量不同类型的数据。更多关于关系型和非关系型数据库的信息,请参阅。

何时会使用非关系型数据库?

非关系型数据库有许多应用场景。例如,它们非常适合用于获取操作和分析目的的实时数据。由于大数据的性质,非关系型数据库也是AI和物联网应用的理想选择,因为它们需要卓越的性能和横向扩展。

什么是非关系型数据库的例子?

文档类型非关系型数据库的一个流行例子是MongoDB,它以类似JSON的格式存储数据。这种格式使得遍历数据并从单一视图中查看所有数据变得容易。MongoDB还具有丰富的查询能力和聚合函数,使数据检索和分析变得容易且快速。

在什么情况下你会选择关系型或非关系型数据库?

关系型数据库更适合不太可能频繁变化的数据。你可以使用关系型数据库来处理中到大型数据集。

对于实时数据和更快的查询结果,可以使用非关系型数据库。此外,由于它们灵活的模式,非关系型数据库可以轻松存储大量非结构化数据。

关系型数据库的例子是什么?

一些流行的关系型数据库包括MySQL、SQLServer和Oracle。