在规划新项目或应用时,数据库需求常常成为讨论的焦点。应该使用哪种数据库?关系型数据库和非关系型数据库有什么区别?
本文旨在通过解释它们是什么以及它们的区别,帮助您做出明智的决定。
数字时代的数据库可以分为操作数据和数据分析数据。
操作数据用于日常交易,需要新鲜度——例如,产品库存和银行余额。此类数据通过在线事务处理(OLTP)系统实时捕获。
分析数据由企业用于发现关于客户行为、产品性能和预测的见解。它包括在一定时间内收集的数据,通常存储在OLAP(在线分析处理)系统、仓库或数据湖中。
数据库是永久存储和检索操作数据和数据分析数据的最有效方式。
根据项目需求,公司需要选择一个可以
大多数公司需要OLTP(操作)和OLAP(分析)系统来存储数据,可以使用关系数据库、非关系数据库或两者来满足其业务需求。
关系型数据库,或关系数据库管理系统(RDBMS),将信息存储在表中。通常,这些表之间共享信息,导致表之间形成关系。这就是关系型数据库名称的由来。
表使用列定义存储的信息,行用于实际数据。每个表将有一个必须具有唯一值的列——称为主键。然后可以使用它来定义其他表中的关系。当第一个表的主键用于另一个表时,这个在第二个表中的列称为外键。
与关系型数据库系统交互的最常见方式是使用SQL(结构化查询语言)。开发者可以通过编写SQL查询来执行CRUD(创建、读取、更新、删除)操作。一个简单的查询示例是
SELECT PRODUCT_NAME, PRICE FROM PRODUCT WHERE PRODUCT _ID = 23;
设想你经营一家在线业务。你存储了各种信息,比如客户信息、订单信息和产品。在一个关系型数据库中,这些信息会存储在不同的表中,并在需要时通过键来连接这些表。
关系型数据库中,数据以行和列的形式存储在表中
在这里,customer
表存储了基本的客户信息、订单ID
和地址ID
。如果有人需要关于订单或地址的更多信息,他们可以使用INNER JOIN运算符通过id字段查询匹配的order
和address
表。而order
表则包含订单中产品项的产品ID。产品的详细信息存储在单独的产品表中。这使得信息更加组织和结构化。
原子性、一致性、隔离性和持久性(ACID)是一个保证数据库事务可靠性的标准。基本原则是如果一项更改失败,整个事务将失败,数据库将保持事务尝试之前的状态。
这很重要,因为有些事务如果未完全完成,将会有实际后果——例如,银行业务。更多详情,请参阅我们的关于ACID的文档。
使用主键和外键可以确保没有重复的信息。这有助于保证数据准确性,因为没有重复信息
规范化的过程涉及确保数据以某种方式组织,以减少或消除数据异常。这反过来又降低了存储成本。
RDMBS(关系数据库管理系统)或SQL数据库已经存在很长时间,因此已经开发出了各种工具和资源来帮助用户入门和交互关系型数据库。SQL的类似英语的语法还使得非开发者能够从数据中生成报告和查询成为可能。
传统上,RDMBS是为在单台机器上运行而设计的。这意味着如果机器的需求不足,由于数据量过大或访问频率增加,就必须提高机器的硬件性能,这被称为垂直扩展。
这可能会非常昂贵,并且有一个上限,因为最终成本将超过收益。此外,可能最终会达到一个阶段,你将无法获得能够托管数据库的硬件。唯一的解决方案是购买一台支持更好硬件的机器,但这并不便宜。
在关系型数据库中,模式是刚性的。你定义列和数据类型,包括任何限制,如格式或长度。常见的限制示例包括电话号码长度或名称列的最小/最大长度。
虽然这意味着你可以更容易地解释数据并识别表之间的关系,但这也意味着更改数据的结构非常复杂。你必须在开始时决定数据将是什么样子,这并不总是可能的。如果你想稍后进行更改,你必须更改所有数据,这涉及到数据库临时离线。
数据库的性能与表的复杂度紧密相关——包括表的数目以及每个表中数据的量。随着这些的增加,执行查询所需的时间也会增加。
非关系型数据库,有时被称为NoSQL(不仅限于SQL),是指任何不使用关系型数据库中的表格、字段和列结构化数据概念的数据库。非关系型数据库的设计考虑到了云环境,因此在水平扩展方面表现出色。
有几种不同的数据库类型,它们以不同的方式存储数据。
文档数据库以文档的形式存储数据,这些文档通常是类似JSON的结构,支持多种数据类型。这些类型包括字符串;数字,如int、float和long;日期;对象;数组;甚至是嵌套文档。数据以键值对的形式存储。
考虑上述相同的客户示例。然而,在这种情况下,我们能够将一个客户的全部数据作为一个单独的文档查看。
文档非关系型数据库中数据是如何存储的
以下是使用Mongo Query API(类似于上一节中的SQL)获取指定productid的产品名称和价格查询。在这个查询中,第一个参数(_id)代表在集合上使用的过滤器,第二个参数——投影——查询应返回的字段。
db.product.find({"_id": 23}, {productName: 1, price: 1})
由于文档类似JSON,它们对用户来说更容易阅读和理解。数据是有组织的,并且易于查看。无需引用多个文档或集合即可查看单个客户的数据。文档与面向对象编程语言中的对象很好地映射,这使得工作更加容易。
此外,没有模式,这意味着如果插入不同形状的文档,您可以有更多的灵活性。但是,一些文档数据库系统允许应用模式验证,如果您想享受文档数据库的其他优点,但希望数据具有定义的形状。
文档被视为单个单元,这意味着它们可以分布在多个服务器上。此外,数据库是自我修复的,这意味着高可用性。
文档数据库也具有高度的可扩展性。与传统的只能垂直扩展(CPU、硬盘空间等)的关系数据库不同,非关系型数据库,包括文档数据库,可以水平扩展。这意味着数据库可以在多个服务器上复制,同时保持同步。
这是最基本类型的数据库,信息以两部分存储:键和值。
然后使用键从数据库中检索信息。
键值数据库的简单性也是其优势之一。因为一切都被存储为唯一的键和值,这个值要么是数据本身,要么是数据的存储位置,所以读取和写入始终很快。
然而,这种简单性限制了其可用用例的类型。无法支持更复杂的数据需求。
图数据库是非关系型数据库类型中最专业的。它们使用称为节点的元素结构来存储数据,它们之间的关系由包含属性的字边连接。
关系在边中定义,这使得与这些关系相关的搜索自然很快。此外,它们很灵活,因为可以轻松添加新的节点和边。它们也不需要像传统的关系型数据库那样有定义的架构。
然而,它们并不擅长查询整个数据库,其中关系定义不佳或根本未定义。它们也没有查询的标准语言,这意味着在不同的图数据库类型之间移动需要学习。
宽列数据库类似于关系型数据库,将数据存储在表中、列和行中。然而,列的名称和格式在每个行中不必匹配。列甚至可以存储在多个服务器上。它们被认为是二维键值存储,因为它们使用多维映射通过行和列引用数据。
像两列键值数据库一样,宽列数据库的好处是灵活,因此查询速度快。由于这种灵活性,它们擅长处理“大数据”和非结构化数据。
然而,与关系型数据库相比,宽列数据库在处理事务时速度要慢得多。列将相似属性组合在一起,而不是使用行,并将这些属性存储在单独的文件中,这意味着事务必须在多个文件上执行。
如果您正在创建一个数据在结构、大小和访问频率方面可预测的项目,关系型数据库仍然是最佳选择。
规范化可以通过限制重复数据和异常来帮助减少磁盘上的数据大小,从而降低未来需要垂直扩展的风险。
如果实体之间的关系很重要,关系型数据库也是最佳选择。
非关系型数据库可以在文档内存储文档,这有助于将一起访问的数据保持在同一位置。但如果这不适用于您的需求,关系型数据库仍然是解决方案。例如,如果您有一个具有复杂结构和关系的大型数据集,嵌入可能无法创建足够清晰的关系。
RDMS存在的时间也意味着有广泛的支持可用,从工具到与其他系统数据的集成。
有很多原因您可能想使用非关系型数据库而不是关系型数据库。
在这篇文章中,你了解了关系型数据库和非关系型数据库,以及它们之间的区别。你还学习了这两种数据库类型的优缺点,以及哪种数据库类型最适合各种项目。
功能 | 非关系型 | 关系型 |
---|---|---|
可用性 | 高 | 高 |
横向扩展 | 高 | 低 |
纵向扩展 | 高 | 高 |
数据存储 | 优化于处理大量数据 | 中到大型的数据 |
性能 | 高 | 低到中等 |
可靠性 | 中等 | 高(ACID) |
复杂性 | 低 | 中等(连接) |
灵活性 | 高 | 低(严格模式) |
适用性 | 适用于OLAP和OLTP | 适用于OLTP |
MongoDB是一种非关系型数据库,它提供可扩展性、高性能、可靠性和灵活性。MongoDB已发展成为更广泛的数据平台,MongoDB Atlas,MongoDB的云数据库,使得数据始终可用。
不。关系型或SQL数据库以具有公共列的表(称为主键和外键)存储数据,形成表之间的关系。数据始终以定义的架构进行结构化,且难以更改。
但还有其他类型的数据库,统称为非关系型/NoSQL数据库,可以存储非结构化、半结构化或结构化数据。这些数据库允许灵活性和高可用性。一些例子包括MongoDB、Cassandra和CouchDB。
是的。MongoDB是一种文档数据库,属于非关系型数据库。数据以BSON文档的形式存储在集合中,结构类似于JSON。数据被认为是非结构化的,因为一个集合可以包含具有不同字段和数据类型的文档。这提供了高度的灵活性。
由于非关系型数据库的灵活性和可扩展性(水平和垂直),它们适用于广泛的用例。
例如,对于存储应用设置,键值数据库非常适合,因为每个设置只有一个值。对于电子商务网站,文档数据库是理想的,因为可以为每个客户存储一个文档,其中包含他们的详细信息和历史订单,因为它们是私人和独特的。
对于像欺诈检测这样的东西,数据之间的关系至关重要,但数据类型通常是不可预测的,图数据库是一个很好的解决方案。
有关非关系型数据库可能不是最佳选择的更多信息的白皮书,请参阅此处。
关系型数据库更适合不太可能频繁变化的数据。你可以使用关系型数据库来处理中到大型数据集。
对于实时数据和更快的查询结果,可以使用非关系型数据库。此外,由于它们灵活的模式,非关系型数据库可以轻松存储大量非结构化数据。
一些流行的关系型数据库包括MySQL、SQLServer和Oracle。