redis&memcached&SQL&NoSQL

Why

  1. 一个应用确定有两部分逻辑:数据逻辑和业务逻辑。
    • 数据逻辑包括各类I/O,和内部的数据的处理,也就是在内部如何组织数据结构,变量也属于这一部分。
  2. 当一个应用变成一个进程,它负责数据逻辑的部分就有了两个选择:
    • 将数据存在内存中,存在内存中的数据若是变得很重要,就须要保存进磁盘,因此有可能须要持久化的逻辑。为了更好的使用数据,须要有很好的数据结构建模,虽然基本的数据结构,甚至一些复杂的在程序语言或者库中都有集成,可是语言不负责执行,因此执行这一块仍是进程本身在作。
    • 将数据存在磁盘中,这须要有存/取得逻辑,在取的这一部分,基于业务可能要有强大的检索逻辑
  3. 当应用的数据规模变得很大,相应的数据逻辑和业务逻辑也会变得很复杂
    1. 从效率上来讲,是时候考虑分布式了,因此咱们有必要将和数据有关的逻辑独立出去,好比磁盘上的检索,内存中数据的持久化等。
    2. 从开发和维护的角度来讲,集中精力在业务而不是数据,可使得代码量变少,开发速度和可维护性都大大提升。

How

  1. 显然要将数据逻辑尽量独立出去,就要用到工具软件,redis、memcached、Sql,NoSql都是这个目的的工具
  2. redis、memcached 侧重于内存中的数据
    • 内存中的数据都有时效性,因此这两个工具都支持expire
    • memcached 只负责 数据的存、取和超时,在取得部分也不考虑复杂得检索逻辑
    • redis则更强大,它支持了5中数据结构,针对这些数据结构得操做也能够分离给它,同时还支持持久化,更强大的还支持主备、集群,可见它为分布式作了很好的工做。
  3. Sql、NoSql 侧重于磁盘侧数据
    • 须要存在磁盘的每每是重要数据,这些数据更偏现实,是人类可读的,不像内存中的数据好比堆栈、整型这样的。这种数据咱们称之为用户数据,又或者事务数据。这类数据每每很大,因此检索成了一个基本要求。
    • NoSql 提供简单的检索,或者说基于算法的检索,好比hash、值比较、正则匹配等
    • Sql 则提供复杂的检索,或者说基于事物的检索,而事务是复杂,很难一次建模的,为此咱们用现实分类的方式建表,将数据冗余的存于多个表,从而得到强大的事务描述能力,称之为关系型数据库,关系便是现实的数据模型的复杂联系。关系型数据库使得咱们事务数据建模的难度大大下降,也就使得开发和维护的程度大大下降。另外一方面,Sql集成了强大的数据分析能力,使得数据分析的使用门槛下降不少。
    • 无论是Sql仍是NoSql都是C/S架构,很显然也使得分布式变得很容易

When

  1. 从上面能够看出偏内存的,选择redis或者memcache,偏磁盘的选择Sql、NoSql
  2. Nosql能作的,Sql都能作,memcached能作的redis都能作
    • Nosql 更简单,面向不是很复杂的事务数据模型,用不到很复杂的检索和建模,选择Nosql能够更快开发和检索。好比图书关的检索系统,图书的数据模型很简单,也不须要很事务的检索,这些检索用NoSql就能够作。这时候用NoSql速度快,开发快。
    • memcached又比redis简单,若是仅仅是数据量大,好比一个Web后端它对链接的一些记录例如cookie等,还有为了加快速度作的一些缓存,数据简单,设计的算法反倒不复杂,咱们选memcached就很合适,速度更快,开发更快。
    • 在须要数据持久化的时候,memcached不适合,这时候选redis。
    • 在一些分布式架构中选redis,是由于它为分布式作了更多的工做,好比甚至提供了Publish/Subscribe 功能。memcached在分布式中最大作缓存,而redis是能够承接相似“中立交换语言”如json、xml所起的做用。
  3. 能够用redis或者memcached的场合,理论上SQl、NoSql也能够作,可是前者在内存中,速度确定快不少。
相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息