什么是NoSQL?
NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。
NoSQL最常见的解释是“non-relational”, “Not Only SQL”也被很多人接受。NoSQL仅仅是一个概念,泛指非关系型的数据库,区别于关系数据库,它们不保证关系数据的ACID特性。
NoSQL 数据库分类
类型 | 部分代表 | 特点 |
列存储 |
Hbase Cassandra Hypertable |
顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。 |
文档存储 |
MongoDB CouchDB |
文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有机会对某些字段建立索引,实现关系数据库的某些功能。 |
key-value存储 |
Tokyo Cabinet / Tyrant Berkeley DB MemcacheDB Redis |
可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能) |
图存储 |
Neo4J FlockDB |
图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。 |
对象存储 |
db4o Versant |
通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。 |
xml数据库 |
Berkeley DB XML BaseX |
高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath。 |
键值(Key-Value)存储数据库
这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署。但是如果数据库管理员(DBA)只对部分值进行查询或更新的时候,Key/value就显得效率低下了。举例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB。
列存储数据库
这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。如:Cassandra, HBase, Riak.
文档型数据库
文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可以看作是键值数据库的升级版,允许之间嵌套键值,在处理网页等复杂数据时,文档型数据库比传统键值数据库的查询效率更高。如:CouchDB, MongoDb. 国内也有文档型数据库SequoiaDB,已经开源。
图形(Graph)数据库
图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。如:Neo4J, InfoGrid, Infinite Graph。
不同分类特点对比
分类
|
Examples举例
|
典型应用场景
|
数据模型
|
优点
|
缺点
|
---|---|---|---|---|---|
键值(key-value)
|
Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB
|
内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。
|
Key 指向 Value 的键值对,通常用hash table来实现
|
查找速度快
|
数据无结构化,通常只被当作字符串或者二进制数据
|
列存储数据库
|
Cassandra, HBase, Riak
|
分布式的文件系统
|
以列簇式存储,将同一列数据存在一起
|
查找速度快,可扩展性强,更容易进行分布式扩展
|
功能相对局限
|
文档型数据库
|
CouchDB, MongoDb
|
Web应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容)
|
Key-Value对应的键值对,Value为结构化数据
|
数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构
|
查询性能不高,而且缺乏统一的查询语法。
|
图形(Graph)数据库
|
Neo4J, InfoGrid, Infinite Graph
|
社交网络,推荐系统等。专注于构建关系图谱
|
图结构
|
利用图结构相关算法。比如最短路径寻址,N度关系查找等
|
很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。
|
REF
https://www.runoob.com/mongodb/nosql.html
https://baike.baidu.com/item/NoSQL/8828247?fr=aladdin