`

NoSql 笔记

 
阅读更多

看了一些关于NoSql的文章,记录下自己的理解,方便以后重温下。

 

一些链接:

Cassandra - 一个分散的结构化存储系统

8种Nosql数据库系统对比

 

NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关联式数据库的数据库管理系统的统称。

这句话是维基百科上的解释。

 

现在大数据,云计算这些热门词汇屡见不鲜,但是归根结底,这些都是对海量数据的处理。这些数据怎么来的?比方说,用户逛网上商城,他浏览过哪些商品,买过什么商品,这些信息都会被采集保存到数据库当中,同时网站会提供相类似的商品信息供顾客比较选择。再比如,SNS社交网站,微博微信,这些数据巨大的信息都是要被处理的。面对这么庞大的数据,传统关系型数据库并不能高效快速的处理这些数据。传统的关系型数据库读写操作都是事务的,具有ACID(原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durability)的特点,C就是一致性(Consistency),这个特点是关系型数据库的灵魂(其他三个AID都是为其服务的),这个特性使得关系型数据库可以用于几乎所有对一致性有要求的系统中,如典型的银行系统。

但是,在网页应用中,尤其是SNS应用中,一致性却不是显得那么重要,用户A看到的内容和用户B看到同一用户C内容更新不一致是可以容忍的,或者说,两个人看到同一好友的数据更新的时间差那么几秒是可以容忍的,因此,关系型数据库的最大特点在这里已经无用武之地,起码不是那么重要了。

相反的,关系型数据库为了维护一致性所付出的巨大代价就是其读写性能比较差,而像微博,facebook这类SNS的应用,对并发读写能力要求极高,关系型数据库已经无法应付(在读方面,传统上为了克服关系型数据库缺陷,提高性能,都是增加一级memcache来静态化网页,而在SNS中,变化太快,memcache已经无能为力),因此,必须用新的一种数据结构化存储来来代替关系数据库。

关系数据库的另一个特点就是其具有固定的表结构,因此,其扩展性极差,而在SNS中,系统的升级,功能的增加,往往意味着数据结构巨大改动,这一点关系型数据库也难以应付,需要新的结构化数据存储。

 

于是,非关系数据库(NoSQL)应运而生,由于不可能用一种数据结构化存储方式应付所有的新的需求,因此,非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。

必须强调的是,数据的持久存储,尤其是海量数据的持久存储,还是需要关系数据库这员老将。

 

NoSql首先它不仅仅是一个SQL,它并不是说排斥SQL。另外,我觉得NoSQL有几个核心点或者说核心概念,它是一个可扩展的系统,我们要求系统的扩展性非常高。另外一点是它的架构,它是一个自由架构的结构,它不像关系模型一定要把架构制定得非常严格,这是我的理解。第三点是它基于大量PC结构来支持,因为现在PC很便宜,单机性能很高,它能够通过机柜堆叠来扩展以达到比一个小型机更高的性能。我理解NoSQL是一个过程,或者说,NoSQL对我们来说是对现有架构的补充,并不是说它一定要把谁干掉。

 

依据结构化方法以及应用场合的不同,主要分为以下几类:

 

面向高性能并发读写的Key-Value数据库:Key-Value数据库的主要特点就是具有极高的并发读写性能,Redis,Tokyo Cabinet,Flare就是这类的代表。

面向海量数据访问的面向文档数据库(Document store):这类数据库的特点是,可以在海量的数据中快速的查询数据。典型代表为MongoDB以及CouchDB。

面向可扩展性的分布式数据库(Object Store):这类数据库想解决的问题就是传统数据库在可扩展性上的缺陷,这类数据库可以适应数据量的增加以及数据结构的变化,Google Appengine的Big Table就是这类的典型代表,并且,BigTable特别适用于Map Reduce处理。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics