缘由
今天主要想了想在项目(音乐网站)中如何使用我们的有没有必要使用Nosql,突然发现原来只是粗浅的认为:就要用Nosql,因为Nosql听起来是高新技术,然后我就要用。而不考虑适合不适合。今天上午看了本,整本书扫了很久,虽然没有得出最终的结论,不过还是收获良多。下面还是自己总结一下:
Nosql
Nosql是 Not Only sql的缩写,含义为:适合关系型数据库的时候就使用关系型数据库,不适合的时候没有必要非使用关系型数据库,也可以其他数据存储的方式。这里就是Nosql数据库。然而,作者提出的观点就是:关系型数据库与非关系型数据库并非对立的关系,不是只使用关系型数据库或只使用非关系型数据库,而是一种相互补充的关系,如下图所示:我认为业界经常出现的MysqL与memcached就是一种常见的组合,它结合了关系型数据库和非关系型数据库的优势。
关系型数据库
优势:- 保持了数据的一致性(事务处理):非常重要
- 由于以标准化为前提,数据更新的开销很小(相同字段基本上只有一处)
- 可以进行JOIN等复杂的查询
- 存在很多实际的成果和成熟的技术
劣势:
- 不适合大量数据的写入处理
- 为有数据更新的表做索引或表结构的变更时非常麻烦:就是一个线程对一个表写(读),另一个线程要修改表结构。
- 字段不固定的应用
- 不能对简单的查询需要快速返回结果的处理:sql解析,表的锁定以及解锁均需要时间
在数据的读写方面,主要采用下面的模型,我们可以看到有主数据库和从数据库,要写,只能写主数据库,然后主数据库把数据复制到从数据库,这时,要读入的操作只与从数据库有关了。但是写入的操作必须要通过主数据库才能完成。
当我们数据比较多的时候,一台主服务器不够,我们只有再加一台,那么如下图所示:
结构,有些表就分开发了,如下图所示,我们无法进行JOIN的处理:
Nosql的特点
- 易于数据的分散:没有JOIN的操作,所以数据可以随意的分散在几个服务器上。
- 数据增多时可以扩大规模
比如如果数据增多,现在的服务器磁盘不够用了,我们可以换容量更多的磁盘。但是大家都知道容量越大,肯定越贵,而且之前恐怕就没有用了。而性能越强,费用越高。这是就提升性能的过程。
我们还可以扩大规模,所谓扩大规模就是指买更多的机器。让更多的机器联合起来使用。由于Nosql具有数据的分散的特点,所以可以增大规模来提高服务器的处理能力。
- 缓存处理多使用了Nosql技术
- 希望对数组类型的数据进行高速处理
Nosql的分类以主要的Nosql
下面对这两种主要的Nosql介绍一下。
memcahced
核心要点就是 临时性键值存储。所谓临时就是其把数据都存储在了内存,如果一断电的话,那么数据就全没了。优势
- 首先是高速响应,往往作为web应用的高速缓存来使用。其发挥作用的过程简单来说就是将从关系型数据库取出来的数据暂时放在内存(没有发生硬盘的IO处理)中,所以在某些数据集中被访问的时候,能够快速的响应,返回数据。这可以使得有些网页如果需要执行一些耗时的sql语句,那么响应会很慢。有些网页被频繁的访问,负载也很大。
- 其次,就是这个技术相对别的技术来说还是比较成熟的。
- 可以使用一致性散列算法来解决多台服务器运行memcached的问题。
不足之处
redis
特点
可以作为持久性键值对来使用。采用了数据快照的方式,默认是在每15分一次,5分钟10个以上,一分钟一万个以上的键被修改时就会发起快照。可以理解为将数据从内存冲洗到硬盘。可以处理字符串、链表、集合、有序集合、散列表等各种类型的值数据。但是都会被当作字符串来处理,如下图所示:
可以用于完成社交网络的时间线,所谓时间线,就是:用户发言后以时间序列的形式来显示。如下所示:
为什么redis可以完成这个功能呢?主要在于redis能够处理除了字符串以外的集合、链表等类型。书中有代码实现的完整的例子。有兴趣的人可以看书。
然而使用redis的问题在实例比较少。 使用者可能遇到困难的时候需要自己探索。
HandlerSocket
HandlerSocket是以另外一种方式来访问关系型数据库,也就是不用sql语句来访问数据库。如下图所示:可以看到,为了访问存储引擎,必须要通过处理(Handler)接口,而HandlerSocket能够直接与处理(Handler)接口通信而直接访问到存储引擎。这样就免去了sql语句的解析、加锁与解锁。
HandlerSocket的特点如下:
总结
先了解了解吧,也许在实际的开发过程中会遇到使用更多NOsql的地方。现在可以确定的是:
- 会使用memcahced作为高速缓存
- 使用到Redis完成社交模块所需的时间线的功能