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.