一、NoSQL入门及应用场景
NoSQL:即 Not-Only SQL( 泛指非关系型的数据库),作为关系型数据库的补充。
作用:应对基于海量用户和海量数据前提下的数据处理问题。
常见 Nosql 数据库:
- Redis
- memcache
- HBase
- MongoDB
特征:
- 可扩容,可伸缩
- 大数据量下高性能
- 灵活的数据模型
- 高可用
2. NoSQL数据库分类
(1)Redis/memcache/MongoDB对比
数据存储
- MongoDB的存储格式是文档类型,是一种类型json的格式,这样有机会对某些字段建立索引,可以简单的模仿一下关系型数据库,而且MongoDB确实也有db,table的概念
- Memcache的存储格式是Key-Value模式,但是很遗憾的是,Value的格式只能是字符串,这也限制了Memcache的应用范围
- Redis的存储格式和Memcache一样,也是Key-Value模式,但是Redis有另外的实现,除了基本的string类型,redis还实现了hash,list,set,zset数据类型
安全验证
- Redis有权限验证,不过是全局的,一号在手,天下我有
- Mongo的权限验证类似RBAC,给不同的库建立了不同的账号,并分配账号权限
- Memcache没有自己的权限验证,只能通过防火墙等手段限制
数据有效期
- Redis可以给key添加过期时间,这里需要注意的是,这个过期时间是针对顶级key的,意味着你不能给list里面某个单独元素或者hash里面的单独字段设置时间
- Memcache也是可以设置过期时间的,这里推荐使用时间戳来设置,避免30天的那个界限。
- MongoDB本身其实可以看作是一个数据仓库了,不存在过去时间这一说
数据持久化
- Redis本身支持两种持久化,快照和AOF追加方式
- Mem很遗憾,并没有持久化功能,断电就GG
- MongoDB,你就当他是数据库吧!
特色功能
- Redis没发现
- Memcache多用于分布式缓存,通过addserver的方式,将不同的键保存到不同的服务器上面,一台GG也不影响其他的服务器,当然这里面也就存在一个问题,各个服务器的数据不同步
- MongoDB有很典型的主从复制,现在官方主推副本集
应用场景
- Memcached:动态系统中减轻数据库负载,提升性能;做缓存,适合多读少写,大数据量的情况(如人人网大量查询用户信息、好友信息、文章信息等)。
- Redis:适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统(如新浪微博的计数和微博发布部分系统,对数据安全性、读写要求都很高)。
- MongoDB:主要解决海量数据的访问效率问题。
其他
- Memcached单个key-value大小有限,一个value最大只支持1MB,而Redis最大支持512MB
- Memcached只是个内存缓存,对可靠性无要求;而Redis更倾向于内存数据库,因此对对可靠性方面要求比较高
- 从本质上讲,Memcached只是一个单一key-value内存Cache;而Redis则是一个数据结构内存数据库,支持五种数据类型,因此Redis除单纯缓存作用外,还可以处理一些简单的逻辑运算,Redis不仅可以缓存,而且还可以作为数据库用
- 新版本(3.0)的Redis是指集群分布式,也就是说集群本身均衡客户端请求,各个节点可以交流,可拓展行、可维护性更强大。
- MongoDB不支持事务。
(2)Redis介绍
学习Redis目的:适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统(如新浪微博的计数和微博发布部分系统,对数据安全性、读写要求都很高)
特点:
- 可基于内存亦可持久化
- 支持存储的value类型相对更多(string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型))