# 传统数据库面临问题
关系型数据库如MySQL、Oracle等,在曾经用户访问量不大的情况下稳定性高,性能也不俗,成为了家家户户存储数据的首选,但是随着时代的发展,网站动辄成千上万的QPS(每秒访问量),传统的数据库已经有点难以招架,出现了性能问题
关系型数据库的关系二字尤为重要,数据都是存储在固定结构的表里,表结构更改比较困难
关系型数据库为了维护表的读取性能,往往会创建索引用于提升查询效率,而随着数据的不断增多,索引的维护也变得愈发困难
关系型数据库在全文索引方面,往往不具备分词功能,查询数据的精准度不够,查询效率也不行
问题总结: IO压力大,出现性能瓶颈,数据库表扩展困难,索引维护不易,全文索引效果差
# NoSQL介绍
全称:Not Only SQL,不仅仅是SQL,也被称为non-relational,非关系型数据库
优点:
- 大数据量: 可以高效存取大量数据
- 高扩展性: 没有关系型特性,数据复制简单,通过增设廉价的服务器,来使横向扩展变得更容易
- 高性能: NoSQL数据库通过键值对来获取数据,通过hash算法往往可以很快查找到所需数据,并且运行再内存中,比关系型数据库的IO读取方式上限高
- 数据模型灵活: 没有指定的数据模型,增删改一个字段十分便捷
- 高可用性: 许多NoSQL数据库通过分片等技术可以在不影响性能的前提下,轻松实现高可用架构
目前市场上有多种类型的NoSQL数据库,他们各自擅长的点不同,往往适用于不同的场景
# NoSQL种类
分类 | 常见产品 | 数据类型 | 优点 | 缺点 | 典型案例 |
---|---|---|---|---|---|
键值数据库 | Redis | Key-Value | 查找速度快 | 容量受内存限制 | 购物车、验证码 |
文档数据库 | MongoDB | JSON格式存储 | 表结构可变、易于扩展 | 只支持单文档事务 | 评论、流水日志 |
列式数据库 | HBase | 列式存储 | 查找速度快 | 不适合对实时性要求高的场景 | 日志、博客 |
图数据库 | Neo4j | 图结构 | 借助图论算法解决特定业务 | 其他领域受限 | 关系图谱 |