关系型数据库和非关系型数库

本文摘至https://aws.amazon.com/

关系型数据库

概念

关系型数据(SQL 数据库):是指采用了关系模型来组织数据的数据库,以包含行和列的表格格式存储数据。列包含数据属性,行包含数据值。这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。

关系型数据库的优势

它提供了一种直观的方式来表示数据且可轻松访问相关的数据点,例如,对表中的数据进行计数、排序和分组,以及执行数学运算并生成复杂的报告。
使用关系型数据库管理和存储数据还有许多其他优势,包括:

  • 数据完整性
    数据完整性指的是数据的整体完整性、准确性和一致性。关系数据库使用一组约束来强制确保数据库中数据的完整性。它们包括主键、外键、“Not NULL”约束、“Unique”约束、“Default”约束和“Check”约束。
    这些完整性约束有助于在表中的数据上强制实施业务规则,以确保数据的准确性和可靠性。除此之外,大多数关系数据库还允许将自定义代码嵌入到触发器中,这些触发器根据对数据库中数据点的操作执行。自定义代码也可以嵌入到存储过程中,这些存储过程在客户端或应用程序调用时执行。
  • 安全性
    基于角色的安全性可确保只有特定用户才能访问数据,数据库管理员可以精确地确定谁有权访问哪些数据。即使在单个单元格级别,您也可以限制读取、修改和删除数据的访问权限。这种精细的访问控制使关系数据库非常安全。
  • 备份和灾难恢复
    大部分关系数据库都具有导入和导出功能,因此可以快速创建数据备份和恢复数据。
  • 社区支持
    部分技术是开源的,可以免费使用。开源数据库拥有活跃的社区,不断改进和调整特性和功能。开发人员和数据工程师可以访问各种工具和软件,以便使用关系数据库。

关系数据库的工作原理

关系数据库的工作原理是提供一个环境,应用程序可以在该环境中访问数据并以各种方式重组数据,无需从应用程序代码中重新组织数据表。

关系数据库系统特点

数据存储方式

关系型数据库采用表格的储存方式,数据以行和列的方式进行存储。

数据存储结构

关系型数据库按照结构化的方法存储数据,每个数据表都必须对各个字段定义好(也就是先定义好表的结构),再根据表的结构存入数据,这样做的好处就是由于数据的形式和内容在存入数据之前就已经定义好了,所以整个数据表的可靠性和稳定性都比较高,但带来的问题就是一旦存入数据后,如果需要修改数据表的结构就会十分困难。

数据存储规范

关系型数据库为了避免重复、规范化数据以及充分利用好存储空间,把数据按照最小关系表的形式进行存储,这样数据管理的就可以变得很清晰、一目了然,当然这主要是一张数据表的情况。如果是多张表情况就不一样了,由于数据涉及到多张数据表,数据表之间存在着复杂的关系,随着数据表数量的增加,数据管理会越来越复杂。

扩展方式

由于关系型数据库将数据存储在数据表中,数据操作的瓶颈出现在多张数据表的操作中,而且数据表越多这个问题越严重,如果要缓解这个问题,只能提高处理能力,也就是选择速度更快性能更高的计算机,这样的方法虽然可以一定的拓展空间,但这样的拓展空间一定有非常有限的,也就是关系型数据库只具备纵向扩展能力。

查询方式

关系型数据库采用结构化查询语言(即SQL)来对数据库进行查询,SQL早已获得了各个数据库厂商的支持,成为数据库行业的标准,它能够支持数据库的CRUD(增加,查询,更新,删除)操作,具有非常强大的功能,SQL可以采用类似索引的方法来加快查询操作。

规范化

数据库的设计开发过程中开发人员通常会面对同时需要对一个或者多个数据实体(包括数组、列表和嵌套数据)进行操作,这样在关系型数据库中,一个数据实体一般首先要分割成多个部分,然后再对分割的部分进行规范化,规范化以后再分别存入到多张关系型数据表中,这是一个复杂的过程。好消息是随着软件技术的发展,相当多的软件开发平台都提供一些简单的解决方法,例如,可以利用ORM层(也就是对象关系映射)来将数据库中对象模型映射到基于SQL的关系型数据库中去以及进行不同类型系统的数据之间的转换。

事务处理

关系数据库事务是作为构成单个逻辑工作单元的操作序列运行的一个或多个 SQL 语句。事务提供“全有或全无”的主张,这意味着整个事务必须作为一个单元完成。如果关系数据库管理系统无法完成事务的任何部分,则所有单个组件都无法通过。在关系模型术语中,事务会导致 COMMIT 或 ROLLBACK。数据库管理系统连贯可靠地对待每个事务,独立于其他事务且与之隔离。

ACID 合规性

