大概一年前听说了nosql,上网查了查,觉得自己的基础很差,还不到研究这些的时候(其实就是懒),现在工作两年了,基础依旧薄弱,觉得应该发愤图强学点儿什么了,所以下载了《nosql数据库入门》。

打开pdf,习惯性的看一下这本书有多少页(哈哈,还是懒,要是好几百页估计又没有信心看了,不过还好,只有200页),就这样,先去看看吧~

首先,看了这本书的介绍,觉得就几个问题:

1why nosql?

2、发展史;

3memcached\tokyo\tyrant\redis\mongoDb的应用背景、优缺点、具体应用实例和比较;

4、将mysql数据库nosql化。

 

nosql的使用情况:

1)取代关系型数据库的弱势处理(比如大量数据的写入处理等);

2)作为关系型数据库之外的另一种选择(心里话,如果没有优点,多一种选择也没什么必要,这条可以忽略)。

晕:这本书居然说“...操作具有相当的难度,因此本书仅仅将nosql定位为‘关系型数据库之外的另一种选择’”,唉!突然觉得有种说不出的感觉!老实继续看吧~

 

开始啦~~

1、nosql数据库基础知识

1.1关系型数据库和NoSQL数据库

1.1.1什么是nosql?

哦哦,nosql != no sql  noslq == notonly sql ***** (加几颗星表示重点呢!)

它的意义:

适用关系型数据库的时候就适用关系型数据库,不适用的时候也没有必要非适用关系型数据库不可,可以考虑适用更加合适的数据存储。

1.1.2关系型数据库的历史、分类和特征

1)历史(略)

2)分类

根据数据模型(数据的表现形式):阶层型、网络型、关系型

阶层型:用树形结构来定义,简单,一个父记录可拥有多个子记录,一个子记录只有唯一的父记录,难以表示复杂些的关系;

网络型:解决了阶层型数据库难以表示复杂关系的缺点,但是两者共同缺点是:若不理解数据结构就无法进行相应的数据访问,而且,一旦关系发生变化,更新比较困难。

关系型:数据与操作方法(数据之间的关联)分离,消除对数据结构的依赖性,应用范围广泛。

3)特征

优势:

@1通用性和高性能:关系型数据库的性能绝对不低,它具有非常好的通用性和非常高的性能,对于绝大多数的应用来说它都是最有效的解决方案。

@2突出的优势:保持数据一致性(事务处理)、可join等复杂查询、标准化-数据更新的开销很小,存在很多实际成果和专业技术信息。

不足:

@1大量数据的写入处理

在数据读入方面,由复制产生的主从模式(数据的写入由主数据库负责,数据的读入由从数据库负责),可以比较简单地通过增加从数据库来实现规模化。但是,在数据的写入方面却没有这么简单。如把主数据库从一台增加到两台,确实可以减少每台主数据库的负荷,但是更新处理时会发生冲突或者造成数据的不一致。为了避免这样的问题,就需要把对每个表的请求分别分配给合适的主数据库来处理,这就不那么简单了。

wKiom1QSwoOTg-UxAAEQBkA9MSI267.jpg

wKioL1QSwqKwSPmgAAESD-kRHjA703.jpg

另外,也可以考虑把数据库分割开来,减少硬盘i/o处理,实现内存上的高效处理,效果非常显著。但是分别放在不同的数据库服务器上的表无法进行join处理,数据库分割的时候就需要预先考虑这些问题,否则就必须要在程序中进行关联,非常困难。

wKioL1QSwq7icrMWAAD0rJG_8_Y324.jpg

@2为有数据更新的表做索引或表结构变更

为了进行创建索引或表结构变更处理,需要对表进行共享锁定,如果耗时,就需要特变注意:长时间内数据可能无法进行更新。

wKioL1QSwrqSAEW1AACKpJjk2gU213.jpg

@3字段不固定时应用

关系型数据库的解决办法:

@1需要的时候添加--反复痛苦

@2预先设定大量的预备字段--时间久了就记不清楚鸟~ 不推荐使用

@4对简单查询需要快速返回结果的处理

这点似乎称不上缺点,但是sql语言进行数据读取时需要对sql进行解析,同时还有对表的锁定和解锁这样的额外开销,虽然不是速度太慢,但是关系型数据库并不擅长对简单的查询快速返回结果,所以希望对简单查询进行高速处理,没必要非用关系型数据库不可。

在这种情况下,推荐大家使用NoSQL数据库。但是像MySQL提供了利用HandlerSocket这样的变通方法,也是可行的。虽然使用的是关系型数据库,但是并没有利用SQL而直接进行数据访问。最后介绍HandlerSocket

wKioL1QSwsfACYTHAACVmKmbEyI282.jpg

1.1.3 NoSQL数据库

NoSQL数据库只应用在特定领域,基本上不进行复杂的处理,但它恰恰弥补了关系型数据库的不足之处。

  • 易于数据的分散

关系型数据库以JOIN为前提,通常不得不把数据存储在同一个服务器内,这不利于数据的分散。相反,NoSQL数据库原本就不支持JOIN处理,各个数据都是独立设计的,很容易把数据分散到多个服务器上,从而即使大量数据的写入操作,处理起来也更加容易。同理,数据的读入操作当然也同样容易。

  • 提升性能和增大规模

题外话:想使服务器能够轻松地处理更大量的数据,那么只有两个选择:一是提升性能,而是增大规模。

提升性能最重要的就是考虑费用,性能翻倍,花费往往不只是原来的2倍,可能需要多达5~10倍。

wKiom1QSwsGj7BW5AABLk6cx3rQ041.jpg

增大规模,则需要对程序进行变更,优点在于廉价、以后只要依葫芦画瓢增加廉价服务器的数量即可。

  • 不对大量数据进行处理的话就没有使用的必要吗?

NoSQL数据库基本上来说为了“使大量数据的写入处理更加容易(让增加服务器数量更容易)”而设计的,但是它还有各种各样的特点。

@1希望顺畅地对数据进行缓存处理

@2希望对数组类型的数据进行高速处理

@3希望进行全部保存

  • 多样的NoSQL数据库

NoSQL数据库存在着“键值存储”、“文档型数据库”、“列存储数据库”等各种各样的种类,每种数据库又包含各自的特点。