1.关系数据库的不足

  • 大量数据的写入处理
  • 为有数据更新的表做索引或表结构变更
  • 字段不固定时应用
  • 对简单查询需要快速返回结果的处理

2. Nosql数据库的出现和优点

为了弥补关系型数据库的不足,出现Nosql数据库,关系型数据库应用广泛,能进行事务处理和join等复杂处理。相对的Nosql数据库只能应用在特定领域,基本上不进行复杂的处理,但它恰恰能弥补关系型数据库的不足。

  • 易于数据的分散
  • 适合大量数据的写入处理
  • 希望对数据进行缓存处理
  • 希望对数组类型的数据进行高速处理
  • 希望进行全部保存

3. Nosql数据库分类

临时性键值存储(memcached)

    在内存中保存数据,可以进行快速的读取和保存处理,数据可能丢失

永久性键值存储(Tokyo Tyrant)

    硬盘上保存数据,可以进行快速的读取和保存处理(性能不如memcached),数据不会丢失

临时/永久性简直存储(redis)

   同时在内存和硬盘上保存数据,可以进行快速的读取和保存处理,保存在硬盘上的数据不会丢失,适合处理数组类型的数据

面向文档的数据库(MongoDB)

  不定义表结构,可以使用复杂的查询条件

面向列的数据库(Hbase)

  高扩展性(特别是写入处理),应用比较困难。


1.memcached:

  • 挥发性的键值存储
  • 一般作为关系型数据库的缓存来使用
  • 具有非常快的处理速度
  • 由于存在数据丢失的可能,所以一般用来处理不需要持久保存的数据
  • 用于需要使用expires时(需要定期清除数据)
  • 使用Consistent Hashing算法来分散数据
  • 缺点:数据可能丢失,键不支持模糊查询

2.Tokyo Tyrant

  • 持久性的键值存储
  • 用来处理需要持久保存,高速处理的数据
  • 具有非常快的处理速度
  • 用于不需要定期清除数据时
  • 使用Consistent Hashing算法来分配数据

3. Redis

  • 兼具memcached和Tokyo Tyrant优势的键值存储
  • 擅长处理数组类型的数据
  • 具有非常快的处理速度
  • 可以高速处理时间序列的数据,易于处理集合运算
  • 拥有很多可以进行原子处理的方法
  • 使用Constent Hashing算法来分散数据

4.MongoDB

  • 面向无需定义表结构的文档数据
  • 具有非常快的处理速度
  • 通过BSON的形式可以保存和查询任何类型的数据
  • 无法进行JOIN处理,但是可以通过嵌入来实现同样的功能
  • 使用sharding算法来分散数据

5.MySql数据库NoSql化

插件HandlerSocket,它就是Mysql的非SQL接口,通过它可以不使用SQL就能读取和更新MySql的数据。HandlerSocket虽然不支持事务处理,但是这种单纯的处理避免了使用SQL带来的额外开销,可以高速地完成数据处理。就读取数据是的性能来说,优于memcached.