欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

《NoSQL精粹》读后感(一)

程序员文章站 2022-04-21 09:42:32
...

《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:里面掺杂了一些我的个人看法,如果不对或者与原作者有出入的,请原谅勿喷。