关系型数据库存在的问题
- 性能瓶颈:磁盘IO性能低下
- 扩展瓶颈:数据关系复杂,扩展性差,不便于大规模集群
解决思路
- 降低磁盘IO次数,越低越好 —— 内存存储
- 去除数据间关系,越简单越好 —— 不存储关系
内存存储+不存储关系也就是 NoSQL 了
NoSQL
NoSQL:即 Not-Only SQL(泛指非关系型的数据库),作为关系型数据库的补充(数据的存储最终还是要落到硬盘上,全部放到内存中不可行)。
场景:应对基于海量用户和海量数据前提下的数据处理问题(数据量不大 MySQL 就可以解决)
特征:
- 可扩容,可伸缩
- 大数据量下高性能
- 灵活的数据模型
- 高可用
常见的 NoSQL 数据库:
- Redis
- memcache
- Hbase
- MongoDB
解决方案(电商场景)
-
商品基本信息——放入MySQL
- 名称
- 价格
- 厂商
-
商品附加信息——放入MongoDB(这部分属于文档处理)
- 描述
- 详情
- 评论
-
图片信息——放入分布式文件系统
-
搜素关键字——ES、Lucene、solr
-
热点信息——Redis、memcache、tair
- 高频
- 波段性
Redis
概念:Redis(REmote Dictionary Server)使用C语言开发的一个开源的高性能键值对(key-value)数据库。
特征:
- 数据间没有必然的关联关系
- 内部采用单线程机制进行工作
- 高性能。官方提供测试数据,50个并发执行100000个请求,读的速度是110000次/s,写的速度是81000次/s
- 多数据类型支持
- 字符串类型 string
- 列表类型 list
- 散列类型 hash
- 集合类型 set
- 有序集合类型 sorted_set
- 持久化支持。可以进行输入灾难恢复
Redis 与业务
作为缓存使用
1.原始业务功能设计
- 秒杀
- 618活动
- 双11活动
- 排队购票
2.运营平台监控到的突发高频访问数据
- 突发时政要闻,被强势关注围观
3.高频、复杂的统计数据
- 在线人数
- 投票排行榜
附加功能
系统功能优化或升级
- 单服务器升级集群
- Session 管理
- Token 管理
根据以上的业务情况,redis 常用的数据类型有 5 种(string,hash,list,set,sorted_set),但实际上比 5 种多。
Redis 应用总结
- 为热点数据加速查询(主要场景),如热点商品、热点新闻、热点资讯、推广类等高访问量信息等
- 任务队列,如秒杀、抢购、购票排队等
- 即时信息查询,如各位排行榜、各类网站访问统计、公交站到站信息、在线人数信息(聊天室、网站)、设备信号等
- 时效性信息控制,如验证码控制、投票控制等
- 分布式数据共享,如分布式集群架构中的 session 分离
- 消息队列
- 分布式锁