SQL的弊端
高并发下有瓶颈,尤其不好处理写入/更新频繁的场景。
- 关系型数据库以行为存储单位,即使只修改其中一列也会将整行数据读入内存,导致 IO 较高
- 并发控制代价大,加锁必然影响性能
- 大量的二级索引占用空间且影响读写
- 表结构扩展不方便(修改期间需要锁表,部分服务不可用)
- 全文搜索功能弱(缺乏分词能力,like查询效率低)
NoSql
全称为Not Only SQL,泛指非关系型数据库,通常性能更强但缺失事务等功能
适用场景:
- 频繁写入,写远多于读(如操作流水、日志记录)
- 高并发(如秒杀活动)
- 下表中包含的其他场景
KV型NoSql(代表----Redis)
以键值对形式存储,查询速度快(只能K查V,不能V查K)
通常运行于内存,用于缓存的场景
搜索型NoSql(代表----ElasticSearch)
通过倒排索引
方便进行全文搜索
内存占用大,数据结构不灵活,只适用于做搜索
文档型NoSql(代表----MongoDB)
和传统SQL数据库比较接近,没有Schema,以半结构化数据(JSON或XML)存储数据
优点在于方便扩展,读写性能优越。
缺点在于空间占用大(空间预分配机制+删除数据后空间不释放),事务支持度较差,多表关联查询较差
SQL数据库 | MongoDB |
---|---|
表 | 集合 |
行 | 文档 |
列 | 字段 |
列式NoSql(代表----HBase)
方便扩展,且读写性能极高,但属于KV式,条件查询支持度差,且不支持分页查询(因为统计不了数据总数)
- 列式存储
id | name | age |
---|---|---|
1 | AA | 12 |
2 | BB | 18 |
变为
id | name |
---|---|
1 | AA |
2 | BB |
id | age |
---|---|
1 | 12 |
2 | 18 |
-
数据压缩
网友评论