NoSql介绍
Nosql全称Not Only Sql(不仅仅是Sql)也叫非关系型数据库, 通关系型数据库一样(SQL server, MySQL), 这种数据库一般也是用来保存数据的, 不够这种保存数据的优势在于性能更高, 速度更快,可以很好的处理大量的数据库引用, 满足解决大量的数据操作.
NoSql数据库的四大分类
键值(Key-Value)存储数据库
这种数据库主要使用哈希表, 哈希表中有一个唯一键和一个指针指向所保存的数据. Key-Value的优势就是在于简单, 易操作,易部署. 但是如果只对部分值进行查询或更新的时候, Key-Value就会相对效率较低.。典型的应用场景:内容缓存,主要用于处理大量数据的高访问负载,也用于日志系统。
优点: 查找速度快
缺点: 数据五结构化,通常自卑当作字符串或者二进制数据
此类型的应用包括: Redis, Memcache, Oracle BDB。
列存储数据库
这类数据库通常是用在应对分布式存储的海量数据. 它是一个键,指向多个列.。此类型主要用于分布式的文件系统。
优点: 查找速度快,可扩展性强,跟容易进行分布式扩展。
缺点: 功能相对局限。
此类型包括: Cassandra, HBase
文档型数据库
文档型数据库的灵感是来自于一款办公软件, 而且它同第一种键值存储相类似。该类型的数据库模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。
优点: 数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构
缺点: 查询性能不高,而且缺乏统一的查询语法(类似关系型数据库有统一的Sql语法)
此类型包括:MongoDb,Sequoia DB,CouchDB
图形数据库
图形结构的数据库通其他行列以及刚性结构的Sql数据库不同,它是使用灵活的图形模型,并且能够拓展到多个服务器上。NoSql数据库没有标志的查询语言(sql),因此进行数据库查询需要制定数据库模型。许多Nosql数据库都有REST式的数据接口或者查询API。
优点: 利用图结构相关算法。比如最短路径寻址,N度关系查找。
缺点: 很多时候需要对整个图像计算才能得出需要的信息,而且这种结构不好做分布式
此类型包括:Neo4J, Infinite Graph, InfoGrid
所以NoSql数据库在一下几种情况下比较适用:
1. 数据模型比较简单;
2. 需要灵活性更强的IT系统;
3. 对数据库性能要求较高;
4. 不需要高度的数据库一致性;
5. 对于给定Key,比较容易映射复杂值的环境。
NoSql和关系型数据库的区别
1.存储方式
关系型数据库是表格式,因此存储在表的行和列中。他们之前很容易关联写作存储,提取数据很方便。
NoSql数据库则相反,他是整个组合在一起。通常存储在数据集中,就像文档,键值对或图结构。
2.存储结构
关系型数据库对应的是结构化数据,数据表都是预先定义了结构,结构描述了数据的形式和内容。则一点对数据建模至关重要,虽然预定义结构带来了可靠性和稳定性,但是修改这些数据比较困难。
Nosql基于动态结构,使用与非结构化数据。因为Nosql数据库是动态结构,可以很容易适应数据类型和结构变化。
3.存储规范
关系型数据库的数据存储为了更高的规范性,把数据分割为最小的关系表以避免重复,获得精简的空间利用。虽然管理起来很清晰,但是单个操作设计到多张表的时候,数据管理就显得麻烦。
Nosql存储在数据集中,数据经常可能会重复。单个数据库很少被分割开,而是存储成了一个整体,这样整块数据更加便于读写。
4.存储扩展
两者的最大区别就在此。关系数据库是纵向扩展,也就是说想要提高处理能力,要使用速度更快的计算机。因为数据存储在关系表中,操作的性能瓶颈可能设计到多个表,需要通过提升计算机性能克服。虽然有很大的扩展空间,但是最终会达到纵向扩展的上限。
Nosql是横向扩展,它的存储天然就是分布式的,可能通过给资源池添加更多的普通数据库服务器来分担负载。
5.查询方式
关系数据库通过结构化查询语言来操作数据库(sql)。sql支持数据库的CURD操作功能非常强大,是各大关系数据库的标准。
Nosql查询是以单元操作数据,使用非结构化查询语言,它是没有标准的。
关系型数据库表中主键的概念对应Nosql中存储文档的ID。关系数据库使用预定义的优化方式(如索引)来加快查询操作,而Nosql更简单更精确的数据访问模式。
6.事务
关系数据库遵循ACID规则(原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)),
Nosql遵循BASE原则(基本可用(Basically Available)、软/柔性事务(Soft-State)、最终一致性(Eventual Consistency))。
由于关系数据库数据一致性强,所以对事务支持很好,易于回滚事务。而Nosql基于节点的分布式系统中,很难全部满足一致性,可用性,分区容忍度,所以对事务的指出不是很好。
7.性能
关系型数据库为了维护数据的一致性付出很大代价,读写性能差。在面对高并发时,读写性能非常差,面对海量的数据的时候,效率非常低。
Nosql存储格式一般是Key-Value类型,并且存储在内存中,非常已于存储,而且对于数据的一致性是弱要求。Nosql无需sql解析,提高读写性能。
8.使用成本
关系数据库广泛使用的是SQL server,Oracle,Mysql。主流的Nosql数据库有redis,memcache,Mongodb。而大多关系数据库是需要付费使用,Nosql通常都是开源的。