天天看点

小白也来学架构--存储高性能(五)缓存

NoSQL:

  关系型数据库成熟在强大的sql功能和ACID属性,所以广泛应用。随着数据量级的增加,业务逻辑的复杂,数据结构的多样,全文检索的性能等,出现了不同NoSQL解决方案,Not Only SQL。

常见的有如下四类:

1、K-V存储:解决无法存储的数据结构问题,比如Redis。

2、文档数据库:解决强schema约束的问题,比如MongoDB。

3、列式数据库:解决大数据场景下的IO问题,比如HBase。

4、全文搜索引擎:解决全文搜索性能问题,比如Elasticsearch。

K-V存储之 Redis:缺点不支持完整的ACID事务(原子性、一致性、隔离性、持久性),只能保证IC,无法保证AD。

原子性:这里针对一次批量提交的redis操作,redis事务不支持原子性,也不支持回滚操作,批量中的某个命令执行失败,并不会影响整体,已经执行的不会回滚,未执行的也会继续执行,不会因此中断操作。可以参考下图:来自 Redis事务

小白也来学架构--存储高性能(五)缓存

一致性:能够保证事务执行前后,数据库的完整性没被破坏。

隔离性:redis本身是单线程,不存在多个事务进行,如果某个客户端一个redis事务中有很大redis执行命令,并且耗时很大,就容易阻塞其他客户端对redis的操作。

持久性:RDB 和 AOF 两种持久方式。RDB 是只备份内存中的数据,就会存在内存数据已执行完毕,还未及时刷入磁盘,此刻断电,redis事务的持久性未达到,数据丢失。AOF 先执行命令,然后追加到日志文件,所以同样,也会存在未及时刷盘,丢失最近的1条,也不能保证事务的持久性。

文档数据库:目前很多常用的是JSON格式,比如MongoDB,不会涉及到新增字段影响历史数据,其次是可以存储复杂的数据结构,同样的方式解析就行。

列式数据库:主要针对海量统计列数据的时候,比如全国某个年龄段的人数,只需要知道城市和人的年龄就可以,精简数据的获取;其次,提高数据存储压缩比,普通行式压缩率3:1  到 5:1  ,列式可以到 8:1 到 30:1。

全文搜索引擎:支持随意组合条件查询,比如 曲面、12G内存、**品牌、自营的手机等,采用的原理:倒排索引,也称为 反向索引。

缓存

缓存穿透:1、存储数据不存在,缓存中没有。可以默认一个空值。

                  2、生成缓存本身耗时耗资源:加入监控,及时识别,要么优化,要么避免调用。

缓存雪崩:缓存失效引起的系统性能瞬时甚至持续下降。更新锁机制:单线程或者分布式锁控制等,保证一个线程更新缓存,避免同时重新生成缓存更新,造成压力;后台更新机制:一是定时读取缓存失效时间,及时刷新;二是消息通知,失效的缓存触发消息通知,接收到消息后重新更新生成缓存。

缓存热点:为了解决缓存中某个火热的数据,缓存的缓存,或者缓存的备份,某个数据本身已经在缓存了,但由于特别热点,访问压力大,备份多份缓存,分布式,分散访问压力。

小白也来学架构--存储高性能(五)缓存

继续阅读