存储
存储系统
- 存储器层次结构
- register
- cache
- random access memory
- flash/USB memory
- hard drives
- tape backup
1~6访问速度由快到慢,容量由小到大。
- 数据从应用到存储介质
- RAID技术
全名Redundant Array Inexpensive Disks,将多块磁盘简单组合,一块磁盘对应一块额外镜像盘,并且数据条带化存储,进而达到容错能力强、写入带宽好的效果。
数据库
数据库包括关系型数据库和非关系型数据库。
关系相关知识:
- 关系=集合=任意元素组成的若干有序偶对
- 关系运算=对关系作运算的抽象查询语言
- SQL(Structured Query Language)=一种DSL(Domain Specific Language)=关系代数表达形式
关系型数据库特点:
- 结构化数据友好
- 支持事务(ACID)
- 支持复杂查询语言(SQL)
非关系型数据库特点:
- 半结构化数据友好
- 可能支持事务(ACID)
- 可能支持复杂查询语言(SQL)
数据库的优势:
- 结构化数据管理
- 事务能力
- Atomicity,事务内的操作要么全做,要么不做,即一不做二不休。
- Consistency,事务执行前后,状数据状态保持一致。
- Isolation,并发事务互相隔离。
- Durability,事务一旦提交成功,数据保证持久性。
- 复杂查询能力
数据库使用:
- 数据操作相关。包括insert、delete、update、select、where、group by、order by等。
- 数据定义相关。包括create user、create database、create table、alter table等。
存储架构
存储结构包括:
- 单机存储
- 本地文件系统。
- Key-value存储。
- 分布式存储
- HDFS。海量数据存储、高容错性、性价比高。
- Ceph。一切皆对象、写入使用主备复制模型、分布模型使用CRUSH算法。
单机数据库包括:
- 关系型数据库
- Mysql
- 非关系型数据库
- MongoDB
- Redis
- Elasticsearch
分布式数据库将单机数据库进行结合,解决了以下几个问题:
- 容量问题
- 弹性问题
- 性价比问题
存储新技术:
- 软件架构变革。如SPDK,内核态磁盘访问->用户态磁盘访问,中断->轮询,并采用无锁数据结构。
- 人工智能与存储。AI带来推荐、风控、视觉等领域的改变,存储由行村、列村转变为行列混存。
- 高性能硬件。RDMA(Remote Direct Memory Access)、Persistant Memory、可编程交换机、CPU/GPU/DPU等。
实例
Redis
- 背景:数据量增长,读写数据压力不断增加,对性能要求提高,因此Redis出现,将数据分为冷热数据,热数据保存在内存保证读写效率,冷数据存入磁盘中持久化。
- 基本工作原理:
- 数据从内存中读写。
- 持久化数据分两类,增量数据存储到AOF(Append Only File),全量数据存储到RDB(Redis Database Backup)中。
- 单线程处理所有工作命令。
- Redis常用数据结构
- String
- List
- Listpack
- Dict
- zset、zskiplist
- 其他应用
- 限流。
- 分布式锁。利用单线程特性,结合setnx实现。
- 注意事项
- 大Key。会造成读取成本高、慢查询、服务阻塞等危害,可以通过拆分、压缩等方式解决。
- 热Key。指单Key的QPS过高导致负载不均,可通过Localcache、拆分等方式解决。
- 慢查询。可能由key/value传入过多、zset大小过大、大Key等造成。
- 缓存穿透。热点数据查询绕过缓存直接查询数据库,如查询一个不存在的数据,可以通过缓存空值、布隆过滤器解决。
- 缓存雪崩。大量缓存同时过期,可以通过缓存空值、缓存集群等解决。
对象存储TOS
短视频架构:
存储架构:
对象存储的优势:
- 海量
- 支持>EB海量存储。
- 对象数量无限。
- 易用
- Restful http接口,开发简单。
- 云原生,按需申请使用。
- 视频/图片相关生态丰富
- 便宜
- 使用普通x86服务器
- 具备冷热数据分级存储能力,成本更低。
TOS使用:
- Restful接口
- Multiupload接口(大文件传输)
- Listprefix接口
实践要考虑的因素:
- 可扩展性——partition
- 持久度——replication
- 成本——erasure code
- 成本——冷热转换
- 高可用——镜像灾备