本文摘至https://aws.amazon.com/
关系型数据(SQL 数据库):是指采用了关系模型来组织数据的数据库,以包含行和列的表格格式存储数据。列包含数据属性,行包含数据值。这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。
它提供了一种直观的方式来表示数据且可轻松访问相关的数据点,例如,对表中的数据进行计数、排序和分组,以及执行数学运算并生成复杂的报告。
使用关系型数据库管理和存储数据还有许多其他优势,包括:
关系数据库的工作原理是提供一个环境,应用程序可以在该环境中访问数据并以各种方式重组数据,无需从应用程序代码中重新组织数据表。
关系型数据库采用表格的储存方式,数据以行和列的方式进行存储。
关系型数据库按照结构化的方法存储数据,每个数据表都必须对各个字段定义好(也就是先定义好表的结构),再根据表的结构存入数据,这样做的好处就是由于数据的形式和内容在存入数据之前就已经定义好了,所以整个数据表的可靠性和稳定性都比较高,但带来的问题就是一旦存入数据后,如果需要修改数据表的结构就会十分困难。
关系型数据库为了避免重复、规范化数据以及充分利用好存储空间,把数据按照最小关系表的形式进行存储,这样数据管理的就可以变得很清晰、一目了然,当然这主要是一张数据表的情况。如果是多张表情况就不一样了,由于数据涉及到多张数据表,数据表之间存在着复杂的关系,随着数据表数量的增加,数据管理会越来越复杂。
由于关系型数据库将数据存储在数据表中,数据操作的瓶颈出现在多张数据表的操作中,而且数据表越多这个问题越严重,如果要缓解这个问题,只能提高处理能力,也就是选择速度更快性能更高的计算机,这样的方法虽然可以一定的拓展空间,但这样的拓展空间一定有非常有限的,也就是关系型数据库只具备纵向扩展能力。
关系型数据库采用结构化查询语言(即SQL)来对数据库进行查询,SQL早已获得了各个数据库厂商的支持,成为数据库行业的标准,它能够支持数据库的CRUD(增加,查询,更新,删除)操作,具有非常强大的功能,SQL可以采用类似索引的方法来加快查询操作。
数据库的设计开发过程中开发人员通常会面对同时需要对一个或者多个数据实体(包括数组、列表和嵌套数据)进行操作,这样在关系型数据库中,一个数据实体一般首先要分割成多个部分,然后再对分割的部分进行规范化,规范化以后再分别存入到多张关系型数据表中,这是一个复杂的过程。好消息是随着软件技术的发展,相当多的软件开发平台都提供一些简单的解决方法,例如,可以利用ORM层(也就是对象关系映射)来将数据库中对象模型映射到基于SQL的关系型数据库中去以及进行不同类型系统的数据之间的转换。
关系数据库事务是作为构成单个逻辑工作单元的操作序列运行的一个或多个 SQL 语句。事务提供“全有或全无”的主张,这意味着整个事务必须作为一个单元完成。如果关系数据库管理系统无法完成事务的任何部分,则所有单个组件都无法通过。在关系模型术语中,事务会导致 COMMIT 或 ROLLBACK。数据库管理系统连贯可靠地对待每个事务,独立于其他事务且与之隔离。
所有关系数据库事务都必须是原子的、一致的、隔离的和持久的(ACID),以确保数据的完整性。
关系型数据库十分强调数据的一致性,并为此降低读写性能付出了巨大的代价,虽然关系型数据库存储数据和处理数据的可靠性很不错,但一旦面对海量数据的处理的时候效率就会变得很差,特别是遇到高并发读写的时候性能就会下降的很厉害。
MySQL、PostgreSQL、MariaDB、Microsoft SQL Server 、Oracle
非关系型数据库(NoSQL 数据库):通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定,常用于存储非结构化的数据。
NoSQL 数据库专为非关系数据模型而构建,并且具有构建现代化应用程序的灵活架构;可适用于:应用程序需要处理来自社交媒体、智能传感器和第三方数据库等不同来源的大量数据。所有这些不同的数据都无法完全融入关系模型。强制使用表格结构可能会导致大规模的冗余、数据重复和性能问题。
NoSQL 数据库使用各种数据模型来访问和管理数据。 这些类型的数据库专门针对需要灵活的数据模型、大数据量和低延迟的应用程序进行了优化,这是通过放宽其他关系数据库的某些数据一致性限制来实现的。基于数据模型的实施存在差异。但是,许多 NoSQL 数据库使用 Javascript 对象表示法(JSON),这是一种开放的数据交换格式,将数据表示为名称-值对的集合。
NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。无形之间,在架构的层面上带来了可扩展的能力。
NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。一般MySQL使用Query Cache。NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说性能就要高很多。
NoSQL无须事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是——个噩梦。这点在大数据量的Web 2.0时代尤其明显。
NoSQL在不太影响性能的情况,就可以方便地实现高可用的架构。比如Cassandra、HBase模型,通过复制模型也能实现高可用。
键值数据库是高度可分区的,并且允许以其他类型的 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 旨在通过对半结构化日志和指标建立索引、汇总和搜索来提供机器生成数据的近实时可视化和分析。
关系数据库提供原子性、一致性、隔离性和持久性(ACID)属性:
原子性要求事务完全执行或根本不执行
一致性要求事务提交之后,数据必须符合数据库架构。
隔离性要求并发事务彼此分开执行。
持久性要求能够从意外系统故障或断电情况中恢复到上一个已知状态。
NoSQL 数据库通过放宽关系数据库的某些 ACID 属性来作出取舍,以获得可以水平扩展的更灵活的数据模型。这将使 NoSQL 数据库成为高吞吐量、低延迟使用案例的绝佳选择,这些使用案例需要水平扩展超出单个实例的限制。
NoSQL 数据库最适合处理不确定、不相关或快速变化的数据。当应用程序决定数据库架构时,对于开发人员来说,使用 NoSQL 数据库比较直观。您可以将其用于以下应用程序:
需要灵活的架构来实现更快、更具迭代性的开发。
优先考虑性能,而不是强数据一致性和维护数据表之间的关系(引用完整性)。
需要通过跨服务器分片进行横向扩展。
支持结构化、半结构化和非结构化数据。
非关系数据库架构和关系数据库架构并不总是非此即彼的。您可以在应用程序中结合使用 SQL 和 NoSQL 数据库。这种混合方法非常常见,可确保将每个工作负载映射到正确的数据库,以实现最佳的性价比