这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
今天的课讲到数据库,记录一下数据库相关的部分.
数据的流动机制
数据的产生:来自用户的交互和程序的运行。
持久化:必要的数据保留在特定的地方。
数据的持久化流程
- 校验数据合法性:校验写入方式
- 修改内存:利用合适的方式组织数据
- 写入存储介质:以寿命性能友好的方式
存储系统的特点
- 性能敏感
- 硬件相关
- 编码需要全面
- 需要【缓存】 减少【拷贝】
RAID
Redudant Array of Inexpensive Disks(廉价磁盘冗余阵列)
- 单块大容量成本小于多块小容量
- 多盘写入快于单盘
RAID0,RAID1,RAID0+1
- RAID0:没有备份,多盘存储
- RAID1:用一半备份一半
- RAID (1+0)(0.5): 混着来
数据库
关系数据库
结构化数据处理逻辑是: 数据→以“表”形式存储管理进入关系型数据库 数据→以“自行定义的管理结构”写入程序
ACID
- Atomicity: 原子性,内部不可分割
- Consistency: 持久性, 执行前后数据一致
- Isolation: 隔离性, 解决并发
- Durability: 持久性, 结果可保存
主流产品
单机存储
- 本地文件系统, Linux“一切皆文件”
- Key-Value,RocksDB
单机关系型存储
- MySQL
单机非关系型存储
- MongoDB,“面向文档”
- Redis,“数据结构多”,“基于内存,但支持持久化”
- Elasticsearch,“面向文档”
分布式存储
- HDFS
- Ceph,“一切皆对象”
后面记一下有关Redis的部分. Redis的数据类型及主要特性
- 哈希类型
- 列表类型
- 集合类型
- 顺序类型
- 动态字符串
缓存穿透 大量请求的 key 是不合理的,根本不存在于缓存中,也不存在于数据库中 。这就导致这些请求直接到了数据库上,根本没有经过缓存这一层,
缓存击穿 请求的 key 对应的是 热点数据 ,该数据 存在于数据库中,但不存在于缓存中(通常是因为缓存中的那份数据已经过期) 。这就可能会导致瞬时大量的请求直接打到了数据库上
缓存雪崩 缓存在同一时间大面积的失效,导致大量的请求都直接落到了数据库上,对数据库造成了巨大的压力。