所有关系数据库事务都必须是原子的、一致的、隔离的和持久的(ACID),以确保数据的完整性。

  • 原子性
    原子性要求整个事务应该成功执行。如果事务的某个部分失败,则作为事务的一部分所做的任何更改都将回滚。
  • 一致性
    一致性要求作为事务一部分写入关系数据库的数据必须遵守所有定义的规则及限制,后者包括约束、级联和触发器。
  • 隔离性
    隔离性要求每个事务彼此独立。当多个用户尝试同时修改关系数据库中的数据时,并发控制机制会阻止他们覆盖彼此的更改。
  • 持久性
    持久性要求在成功完成事务后,对关系数据库所做的所有更改都是永久性的。

读写性能

关系型数据库十分强调数据的一致性,并为此降低读写性能付出了巨大的代价,虽然关系型数据库存储数据和处理数据的可靠性很不错,但一旦面对海量数据的处理的时候效率就会变得很差,特别是遇到高并发读写的时候性能就会下降的很厉害。

常用的关系型数据库

MySQL、PostgreSQL、MariaDB、Microsoft SQL Server 、Oracle

非关系型数据库

概念

非关系型数据库(NoSQL 数据库):通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定,常用于存储非结构化的数据。

NoSQL 数据库的优点

NoSQL 数据库专为非关系数据模型而构建,并且具有构建现代化应用程序的灵活架构;可适用于:应用程序需要处理来自社交媒体、智能传感器和第三方数据库等不同来源的大量数据。所有这些不同的数据都无法完全融入关系模型。强制使用表格结构可能会导致大规模的冗余、数据重复和性能问题。

  • 灵活性
    NoSQL 数据库通常提供灵活的架构,可以实现更快速、更多的迭代开发。灵活的数据模型使 NoSQL 数据库成为半结构化和非结构化数据的理想之选。
  • 可扩展性
    NoSQL 数据库通常被设计为通过使用分布式硬件集群来横向扩展,而不是通过添加昂贵和强大的服务器来纵向扩展。一些云提供商在后台将这些操作处理为完全托管服务。
  • 高性能
    NoSQL 数据库针对特定的数据模型和访问模式进行了优化。与尝试使用关系数据库实现类似功能相比,它们可以实现更高的性能。
  • 功能强大
    NoSQL 数据库提供功能强大的 API 和数据类型,专门针对其各自的数据模型而构建。

非关系型数据工作原理

NoSQL 数据库使用各种数据模型来访问和管理数据。 这些类型的数据库专门针对需要灵活的数据模型、大数据量和低延迟的应用程序进行了优化,这是通过放宽其他关系数据库的某些数据一致性限制来实现的。基于数据模型的实施存在差异。但是,许多 NoSQL 数据库使用 Javascript 对象表示法(JSON),这是一种开放的数据交换格式,将数据表示为名称-值对的集合。

非关系型数据库的特点

易扩展

NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。无形之间,在架构的层面上带来了可扩展的能力。

大数据量,高性能

NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。一般MySQL使用Query Cache。NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说性能就要高很多。

灵活的数据模型:

NoSQL无须事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是——个噩梦。这点在大数据量的Web 2.0时代尤其明显。

高可用

NoSQL在不太影响性能的情况,就可以方便地实现高可用的架构。比如Cassandra、HBase模型,通过复制模型也能实现高可用。

NoSQL 数据库的类型

键值数据库

键值数据库是高度可分区的,并且允许以其他类型的 NoSQL 数据库可能无法实现的规模来进行水平扩展。键值数据库将数据存储为键值对集合,其中键作为唯一标识符。键和值都可以是从简单对象到复杂复合对象的任何内容。诸如游戏、广告技术和 IoT 等使用案例本身特别适合键值存储数据设计。Amazon DynamoDB 旨在为任意规模的工作负载提供稳定的性能和低于 10 毫秒的延迟。

文档数据库

文档数据库的文档模型格式与开发人员在其应用程序代码中使用的格式相同。它们将数据存储为 JSON 对象,这些对象具有灵活、半结构化和分层的性质。文档和文档数据库的灵活、半结构化和层级性质允许它们随应用程序的需求而变化。文档数据库模型可以很好地与目录、用户配置文件和内容管理系统配合使用,其中每个文档都是唯一的,并会随时间而变化。Amazon DocumentDB(与 MongoDB 兼容)和 MongoDB 是流行的文档数据库,提供强大且直观的 API,可实现灵活的迭代开发。

图形数据库

