NoSql基础知识

一、为什么要有NoSql

关系型数据库在三个方面存在不足,或者说,比不上NoSQL:

1、大量数据的写入处理

这里说的关系型数据库不擅长大量数据写入,并不是说关系型数据库在进行大批量数据插入的时候,比不上NoSql快,而是说,关系型数据库不擅长将这么多的数据写入到分布式服务器里面去!因为大量的数据,往往意味着不可能只存在一台服务器上,应该是分布式的,分散地存储在多台服务器上。而关系型数据库,因为着重表与表之间的关联,需要将所有表放在同一台服务器中,所以有人(淘宝的数据库专家)说,目前的关系型数据库本质上是单机系统。而NoSql因为表之间并无关联,因此是天然适应分布式的,分布式写入,当然要比关系型数据库强。

好比关系型数据库,为了应付大量的数据存储,由一台服务器分为两台服务器,那么就有两种方案:

1)二元数据库

两台服务器的表都一样,写入的时候,可以将数据分成两份,每台写一半,然后再互相更新,同步。那么同步之前,有一致性问题。

2)数据库分割

将一部分表放在服务器A,另一部分表放在服务器B。同步问题是没有了,但如果这些表要关联查找呢?大概只能在应用程序层面进行了。

看上去,这两种方案都很折腾。

2、对存在大量数据的表做索引或进行表结构变更

关系型数据库的表结构很严谨,对有数据的表做表结构变更,或者索引,那么会有一个锁定的问题,数据越多,锁定问题越严重。如果是一个使用中的生产数据库,也许是不可以接受的。

而NoSql,因为其设计和结构不同于关系型数据库,比如mongoDB,文档型,每一条记录都是一个文档,文档里存什么都可以,不存在着所谓固定的文档格式,也就不存在什么表结构变更的问题(MongoDB没有所谓表结构)。关系型数据库,表结构变更,程序和数据库都要改;对MongoDB,改程序就可以了。

至于索引,我还尚不清楚NoSql的索引原理。但如果是键值对型NoSql,则索引都是KEY,没有必要进行变更?

3、没有join的简单查询快速返回结果

查询是关系型数据库的强项,但如果不涉及到join的话,其实NoSql会比它更快?

参考资料:

http://kb.cnblogs.com/page/95676/

二、NoSql的分类

根据数据库的存储种类和特点,可以分为:

1、键值对

代表:memcached,Redis

2、文档型

以mongoDB为代表。比对关系型数据库,集合可看成表,文档可看成记录。每一条记录,都是一个文档。

3、列存储

HBase

4、图存储,对象存储,XML等等

三、如何应用NoSql

NoSql天然分布式,特别有利于数据分散存储,易扩展,高可用,高性能,但不支持事务,如果能与关系型数据库搭配使用,可形成互补。

NoSql的使用方式,大致可分为:

1、以NoSql纯用作内存管理

比如 Redis,临时性或持久性键值存储,性能更超越大名鼎鼎的memcached。


2、以关系型数据库为辅,NoSql为主

以NoSql为数据源,将数据写入NoSql,然后通过复制/同步机制,再将数据同步到关系型数据库里。

好处是简单,灵活,高性能,易扩展。

缺点是有数据同步问题,且技术要求高,因为NoSql缺乏容易使用的复制同步接口。


3、以关系型数据库为主,NoSql为辅

1)NoSql作为镜像

数据同时写入关系型数据库和NoSql,NoSql数据库主要用于读取。这样实现读写分离,可以利用NoSql的高性能来应付大量的查询。


2)数据拆分存储到关系型数据库和NoSql数据库

比如,关系型数据库只存储需要查询的小字段,NoSQL存储所有数据。

这种架构模式把RDBMS和NoSQL的作用进行了融合,各司其职,让关系型数据库专门负责处理擅长的关系存储,NoSQL作为数据的存储。优点是

节省了主数据库(关系型数据库)的IO开销,有利于主数据库的备份和恢复,也使整个架构的性能、扩展性都得到提升。


posted on 2014-09-16 22:54  左直拳  阅读(465)  评论(0编辑  收藏  举报

导航