概述
我们常常遇到的数据库有关系数据库和非关系数据库,说到关系型数据库,就要从1970年E.F.Codd的《A Relational Modelof Data forLarge Shared Data Banks》的论文开始讲起。该论文奠定了关系模型的理论基础,Codd的同事DonChamberlin对Codd的论文和关系运算进行转换,发明了简单易用的SQL语言,并且在之后的发展中成为所有关系型数据库的标准。这种高级的非过程化编程接口语言,成为了距离数据库最近的语言,将计算机科学和人类理解认知完美的衔接在了一起。1970 年关系模型建立之后,IBM公司在SanJose实验室增加了更多的研究人员研究这个项目,这个项目就是著名的System R。该项目结束于1979年,完成了第一个实现SQL的DBMS。1973年加州大学伯克利分校的Michael Stonebraker 和EugeneWong利用System R已发布的信息开始开发自己的关系数据库系统Ingres。LarryElision和他的同事看到商机,开发出第一个商用大型关系型数据库Oracle(之后将近半个世纪Oracle一直都是关系型数据库的领头羊),之后IBM也推出了DB2、MichaelStonebraker开发了Postgres并放在BSD版权下,后来演变成了Postgres SQL,87年微软和Sybase合作,开发出了MS SQL和Sybase。到了2000年后,另一款明星产品MySQL由于其自由开放、轻量,被google等互联网公司普遍使用,并逐步进入大家的视野从而火爆起来。然后说说NoSQL。NoSQL是一个比较模糊的概念,而且在不同阶段这解读出来的含义也不一样,网上有一个比较有意思另类解读(下图),不同的解读本身也释放出NoSQL这个技术的螺旋、摇摆的发展态势。在本文里,我们把NoSQL泛指非关系型数据库。关系数据库很强大,但是它并不能很好的适用所有的应用场景。尤其以社交、搜索为代表的互联网业务产生海量数据时,关系型数据库在扩展性(需要负责技术sharding来实现)、高昂的表变更成本、高并发容量、写入延迟等方面都面对很多挑战。NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。同样NoSQL在海量数据读写性能方面,也优势明显,同时提供了灵活的数据模型。NoSQL的产品很多,但引领这股潮流的主要有Amazon的DynamoDB、google的bigtable,后来Facebook开源了Cassandra,以及基于bigtable设计的hadoop Hbase,bigtabl开源实现的Hypertable,以及支持文档事务Mongodb、普遍用于缓存的redis及redis cluster。值得一提的是美团点评内部有一个很优秀存储系统Cellar,兼内存与持久化的分布。在NoSQL盛行之初,人们似乎能看到了NoSQL取代关系型数据库的时代,可事与愿违,使用NoSQL需要从应用业务去把关系数据库重新实现,而且数据库的功能被向存储方向进一步弱化。这里面的一个代表事件就是DIGG采用Cassanrda遭遇失败,大家重新理解了关系模型的SQL是最方便和数据交互的语言,所以开始妥协,于是大部分NoSQL开始尝试支持关系数据库(这时候主流变成了Not only SQL)。可是就又回到了如果让关系数据库具有扩展性、性能这条老路上来,于是忍了很久的另外一批人就重新站了出来,出现了”No,SQL!“的口号,此处的No,SQL并不是真正的No,SQL,而是Not only SQL。