图形数据库旨在轻松构建和运行与高度连接的数据集一起使用的应用程序。它们使用节点来存储数据实体,并使用边缘来存储实体之间的关系。边缘总是有起始节点、终止节点、类型和方向。它可以描述父子关系、操作和所有权等内容。一个节点可以拥有的关系的数量和类型没有限制。您可以使用图形数据库来构建和运行处理高度连接的数据集的应用程序。图形数据库的典型使用案例包括社交网络、推荐引擎、欺诈检测和知识图形。Amazon Neptune 是一项完全托管的图形数据库服务,支持属性图形模型和资源描述框架(RDF),同时提供两种图形 API 选择(TinkerPop 和 RDF/SPARQL)。

内存数据库

其他非关系数据库会将数据存储在磁盘或固态硬盘上,而内存中的数据存储则旨在消除访问磁盘的需求。它们非常适合需要微秒级响应时间或流量峰值较大的应用程序。您可以在游戏和广告技术应用程序中使用它们来实现排行榜、会话存储和实时分析等功能。适用于 Redis 的 Amazon MemoryDB 是一种与 Redis 兼容的持久内存数据库服务,可提供微秒级读取延迟、毫秒级写入延迟和多可用区持久性。Amazon ElastiCache 是一种完全托管式内存缓存服务,与 Redis 和 Memcached 兼容,用于服务低延迟、高吞吐量的工作负载。Amazon DynamoDB Accelerator(DAX)是专用数据存储的另一个示例,它使 DynamoDB 的读取速度提高了一个数量级。

搜索数据库

搜索引擎数据库是一种非关系数据库,专用于搜索数据内容,例如开发人员用于解决问题的应用程序输出日志。它们使用索引对数据中的相似特征进行归类,并且可以提高搜索能力。搜索引擎数据库经过优化,可对图像和视频等非结构化数据进行排序。Amazon OpenSearch Service 旨在通过对半结构化日志和指标建立索引、汇总和搜索来提供机器生成数据的近实时可视化和分析。

关系型数据库和非关系型数据库区别

最佳工作负载

  • 关系数据库:专为事务性和高度一致的联机事务处理(OLTP)应用程序而设计。它们也适用于联机分析处理(OLAP)系统。
  • NoSQL 数据库适用于包括低延迟应用程序在内的多种数据访问模式。NoSQL 搜索数据库设计用于对半结构化数据进行分析。

数据模型

  • 关系模型可将数据标准化为由行和列组成的表。采用一种架构来严格定义表、行、列、索引、各个表之间的关系及其他数据库元素。数据库在表之间的关系中强制实施引用完整性。
  • NoSQL 数据库提供了各种数据模型,如键值、文档、图形和列,这些模型针对性能和规模进行了优化。

ACID 属性

  • 关系数据库提供原子性、一致性、隔离性和持久性(ACID)属性:
    原子性要求事务完全执行或根本不执行
    一致性要求事务提交之后,数据必须符合数据库架构。
    隔离性要求并发事务彼此分开执行。
    持久性要求能够从意外系统故障或断电情况中恢复到上一个已知状态。

  • NoSQL 数据库通过放宽关系数据库的某些 ACID 属性来作出取舍,以获得可以水平扩展的更灵活的数据模型。这将使 NoSQL 数据库成为高吞吐量、低延迟使用案例的绝佳选择,这些使用案例需要水平扩展超出单个实例的限制。

性能

  • 关系型数据库:性能通常取决于磁盘子系统。要获得最佳性能,通常需要优化查询、索引和表结构
  • 非关系型数据库:性能通常由底层硬件集群大小、网络延迟以及调用应用程序来决定。

扩展

  • 关系型数据库:通常通过增加硬件的计算能力进行纵向扩展或通过为只读工作负载添加副本进行横向扩展。
  • NoSQL 数据库通常是可分区的。这是因为访问模式可以通过使用分布式体系结构进行横向扩展来提高吞吐量,从而以接近无限的规模提供一致的性能。

API

  • 关系型数据库:存储和检索数据的请求通过使用符合结构化查询语言(SQL)的查询来传达。这些查询由关系数据库解析和执行。
  • 非关系型数据库:借助基于对象的 API,应用开发人员可以轻松存储和检索数据结构。通过分区键,应用程序可以查找键值对、列集或包含序列化应用程序对象和属性的半结构化文档。

NoSQL的适用场景

NoSQL 数据库最适合处理不确定、不相关或快速变化的数据。当应用程序决定数据库架构时,对于开发人员来说,使用 NoSQL 数据库比较直观。您可以将其用于以下应用程序:
需要灵活的架构来实现更快、更具迭代性的开发。
优先考虑性能,而不是强数据一致性和维护数据表之间的关系(引用完整性)。
需要通过跨服务器分片进行横向扩展。
支持结构化、半结构化和非结构化数据。
非关系数据库架构和关系数据库架构并不总是非此即彼的。您可以在应用程序中结合使用 SQL 和 NoSQL 数据库。这种混合方法非常常见,可确保将每个工作负载映射到正确的数据库,以实现最佳的性价比

  • 32
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值