什么是 NoSQL 数据库?
NoSQL 数据库专门构建用于特定的数据模型,并且具有灵活的架构来构建现代应用程序。NoSQL 数据库因其易于大规模开发、强大的功能和良好的性能而被广泛认可。本页面包含的资源可帮助您更好地了解 NoSQL 数据库并开始使用。
NoSQL(非关系)数据库如何工作?
NoSQL 数据库使用各种数据模型来访问和管理数据。这些类型的数据库专门针对需要大数据量、低延迟和灵活数据模型的应用程序进行了优化,这是通过放宽其他数据库的某些数据一致性限制来实现的。
考虑为简单的书籍数据库的架构建模的示例:
- 在关系数据库中,书籍记录通常被拆分(或“规范化”)并存储在单独的表中,并且关系由主键和外键约束来定义。在此示例中,书籍表包含 ISBN、书名和版本号列,作者表包含作者 ID 和作者姓名列,作者-ISBN 表包含作者 ID 和 ISBN 列。关系模型旨在使数据库能够在数据库中的表之间强制实施引用完整性,规范化以减少冗余,并且通常针对存储进行优化。
- 在 NoSQL 数据库中,书籍记录通常存储为 JSON 文档。对于每本书,项目 ISBN、书名、版本号、作者姓名和作者 ID 都作为属性存储在单个文档中。在此模型中,针对直观开发和横向可伸缩性对数据进行了优化。
为什么应该使用 NoSQL 数据库?
NoSQL 数据库非常适合许多现代应用程序,例如移动、Web 和游戏等应用程序,它们需要灵活、可扩展、高性能和功能强大的数据库以提供卓越的用户体验。
- 灵活性:NoSQL 数据库通常提供灵活的架构,以实现更快速、更多的迭代开发。灵活的数据模型使 NoSQL 数据库成为半结构化和非结构化数据的理想之选。
- 可扩展性:NoSQL 数据库通常被设计为通过使用分布式硬件集群来横向扩展,而不是通过添加昂贵和强大的服务器来纵向扩展。一些云提供商在后台将这些操作处理为完全托管服务。
- 高性能:NoSQL 数据库针对特定的数据模型和访问模式进行了优化,这与尝试使用关系数据库完成类似功能相比可实现更高的性能。
- 强大的功能:NoSQL 数据库提供功能强大的 API 和数据类型,专门针对其各自的数据模型而构建。
NoSQL 数据库的类型
键值:键值数据库是高度可分区的,并且允许以其他类型的数据库无法实现的规模进行水平扩展。诸如游戏、广告技术和 IoT 等使用案例本身特别适合键值数据模型。Amazon DynamoDB 旨在为任意规模的工作负载提供一致且低于 10 毫秒的延迟。这种一致的性能是为何使用 Snapchat Stories 功能的主要原因,该功能包含移至 DynamoDB 的 Snapchat 的最大存储写入工作负载。
文档:在应用程序代码中,数据通常表示为对象或 JSON 文档,因为对开发人员而言它是高效和直观的数据模型。文档数据库让开发人员可以使用他们在其应用程序代码中使用的相同文档模型格式,更轻松地在数据库中存储和查询数据。文档和文档数据库的灵活、半结构化和层级性质允许它们随应用程序的需求而变化。文档模型可以很好地与目录、用户配置文件和内容管理系统配合使用,其中每个文档都是唯一的,并会随时间而变化。Amazon DocumentDB(兼容 MongoDB)和 MongoDB 是流行的文档数据库,提供强大且直观的 API,可实现灵活的迭代开发。
图形:图形数据库旨在轻松构建和运行与高度连接的数据集一起使用的应用程序。图形数据库的典型使用案例包括社交网络、推荐引擎、欺诈检测和知识图形。Amazon Neptune 是一项完全托管的图形数据库服务。Neptune 支持属性图形模型和资源描述框架 (RDF),同时提供两种图形 API 选择:TinkerPop 和 RDF/SPARQL。热门图形数据库包括 Neo4j 和 Giraph。
内存:游戏和广告技术应用程序具有排行榜、会话存储和实时分析等使用案例,它们需要微秒响应时间并且可能随时出现大规模的流量高峰。Amazon ElastiCache 提供 Memcached 和 Redis 来处理无法使用基于磁盘的数据存储处理的低延迟、高吞吐量工作负载,如 McDonald’s。Amazon DynamoDB Accelerator (DAX) 是另一个专门构建的数据存储示例。DAX 使 DynamoDB 读取的速度提高了一个数量级。
搜索:许多应用程序输出日志以帮助开发人员解决问题。Amazon Elasticsearch Service (Amazon ES) 旨在通过对半结构化日志和指标建立索引、汇总和搜索来提供机器生成数据的近实时可视化和分析。Amazon ES 还是一个功能强大的高性能搜索引擎,用于全文搜索使用案例。Expedia 将超过 150 个 Amazon ES 域、30TB 数据和 300 亿个文档用于各种任务关键型使用案例,其中包括从操作监控和故障排除到分布式应用程序堆栈跟踪和定价优化。
SQL(关系)与NoSQL(非关系)数据库
数十年来,用于应用程序开发的主要数据模型是由关系数据库(如 Oracle、DB2、SQL Server、MySQL 和 PostgreSQL)使用的关系数据模型。直到 21 世纪中后期,才开始大规模采用和使用其他数据模型。为了对这些新类别的数据库和数据模型进行区分和分类,创造了术语“NoSQL”。通常术语“NoSQL”与“非关系”可互换使用。
虽然许多类型的 NoSQL 数据库具有各种不同的功能,但下表显示了 SQL 和 NoSQL 数据库之间的一些差异。
关系数据库 | NoSQL 数据库 | |
---|---|---|
最佳工作负载 |
关系数据库专为事务性和高度一致的联机事务处理 (OLTP) 应用程序而设计,并且适用于联机分析处理 (OLAP)。 | NoSQL 数据库适用于包括低延迟应用程序在内的多种数据访问模式。NoSQL 搜索数据库设计用于对半结构化数据进行分析。 |
数据模型 | 关系模型可将数据标准化为由行和列组成的表。采用一种架构来严格定义表、行、列、索引、各个表之间的关系及其他数据库元素。数据库在表之间的关系中强制实施引用完整性。 |
NoSQL 数据库提供了各种数据模型,如键值、文档和图形,这些模型针对性能和规模进行了优化。 |
ACID 属性 | 关系数据库提供原子性、一致性、隔离性和持久性 (ACID) 属性:
|
NoSQL 数据库通常通过放宽关系数据库的一些 ACID 属性来进行权衡,以获得可以水平扩展的更灵活的数据模型。这将使 NoSQL 数据库成为高吞吐量、低延迟使用案例的绝佳选择,这些使用案例需要水平扩展超出单个实例的限制。 |
性能 | 性能通常取决于磁盘子系统。要获得最佳性能,通常需要优化查询、索引和表结构。 | 性能通常由底层硬件集群大小、网络延迟以及调用应用程序来决定。 |
扩展 | 关系数据库通常通过增加硬件的计算能力进行纵向扩展或通过为只读工作负载添加副本进行横向扩展。 | NoSQL 数据库通常是可分区的,因为访问模式可以通过使用分布式体系结构进行横向扩展来提高吞吐量,从而以接近无限的规模提供一致的性能。 |
API | 存储和检索数据的请求通过使用符合结构化查询语言 (SQL) 的查询来传达。这些查询由关系数据库解析和执行。 | 借助基于对象的 API,应用开发人员可以轻松存储和检索数据结构。通过分区键,应用程序可以查找键值对、列集或包含序列化应用程序对象和属性的半结构化文档。 |
SQL 与NoSQL 术语
下表将精选的 NoSQL 数据库使用的术语与 SQL 数据库使用的术语进行了比较。
SQL | MongoDB | DynamoDB | Cassandra | Couchbase |
---|---|---|---|---|
表 | 集合 | 表 | 表 | 数据存储桶 |
行 | 文档 | 项目 | 行 | 文档 |
列 | 字段 | 属性 | 列 | 字段 |
主键 | 对象 ID | 主键 |
主键 | 文档 ID |
索引 | 索引 | 二级索引 | 索引 | 索引 |
视图 | 视图 | 全局二级索引 | 具体化视图 | 视图 |
嵌套表或对象 | 嵌入文档 | 映射 | 映射 | 映射 |
数组 | 数组 | 列表 | 列表 | 列表 |
列表 |
列表 |
主键 |
DynamoDB 入门
DynamoDB 的入门很简单。请参阅 DynamoDB 入门网页,单击几下即可创建第一个表。