关系型数据库是以行和列的形式存储数据,并以表的形式组成了数据库,其数据查询是用query来检索的。
NoSQL(Not Only SQL),非关系数据库,顾名思义,则不或者不完全遵循该形式。
随着大数据对数据量存储和检索速度的要求越来越高,传统的关系型数据库在应付大规模和高并发的SNS(社交网络服务)类型和web2.0纯动态网站显得很吃力。NoSQL数据库在解决大规模数据和多重数据等方面的问题日益常见。
NoSQL数据库的适用要根据具体项目需求进行考虑。
NoSQL数据库的四大分类:
1.键值(Key-Value)存储数据库
常使用Hash表(key/value)进行存储,简单易部署,但当DBA对部分值查询或者更新时,效率低下。
例:Redis、Oracle BDB、Voldemort
2.列存储数据库
这部分数据库通常用来用来应对分布式存储的海量数据,一个key对应对个列,这些列使用过列家族来安排的。
例:HBase、Riak
3.文档型数据库
与键值存储类似,数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如json。文档型数据库是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。如:MongDb、CouchDB。国内SequoiaDB
4.图形(Graph)数据库
图形结构的数据库是使用灵活的图形模型,并且能够拓展到多个服务器上。图形数据库查询没有标准的查询语言,因此进行查询需要制定数据模型。许多图形数据库都有Rest式的数据接口或者查询API。例:Neo4J、InfoGrid、Infinite Graph
NoSQL数据库的特征:
- 不需要预定义模式:不需要事先定义数据模式,预定义表结构。数据中的每条记录都可能有不同的属性和格式。当插入数据时,并不需要预先定义它们的模式。
- 无共享架构:相对于将所有数据存储的存储区域网络中的全共享架构。NoSQL往往将数据划分后存储在各个本地服务器上。因为从本地磁盘读取数据的性能往往好于通过网络传输读取数据的性能,从而提高了系统的性能。
- 弹性可扩展:可以在系统运行的时候,动态增加或者删除结点。不需要停机维护,数据可以自动迁移。
- 分区:相对于将数据存放于同一个节点,NoSQL数据库需要将数据进行分区,将记录分散在多个节点上面。并且通常分区的同时还要做复制。这样既提高了并行性能,又能保证没有单点失效的问题。
- 异步复制:和RAID存储系统不同的是,NoSQL中的复制,往往是基于日志的异步复制。这样,数据就可以尽快地写入一个节点,而不会被网络传输引起迟延。缺点是并不总是能保证一致性,这样的方式在出现故障的时候,可能会丢失少量的数据。
- BASE:相对于事务严格的ACID特性,NoSQL数据库保证的是BASE特性。BASE是最终一致性和软事务。
NoSQL数据库并没有一个统一的架构,两种NoSQL数据库之间的不同,甚至远远超过两种关系型数据库的不同。可以说,NoSQL各有所长,成功的NoSQL必然特别适用于某些场合或者某些应用,在这些场合中会远远胜过关系型数据库和其他的NoSQL。