NoSQL以及其应用场景

前端之家收集整理的这篇文章主要介绍了NoSQL以及其应用场景前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

缘由

今天主要想了想在项目(音乐网站)中如何使用我们的有没有必要使用Nosql,突然发现原来只是粗浅的认为:就要用Nosql,因为Nosql听起来是高新技术,然后我就要用。而不考虑适合不适合。今天上午看了本
,整本书扫了很久,虽然没有得出最终的结论,不过还是收获良多。下面还是自己总结一下:


Nosql

NosqlNot Only sql的缩写,含义为:适合关系型数据库的时候就使用关系型数据库,不适合的时候没有必要非使用关系型数据库,也可以其他数据存储的方式。这里就是Nosql数据库。然而,作者提出的观点就是:关系型数据库与非关系型数据库并非对立的关系,不是只使用关系型数据库或只使用非关系型数据库,而是一种相互补充的关系,如下图所示:

我认为业界经常出现的MysqL与memcached就是一种常见的组合,它结合了关系型数据库和非关系型数据库的优势。

关系型数据库

优势:
  1. 保持了数据的一致性(事务处理):非常重要
  2. 由于以标准化为前提,数据更新的开销很小(相同字段基本上只有一处)
  3. 可以进行JOIN等复杂的查询
  4. 存在很多实际的成果和成熟的技术
书中指出:如果对 一致性的要求非常高,那么使用关系型数据库就是肯定没有错的。比如对于电子商务网站来说,一个东西买了和没买,有货与没货,不同的客户通过浏览器看到的必须要一致。

劣势:
  1. 不适合大量数据的写入处理
  2. 为有数据更新的表做索引或表结构的变更时非常麻烦:就是一个线程对一个表写(读),另一个线程要修改表结构。
  3. 字段不固定的应用
  4. 不能对简单的查询需要快速返回结果的处理:sql解析,表的锁定以及解锁均需要时间
书中对上述4点都做了完整的叙述。我讲一些为什么不适合大量数据的写操作:
在数据的读写方面,主要采用下面的模型,我们可以看到有主数据库和从数据库,要写,只能写主数据库,然后主数据库把数据复制到从数据库,这时,要读入的操作只与从数据库有关了。但是写入的操作必须要通过主数据库才能完成。

当我们数据比较多的时候,一台主服务器不够,我们只有再加一台,那么如下图所示:


结构,有些表就分开发了,如下图所示,我们无法进行JOIN的处理:



Nosql的特点

  1. 易于数据的分散:没有JOIN的操作,所以数据可以随意的分散在几个服务器上。
  2. 数据增多时可以扩大规模
    比如如果数据增多,现在的服务器磁盘不够用了,我们可以换容量更多的磁盘。但是大家都知道容量越大,肯定越贵,而且之前恐怕就没有用了。而性能越强,费用越高。这是就提升性能的过程。
    我们还可以扩大规模,所谓扩大规模就是指买更多的机器。让更多的机器联合起来使用。由于Nosql具有数据的分散的特点,所以可以增大规模来提高服务器的处理能力。

  3. 缓存处理多使用了Nosql技术
  4. 希望对数组类型的数据进行高速处理

Nosql分类以主要的Nosql

  1. 临时键值存储
  2. 永久性键值存储
  3. 面向文档的数据库
  4. 面向列的数据库


下面对这两种主要的Nosql介绍一下。

memcahced

核心要点就是 临时性键值存储。所谓临时就是其把数据都存储在了内存,如果一断电的话,那么数据就全没了。

优势

  1. 首先是高速响应,往往作为web应用的高速缓存来使用。其发挥作用的过程简单来说就是将从关系型数据库取出来的数据暂时放在内存(没有发生硬盘的IO处理)中,所以在某些数据集中被访问的时候,能够快速的响应,返回数据。这可以使得有些网页如果需要执行一些耗时的sql语句,那么响应会很慢。有些网页被频繁的访问,负载也很大。
  2. 其次,就是这个技术相对别的技术来说还是比较成熟的。
  3. 可以使用一致性散列算法来解决多台服务器运行memcached的问题。

不足之处

  1. 一个就是之内存在内存,断电后数据会消失
  2. 另一个就是不支持模糊查询,如果要查“data_1”,必须输入完整。不能只用data,加通配符之类的。

redis

特点

可以作为持久性键值对来使用。采用了数据快照的方式,默认是在每15分一次,5分钟10个以上,一分钟一万个以上的键被修改时就会发起快照。可以理解为将数据从内存冲洗到硬盘。
可以处理字符串、链表、集合、有序集合、散列表等各种类型的值数据。但是都会被当作字符串来处理,如下图所示:

可以用于完成社交网络的时间线,所谓时间线,就是:用户发言后以时间序列的形式来显示。如下所示:

为什么redis可以完成这个功能呢?主要在于redis能够处理除了字符串以外的集合、链表等类型。书中有代码实现的完整的例子。有兴趣的人可以看书。

然而使用redis的问题在实例比较少。 使用者可能遇到困难的时候需要自己探索。

HandlerSocket

HandlerSocket是以另外一种方式来访问关系型数据库,也就是不用sql语句来访问数据库。如下图所示:

可以看到,为了访问存储引擎,必须要通过处理(Handler)接口,而HandlerSocket能够直接与处理(Handler)接口通信而直接访问到存储引擎。这样就免去了sql语句的解析、加锁与解锁。
HandlerSocket的特点如下:
  1. 可以高速地完成单纯的数据的插入和读取处理
  2. 可以使用sql或者HandlerSocket对同一数据进行访问
  3. 可以通过独立的协议直接访问MysqL的数据
  4. 不支持事务处理

总结

先了解了解吧,也许在实际的开发过程中会遇到使用更多NOsql的地方。
现在可以确定的是:
  1. 会使用memcahced作为高速缓存
  2. 使用到Redis完成社交模块所需的时间线的功能

猜你在找的NoSQL相关文章