NoSQL学习笔记 — 开篇

不管是不是玩数据库的,相信都知道近来有个名词很火:NoSQL。其实这个概念已经火很久了,现在大批成熟的NoSQL数据库产品已经汹涌而出并占据各大主要应用市场。前几年一直在玩PostgreSQL,到了现在,自个儿都觉得不看点NoSQL的东西实在说不过去。这阵子挤了点时间,看了点NoSQL的东西,记录下来怕忘了。

这是第一篇,好比会议开头领导致词,虚了点儿但必须得有,好歹多多少少先有个概念不是。要想真正了解NoSQL,后面的路长着呢

  1. 什么是NoSQL
  2. NoSQL的发展史
  3. NoSQL的特点
  4. NoSQL的分类
  5. NoSQL的现状
  6. NoSQL的应用

什么是NoSQL

NoSQL是Not Only SQL的缩写,而不是Not SQL,它和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求,比如说遵循SQL标准、ACID属性、表结构等等等等。比如说后面介绍的Dynamo,在我看来相比传统数据库,叫它分布式数据管理系统更贴切,数据存储被简化更灵活,重点被放在了分布式数据管理上。

这个问题太难,好比问什么是数学。但考试又经常会考,头疼。有兴趣的同学可以去这里(http://en.wikipedia.org/wiki/NoSQL)自己看

NoSQL的发展史

其实NoSQL的概念早在1998年就被提出来了,随后跟随web2.0逐步发展起来,近年更是跟着云计算发展到巅峰。在各种版本的2011十大热门技术预测里,云计算、社交网站、电子商务都在其中,而这三个方向都把NoSQL推到了烫手的地步。Guy Harrison有一篇关于云计算推动NoSQL发展的访谈(http://database.51cto.com/art/201010/229420.htm),没找到原文,有兴趣的同学可以自己找找

NoSQL的特点

换句话说,为什么要选NoSQL?或者为什么NoSQL能火?网上有一堆这样的故事,随便找个背背就行了。在我看来没那么多虚招,说白了,传统型数据库搞不定现在的应用了呗。哪里搞不定了?这就要扯到CAP原理(http://en.wikipedia.org/wiki/CAP_theorem)。

CAP:一致性(Consistency),可用性(Availability)和分区容忍性(Partition tolerance)。CAP原理就一句话,这三个条件最多只能满足两个,不可能三者兼顾。

这下明白了吧,传统数据库遵循ACID,在CAP的C和A上有很严格的要求,所以P很难达到。比如说,在大规模数据条件下,扩展性和性能要求就受到了很大的约束。做企业级应用的兄弟们,应该多多少少会碰到大量存储下数据库性能的问题吧。其实传统数据库已经在做一些改进来应付这些问题,但是CAP原理挡那儿了,算先天不足。当然这并不是说NoSQL就比传统数据库优秀,应用需求不同而已。网上有很多孰优孰劣的对比,实在没必要。当然大规模数据只是一个例子,NoSQL数据库还有其他的一些特点,比如说不拘泥于严格的DBMS存储方式,用key-value轻量灵活存储等等,这个看具体应用需求。

NoSQL数据库一般以P为基本要求,所以就必须牺牲C或者A,一般是C。一般的分布式应用虽然不需要像传统关系型数据库的强一致性,但是最终一致性还是要求的。关于最终一直性学问又大了,可以拉出一篇文章太谈,有时间再表,有兴趣的看这里(http://www.allthingsdistributed.com/2008/12/eventually_consistent.html),有一篇中文的(http://www.infoq.com/cn/news/2008/01/consistency-vs-availability

NoSQL的分类

NoSQL数据库根据实现的不同又可以分为以下几类:Document store,Graph,Key-value store,Object database,Multivalue databases,Tabular,Tuple store等等。这是NoSQL wiki的分类(每个分类代表性的数据库可以去http://en.wikipedia.org/wiki/NoSQL找),和网上传得很多版本有点不一样,比如说盛传的Column based database在wiki的分类中并未找到,归在这个分类里的HBase和Cassandra在wiki上则分属于Tabular和key-value分类。无所谓,没必要深究,知道是什么东西就行了

NoSQL_taxonomy

NoSQL的现状

NoSQL现在有很多成熟的产品被广泛应用。网上找了张NoSQL族谱,现在知名的一些NoSQL数据库,比如说Cassandra,HBase,MongoDB,CouchDB等都在其中

NoSQL_developments

从图上除了可以看到热门的NoSQL数据库,还大致可以看到这些数据库的起源派系。Tokyo Cabinet早了,当年看它的时候NoSQL还没这么火,当然也可能自己孤陋寡闻了。比较强大的两类是BigTable系和Dynamo系,一个属Google一个属Amazon,来头都不小。两个公司都有这两个NoSQL数据库系统的论文发表,这两篇论文被称为NoSQL入手圣经。想要研究NoSQL,那就从这两篇论文开始吧

NoSQL的应用

NoSQL数据库在社交网站和电子商务上的应用应该是非常广泛了。社交网站龙头facebook放弃了自己研发的数据库系统用了Cassendra,有个选用测评报告的,懒得翻出来了有兴趣的自己找。twitter从MySQL切到了Cassendra很不幸又切回了MySQL。电子商务类的就不用再说了吧,amazon自己搞出来的Dynamo还成鼻祖了。

所以基本上可以看出来,NoSQL在某些应用上绝对是趋势,但是就目前来看肯定还有点问题,毕竟走向成熟总有过程。这个纯属个人看法,不述

以上是近期学习来的一些总结,刚开始,有不正确的地方欢迎指正讨论。后续还会有具体NoSQL数据库的学习笔记和问题讨论

Comments are closed.