时间:2021-07-01 10:21:17 帮助过:24人阅读
《NoSQL精粹》是Martin Fowler和他的同事两年前合写的,看过《重构》等书的应该都对Fowler的能力和写作无可挑剔。 大家都在沸沸扬扬的讨论NoSQL,那究竟什么是NoSQL?作者给出了一种观点(Fowler给出的观点我认为还是比较权威的),首先NoSQL现有没有一个明
《NoSQL精粹》是Martin Fowler和他的同事两年前合写的,看过《重构》等书的应该都对Fowler的能力和写作无可挑剔。
大家都在沸沸扬扬的讨论NoSQL,那究竟什么是NoSQL?作者给出了一种观点(Fowler给出的观点我认为还是比较权威的),首先NoSQL现有没有一个明确的定义,以后也不可能有;但是它具有一些共同的特征:
1、正如其名,它不应该使用SQL,虽然可以类似于SQL,那是为了习惯大家的操作;
2、应该是开源的,虽然确实有一些非开源的,但至少至今,大家都认为它应该开源;像HBase、Redis、mongoDB不都是开源的吗
3、它应该允许在集群上,因为它产生的原因就是由于关系型数据与集群间的矛盾,当然,也有一些不能很好支持集群,比如图数据库;
4、无模式,也就是没有固定的字段,可以随时随意增减;
5、最后作者认为它具有时代性,特指21世纪出产生的数据,那是因为不加这个时代特征,光凭上述几个特点总有一些80、90年代的数据库恰好中奖,而从我们现在讨论的范围来看,那些确实不应该称之为NoSQL。
总体而言,一句话粗略来说就是21世纪初诞生的为了解决大数据运行在集群上的数据库。
另外,作者还表述了一种观点,这个观点应该是全书的一个基调,那就是关系型数据库和NoSQL的生存问题。首先,作者认为关系数据库不会灭亡,而且还是很好的生存、发展下去;但是,它的绝对统治地位是保不住了,NoSQL不会是昙花一现,我们作为开发人员,今后将从过去的“选择哪个关系数据库”变为“选择关系数据库or NoSQL”。关于这点,有一个常用词叫polyglot persistence,直译是多种(数据库)语言持久化,译者称为“混合持久化”。
为什么关系数据库不会消失?它在诞生之初,就具有四个极具创新的优点:数据持久化、事务、共享数据和标准得无可挑剔的SQL。这四个优点使得它在当时打败了其它的竞争对手,存活了40多年(从1970关系模型提出开始计算的话),大家已经使用的熟悉不能再熟悉了,就好比你用了c++多年,又没出现什么大问题,你会轻易换你的编程语言吗?不要小看这个熟悉性,90年代其实出现过对象数据库,但是遗憾的是我现在真的听都没听过。(如果把关系型数据库看作一个产品的话,我觉得他就是微信,虽然有很多缺点,但是它做得确实挺好用,如果不是为了泡妞,你也不会换用陌陌,更别提来往和米聊)
然而,关系型数据又具有两个一直为人诟病并不可解决的大问题:第一个是与面向对象模型毫不匹配,译者使用了一个词叫做“阻抗失谐”,原文是mismatch,翻译为失谐我觉得还是不错的;第二是它并不能很好运行在集群上,而如今的数据量已经不同往日,不然阿里为何突然要花大力气去IOE。(其实我觉得,NoSQL真正流行可能是第二个原因更为重要)
后面,作者把NoSQL总结性的归为四类:键值对数据库(比如Redis)、文档数据库(如mongoDB)、列族数据库(如HBase)、图数据库(如OrientDB)。然后后面章节逐一详细介绍。
PS:里面掺杂了一些我的个人看法,如果不对或者与原作者有出入的,请原谅勿喷。