首页 > 编程笔记

NoSQL(非关系型数据库)是什么?

非关系型数据库也称为 NoSQL 数据库,请注意,NoSQL 的本意是“Not Only SQL”,指的是非关系型数据库,而不是“No SQL”(没有SQL)的意思。

NoSQL 数据库的产生之初并不是要彻底地否定和终结关系型数据库,而是作为传统关系型数据库的一个有效补充。

随着互联网 Web2.0、Web3.0 网站的兴起,传统的关系型数据库在应付这些网站,特别是对于规模日益扩大的海量数据,超大规模和高并发的微博、微信等类型的动态网站时已经显得力不从心,暴露了很多难以克服的问题,例如,传统关系型数据库的 I/O 瓶颈、性能瓶颈等都难以有效突破。

于是出现了大批针对特定场景,以高性能、高并发以及使用便利为目的的功能特异化的数据库产品,非关系型数据库就是在这样的情景中诞生并得到非常迅速发展的。在这些特定的场景下,NoSQL 数据库可以发挥出难以想象的高效率和高性能。近年来,NoSQL 这个术语得到了广泛认同。

NoSQL 是非关系型数据库的广义定义,它打破了长久以来关系型数据库与 ACID 理论大一统的局面。

NoSQL 数据库的数据存储不需要固定的表结构,通常也不存在连接操作,其在大数据存取上具备关系型数据库无法比拟的性能优势,满足了企业应用需要将数据存储在横向且伸缩性上更强的功能需求。例如,Google 的 BigTable、Amazon 的 Dynamo 都是非常成功的商业 NoSQL 实现。

在开源的 NoSQL 体系中,从早期的 Memcached 缓存软件到当今 Facebook 的 Cassandra、Apache 的 HBase,都得到了广泛应用,redis、MongoDB 等新兴的 NoSQL 数据库,也逐渐受到各类公司的欢迎和追捧。

NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多 NoSQL 数据库都有 REST 式的数据接口或者查询 API。

非关系型数据库(NoSQL)知识小结

1) NoSQL 数据库不是否定关系型数据库,而是作为关系型数据库的一个重要补充。

2) NoSQL 数据库为了适应灵活及高性能、高并发需求而生,忽略影响高性能、高并发的功能。

3) 在 NoSQL 数据库领域,当今的最典型产品为 redis(持久化缓存)、MongoDB、Memcached(纯内存)等。

4) NoSQL 数据库没有标准的查询语言(SQL),通常使用 REST 式的数据接口或者查询 API。

非关系型数据库种类介绍

1) 键值存储数据库

键值(key-value)数据库类似于传统语言中使用的哈希表,可以通过 key 来添加、查询或者删除数据,因为是使用 key 主键访问,所以会获得很高的性能及扩展性。

键值数据库主要使用一个哈希表,表中有一个特定的键和一个指针(指向特定的数据)。对于 IT 系统来说,key/value 模型的优势在于简单、易部署、高并发。

下面就来举例说明。

k1→oldboy

k1 是键,相当于学号,oldboy 对应的就是真实的数据,相当于具体的人。

我们要找人,首先定位学号 (k1, k2),然后再找到具体的数据 (oldboy, oldgirl)。

键值存储数据库的典型产品为 Memcached、redis。

Memcached、redis 是互联网领域里中小型企业网站使用最多的 NoSQL 数据库种类。

2) 列存储数据库

列存储(column-oriented)数据库会将数据储存在列族(column family)中,一个列族通常存储会被一起查询的相关数据。

举个例子,对于 Person 类,我们通常会查询他们的姓名和年龄,而不是薪资。在这种情况下,姓名和年龄就会放入一个列族中,而薪资则放在另一个列族中。

这部分数据库通常用于应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列,这些列是由列族来安排的。

列存储数据库的典型产品为 Cassandra、HBase。

Cassandra、HBase 是互联网领域大型门户网站使用较多的 NoSQL 数据库种类。例如,新浪、京东网站使用的是 HBase,360 安全公司使用的是 Cassandra。

3) 面向文档的数据库

面向文档(document-oriented)的数据库的灵感来自于 Lotus Notes 办公软件,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如 JSON。

面向文档(document-oriented)的数据库可以看作键值数据库的升级版,允许之间嵌套键值,而且面向文档(document-oriented)的数据库比键值数据库的查询更高效。

面向文档的数据库会将数据以文档的形式储存。每个文档都是自包含的数据单元,是一系列数据项的集合。每个数据项都有一个与名称对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关联对象等。

数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用 XML、JSON 或者 JSONB 等多种形式存储。

面向文档的数据库的典型产品为 MongoDB。

MongoDB 是互联网领域里中小型企业比较常用的面向文档的数据库种类,在部分企业里,可以替代 MySQL 作为数据库使用。

4) 图形数据库(了解即可)

图形(graph)数据库允许我们将数据以图形的方式进行存储。实体会被作为顶点,而实体之间的关系则会被作为边。比如我们有三个实体 Steve Jobs、Apple 和 Next,则会有两个“Founded by”的边将 Apple 和 Next 连接到 Steve Jobs。

图形结构的数据库与其他行列以及刚性结构的 SQL 数据库不同,它使用的是灵活的图形模型,并且能够扩展到多个服务器上。

图形数据库的典型产品为 Neo4J、InfoGrid

在笔者工作的十多年里,没有使用过图形数据库,不过根据国外网站数据库排名信息来看,Neo4J 上升到了 21位(截至笔者写作时),看来该软件正在被越来越多的人所熟知,我们对它保持关注吧,建议简单了解就可以了。

推荐阅读