NoSQL 教程:是什么、NoSQL 数据库类型和示例
什么是 NoSQL?
NoSQL 数据库是一个非关系型数据管理系统,它不需要固定的模式。它避免了连接(join),并且易于扩展。使用 NoSQL 数据库的主要目的是用于分布式数据存储,以满足海量数据存储需求。NoSQL 用于大数据和实时 Web 应用程序。例如,Twitter、Facebook 和 Google 等公司每天收集数 TB 的用户数据。
NoSQL 数据库代表“不仅仅是 SQL”或“不是 SQL”。尽管“NoREL”会是更好的术语,但 NoSQL 却流行起来了。Carl Strozz 于 1998 年引入了 NoSQL 的概念。
传统的 RDBMS 使用 SQL 语法存储和检索数据以获取更深入的见解。相反,NoSQL 数据库系统包含广泛的数据库技术,可以存储结构化、半结构化、非结构化和多态数据。在本 NoSQL 数据库教程中,让我们通过图解来理解 NoSQL。
为什么选择 NoSQL?
NoSQL 数据库的概念随着 Google、Facebook、Amazon 等互联网巨头(它们处理海量数据)的兴起而流行起来。当使用 RDBMS 处理海量数据时,系统响应时间会变慢。
为了解决这个问题,我们可以通过升级现有硬件来“纵向扩展”我们的系统。这个过程很昂贵。
这个问题的替代方案是,当负载增加时,将数据库负载分布到多个主机上。这种方法称为“横向扩展”。
NoSQL 数据库是非关系型的,因此它比关系型数据库更具横向扩展性,因为它们是为 Web 应用程序而设计的。
NoSQL 数据库简史
- 1998 年 - Carlo Strozzi 为他的轻量级、开源关系型数据库使用了 NoSQL 这个术语
- 2000 年 - 图数据库 Neo4j 启动
- 2004 年 - Google BigTable 启动
- 2005 年 - CouchDB 启动
- 2007 年 - 发布了关于 Amazon Dynamo 的研究论文
- 2008 年 - Facebook 开源了 Cassandra 项目
- 2009 年 - 重新引入了 NoSQL 这个术语
NoSQL 的特点
非关系型
- NoSQL 数据库从不遵循关系模型
- 从不提供具有固定列记录的表
- 处理自包含的聚合或 BLOBs
- 不需要对象-关系映射和数据规范化
- 没有查询语言、查询规划器、引用完整性连接、ACID 等复杂功能
无模式
- NoSQL 数据库要么是无模式的,要么是具有宽松模式的
- 不需要任何数据模式定义
- 在同一域中提供异构数据结构
简单的 API
- 提供易于使用的接口来存储和查询数据
- API 允许低级数据操作和选择方法
- 文本协议,主要与 HTTP REST 和 JSON 一起使用
- 大多数使用没有标准的 NoSQL 查询语言
- Web 启用的数据库,作为面向互联网的服务运行
分布式
- 多个 NoSQL 数据库可以以分布式方式执行
- 提供自动扩展和故障转移功能
- 通常为了可扩展性和吞吐量而牺牲 ACID 概念
- 分布式节点之间通常没有同步复制 异步主-主复制、点对点、HDFS 复制
- 仅提供最终一致性
- 共享无架构(Shared Nothing Architecture)。这减少了协调并提高了分发性。
NoSQL 数据库类型
NoSQL 数据库主要分为四种类型:键值对、面向列、基于图和面向文档。每个类别都有其独特的属性和限制。上述数据库没有一种能够解决所有问题。用户应根据产品需求选择数据库。
NoSQL 数据库类型
- 键值对数据库
- 面向列的图
- 基于图
- 面向文档
键值对数据库
数据以键/值对的形式存储。它的设计目的是处理大量数据和重负载。
键值对存储数据库将数据存储为哈希表,其中每个键都是唯一的,而值可以是 JSON、BLOB(二进制大对象)、字符串等。
例如,键值对可能包含一个键,如“Website”,其关联值为“Guru99”。
它是最基础的 NoSQL 数据库示例之一。这种 NoSQL 数据库用作集合、字典、关联数组等。键值存储帮助开发人员存储无模式数据。它们最适合购物车内容。
Redis、Dynamo、Riak 是一些键值存储数据库的 NoSQL 示例。它们都基于 Amazon 的 Dynamo 论文。
基于列
面向列的数据库基于 BigTable 论文(Google 出品),并处理列。每一列都被单独处理。单列数据库的值连续存储。
由于数据在列中是现成的,因此它们在 SUM、COUNT、AVG、MIN 等聚合查询上提供高吞吐量。
基于列的 NoSQL 数据库广泛用于管理数据仓库、商业智能、CRM、图书馆卡片目录等。
HBase、Cassandra、HBase、Hypertable 是基于列数据库的 NoSQL 查询示例。
面向文档
面向文档的 NoSQL 数据库将数据存储和检索为键值对,但值部分存储为文档。文档以 JSON 或 XML 格式存储。数据库理解该值,并且可以对其进行查询。
在这个图的左边,您可以看到行和列,而在右边,我们有一个文档数据库,它的结构与 JSON 相似。对于关系数据库,您需要知道有哪些列等等。然而,对于文档数据库,您有像 JSON 对象一样存储的数据。您不需要定义,这使其具有灵活性。
文档类型主要用于 CMS 系统、博客平台、实时分析和电子商务应用程序。不应用于需要对不同聚合结构执行多个操作或查询的复杂事务。
Amazon SimpleDB、CouchDB、MongoDB、Riak、Lotus Notes、MongoDB,是流行的面向文档的DBMS 系统。
基于图
图类型数据库存储实体及其之间的关系。实体存储为节点,关系为边。边在节点之间建立关系。每个节点和边都有唯一的标识符。
与表连接松散的关系数据库相比,图数据库本质上是多关系的。遍历关系非常快,因为它们已经被捕获到数据库中,无需计算。
基于图的数据库主要用于社交网络、物流、地理空间数据。
Neo4J、Infinite Graph、OrientDB、FlockDB 是一些流行的基于图的数据库。
NoSQL 的查询机制工具
最常见的数据检索机制是通过 GET 资源,根据键/ID 进行基于 REST 的值检索
文档存储数据库提供更复杂的查询,因为它们能够理解键值对中的值。例如,CouchDB 允许使用 MapReduce 定义视图
什么是 CAP 定理?
CAP 定理也称为 Brewer 定理。它指出,分布式数据存储不可能同时提供三个保证中的两个以上
- 一致性
- 可用性
- 分区容错性
一致性
数据在操作执行后应保持一致。这意味着一旦数据写入,任何未来的读取请求都应包含该数据。例如,在更新订单状态后,所有客户端都应能够看到相同的数据。
可用性
数据库应始终可用且响应迅速。它不应有任何停机时间。
分区容错性
分区容错性意味着即使服务器之间的通信不稳定,系统也应继续运行。例如,服务器可以划分为可能无法相互通信的多个组。在这里,如果数据库的一部分不可用,其他部分始终不受影响。
最终一致性
“最终一致性”一词意味着在多台机器上拥有数据的副本以获得高可用性和可扩展性。因此,在一台机器上的任何数据项所做的更改必须传播到其他副本。
数据复制可能不是即时的,因为某些副本会立即更新,而其他副本会在一段时间后更新。这些副本可能相互不一致,但随着时间的推移,它们会变得一致。因此,称为最终一致性。
BASE:Basically Available(基本可用),Soft state(软状态),Eventual consistency(最终一致性)
- 基本上,可用意味着根据 CAP 定理,数据库始终可用
- 软状态意味着即使没有输入,系统状态也可能发生变化
- 最终一致性意味着系统将随着时间推移变得一致
NoSQL 的优点
- 可用作主要或分析数据源
- 大数据能力
- 无单点故障
- 易于复制
- 无需单独的缓存层
- 它提供快速性能和水平可扩展性。
- 能够同样有效地处理结构化、半结构化和非结构化数据
- 面向对象的编程,易于使用且灵活
- NoSQL 数据库不需要专用的高性能服务器
- 支持主要开发语言和平台
- 比使用 RDBMS 更易于实现
- 它可以作为在线应用程序的主要数据源。
- 处理管理数据速度、多样性、卷和复杂性的大数据
- 在分布式数据库和多数据中心操作方面表现出色
- 消除了对特定缓存层来存储数据的需求
- 提供灵活的模式设计,无需停机或服务中断即可轻松更改
NoSQL 的缺点
- 无标准化规则
- 有限的查询功能
- 与 RDBMS 相比,RDBMS 数据库和工具更加成熟
- 它不提供任何传统数据库功能,例如在同时执行多个事务时的并发性。
- 当数据量增加时,由于键变得困难,因此难以维护唯一值
- 与关系数据配合效果不佳
- 新开发人员的学习曲线很陡峭
- 开源选项,因此在企业中不太受欢迎。
摘要
- NoSQL 是一个非关系型 DMS,它不需要固定的模式,避免了连接,并且易于扩展
- NoSQL 数据库的概念随着 Google、Facebook、Amazon 等互联网巨头(它们处理海量数据)的兴起而流行起来
- 1998 年 - Carlo Strozzi 为他的轻量级、开源关系型数据库使用了 NoSQL 这个术语
- NoSQL 数据库从不遵循关系模型,它要么是无模式的,要么是具有宽松模式的
- NoSQL 数据库有四种类型:1)。键值对数据库 2)。面向列的图 3)。基于图 4)。面向文档
- NOSQL 能够同样有效地处理结构化、半结构化和非结构化数据
- CAP 定理包含三个词:一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)
- BASE 代表Basically Available(基本可用),Soft state(软状态),Eventual consistency(最终一致性)
- “最终一致性”一词意味着在多台机器上拥有数据的副本以获得高可用性和可扩展性
- NOSQL 提供有限的查询功能