一、NoSQL数据库的四大种类
一)分类
图 1 NoSQL 数据库分类
二)不同分类特点对比
分类 | 例子 | 应用场景 | 数据模型 | 优点 | 缺点 |
键值数据库 | Redis,Oracle BDB | 内容缓存,主要处理大量数据的高访问负载,也有一些日志系统等 | Key 指向 Value 的键值对,通常用hash table来实现 | 查找速度快 | 数据无结构化,通常只被当作字符串或者二进制数据 |
列存储数据库 | Cassandra, HBase | 分布式的文件系统 | 以列簇式存储,将同一列数据存在一起 | 查找速度快,可扩展性强,更容易进行分布式扩展 | 功能相对局限 |
文档型数据库 | CouchDB, MongoDB | Web应用 | Key-Value对应的键值对,Value为结构化数据 | 数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构 | 查询性能不高,而且缺乏统一的查询语法 |
图形数据库 | Neo4J, InfoGrid | 社交网络,推荐系统等。专注于构建关系图谱 | 图结构 | 利用图结构相关算法。比如最短路径寻址,N度关系查找等 | 很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。 |
– | – | – | – | – | – |
三)补充
1、KV键值对
- 新浪:Redis
- 美团:Redis + Tair
- 阿里、百度:Redis + Memcached
- Redis
Redis 是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
- Tair
Tair是一种分布式结构数据存储系统,由一个中心控制节点和一系列的服务节点组成。
Tair是一个Key/Value结构数据的解决方案,它默认支持基于内存和文件的两种存储方式,分别与缓存和持久化存储对应。
Tair的功能是get、put、delete以及批量接口。
图2 Tair总体架构图
- Memcached
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。
Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。
Memcached简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的API兼容大部分流行的开发语言。 本质上,它是一个简洁的key-value存储系统。
一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
2、文档型数据库
- BSON格式
Bson格式是类似json的一种二进制格式,主要被用作MongoDB数据库中的数据存储和网络传输,专门为MongoDB而开发的。
这种格式不一定比json存储的文件小,其优点是解释快。
- MongoDB
MongoDB是一个基于分布式文件存储的数据库,C++编写,主要用来处理大量的文档。
MongoDB是一个介于关系型数据库和非关系型数据库中间的产品,是非关系型数据库中功能最丰富,最像关系型数据库的。
- ConthDB
二、NoSQL和SQL的区别
一)概念
SQL:是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。是用于所有数据库的基本语言,不同数据库之间存在较小的语法改,但基本的SQL语法基本保持不变。
SQL数据库:指关系型数据库,有:SQL Server、Oracle、MySQL(开源)…
NoSQL数据库:泛指非关系型数据库或分布式数据库,有:Redis、MongoDB、ConthDB…
二)区别
图3 SQL数据库和NoSQL数据库对比
1、语言
SQL数据库是基于表的,它的定义和操作是基于数据的结构化查询语言(SQL)。这种语言非常强大,适用于复杂的查询,但要求所有数据都必须遵循相同的结构。这可能需要大量的前期准备,意味着结构的变化容易对整个系统造成破坏。
NoSQL数据库具有非结构化数据的动态模式,没有固定查询语言,是通过API、SDK来实现。数据以多种方式存储,有面向文档,面向列,基于图形或组织为KeyValue存储。可以在没有首先定义结构的情况下创建文档,语法因数据库而异,可以随时添加字段。
2、可伸缩性
SQL数据库都是可垂直扩展的。
NoSQL数据库可以横向扩展,更适用大数据存储。
3、遵循的属性
SQL数据库遵循ACID属性(atomicity原子性, consistency一致性, isolation隔离性和durability持久性)
NoSQL数据库遵循Brewers CAP定理(Consistency一致性,Availability可用性和Partitiontolerance分区容差)
4、适用场景
目前许多大型互联网项目都会选用MySQL(或任何关系型数据库) + NoSQL的组合方案。
- 适合使用 SQL 开发的项目:
适合存储结构化数据,如用户的帐号、地址:
1)数据库模式,结构可以预先规定的,或者可以相对固定的项目
2) 要求数据事务性、一致性
3) 这些数据的规模、增长的速度通常是可以预期的
- 适合使用 NoSQL 开发的项目:
适合存储非结构化数据,如文章、评论:
1)不相关,不确定和逐步发展的数据需求
2) 速度和可扩展性至关重要的
3)这些数据通常用于模糊处理,如全文搜索、机器学习