一、NoSql
1.1、什么是NoSql
NoSql,泛指非关系型数据库。传统的关系型数据库在处理超大规模和高并发SNS类型的web2.0纯动态网站力有不逮,出现了很多难以克服的问题,非关系型数据库由于其本身的特点得到了非常迅速的发展。NoSql的出现就是为了解决大规模数据集合,多重数据种类带来的挑战。尤其是大数据挑战。
NoSql 解释为:“non-relational”、“Not Only Sql”,区别关系型数据库,它不保证关系数据的ACID性。
1.2、为什么使用NoSql
传统数据库瓶颈:
传统数据库性能不错,具有高稳定性,久经考验,使用简单,功能强大,有大量成功案例。在互联网领域,MySql贡献卓越。
现代网站的特点:
- 高并发读写:Web2.0,数据库并发负载非常高,往往达到每秒上万次读写;
- 高容量和高效存储:web2.0需要在后台存储海量数据,存储这些数据和查询这些数据是一个挑战。
- 高扩展和高可用性:随着系统用户量和访问量增长,需要数据库进行很方便的扩展和维护。
NoSql数据库优势:
- 易扩展:NoSql数据库种类繁多,但是都有一个特点:去掉关系型数据库的关系型特性,数据间无关系,非常容易扩展,也无形间在架构层面扩展带来了可能性。
- 大数据量,高性能:NoSql有非常高的读写性能,尤其在大数据量情况下。这得益于它的无关系性,数据库结构简单。一般Mysql使用Query Cache,每次表更新Cache就失效,是一种大颗粒度的Cache。对于web2.0的交互频繁的应用,Cache性能不高。而NoSql的Cache是记录级的,是一种细颗粒度的,性能更高。
- 灵活的数据模型:NoSql无需事先为要存储的数据建立字段,随时可以存储自定义数据格式。而在关系型数据库中,增删字段是一件很麻烦的事情。如果是大数据量的表更加麻烦。
- 高可用:NoSql在不影响性能情况下,就可以实现高可用框架。
1.3、常见NoSql产品和区别
数据库分类 | 键值 | 列族 | 文档 | 图形 |
---|---|---|---|---|
产品 | Redis | HBase | MongoDB | Neo4j |
应用场景 | 内容缓存,会话、配置、参数;频繁读写 | 分布式数据存储与管理 | web应用,面向文档或类似半结构化数据 | 社交网络、推荐系统,专注构建关系图谱 |
数据模型 | key-value键值,通过散列表实现 | 列族式存储,同一列数据存在一起 | key-value,value是json结构文档 | 图结构 |
优点 | 扩展性好,灵活性好,大量操作时性能高 | 可扩展性强,查找速度快,复杂性低 | 数据结构灵活,可以根据value构建索引 | 支持复杂图形算法 |
缺点 | 数据无结构化,通常只作为字符串或二进制数据,只能根据键来查询值 | 功能局限,不支持事务的强一致性 | 缺乏统一查询语法 | 复杂性高,只能支持一定的数据规模 |
二、Redis
2.1、概念
Remote Dictionary Server(远程字典服务器),开源,C语言编写,遵守BCD协议。是一个高性能Key/Value分布式内存数据库。
基于内存运行并支持持久化的NoSql数据库,是当前最热门的NoSql数据库之一,也被称为数据结构数据库。
Redis与其他Key-Value有以下特点:
- Redis支持数据持久化,可以将内存中的数据保存到磁盘中,重启时再次加载使用。
- Redis不仅仅支持简单的Key-Value类型数据,同时还提供list、set、zset、hash等数据结构存储
- Redis支持数据备份,及master-slave(主从模式)备份数据
2.2、redis优势
- 性能极高-读的速度是110000次/s,写的速度是81000次/s
- 丰富的数据类型-Redis支持 Strings、Lists、Hashes、Sets、Ordered Sets数据类型操作
- 原子-所有的操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
- 丰富的特性-Redis支持publish/subscribe,通知,key过期等等特性
- 采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或多线程导致的切换而消耗CPU,不用去考虑各种锁问题,不存在加锁释放锁操作,没有可能出现死锁而导致的性能消耗。
- 多路I/O复用,非阻塞IO。
2.3、Redis应用场景
- 缓存(数据查询,短连接,新闻内容,商品内容等等),使用最多
- 聊天室在线好友列表
- 任务列表(秒杀,抢购,12306)
- 应用排行榜
- 网站访问统计
- 数据过期处理(精确到毫秒)
- 分布式集群架构中的session问题