一、经典案例
二、存储&数据库介绍
存储系统
一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件
- User、Medium、Memory、Network
- 特点:性能敏感、即“简单”有“复杂”、容易受硬件影响
硬件:存储器层级结构
软件:Summaryof i/Obuffering
- 缓存很重要,贯穿整个存储体系
- 拷贝很昂贵,应该尽量减少
- 硬件设备五花八门,需要有抽象统一的接入层
RAID技术
- RAID
-
- 独立(廉价)磁盘冗余阵列(Redundant Array of Independent Disks)
- 将多个物理硬盘通过特定的方式组合成一个虚拟硬盘阵列
- 提高存储性能、数据冗余和容错能力
- RAID级别
-
- RAID 0 -- 条带化
-
-
- 多块磁盘简单组合
- 数据条带化,提高磁盘带宽
- 没有额外的容错设计
-
-
- RAID 1 -- 镜像
-
-
- 一块磁盘对应一块额外镜像盘
- 真实空间利用率仅为50%
- 容错能力强
-
-
- RAID 0 + 1 -- 条带化 + 镜像
-
-
- 集合了RAID 0和RAID 1
- 真实空间利用率仅为50%
- 容错能力强,写入带宽高
-
数据库
- 关系 = 集合 = 任意元素组成的若干有序偶对
-
- 反映了事物间的关系
- 关系代数 = 对关系作运算的抽象查询语言
- SQL = 一种DSL(领域特定语言)=方便人类阅读的关系代数表达形式
- 事务特点(ACID)
-
- A(tomicity):事务内的操作要么全做,要要么不做
- C(onsistency):事务执行前后,数据状态是一致的
- I(solation):可以隔离多个并发事务,避免影响
- D(urability):事务一旦提交成功,数据保证持久性
- 关系型数据库
-
- 结构化数据优化
- 支持事务(ACID)
- 支持复杂查询
- 非关系型数据库
-
- 半结构化数据友好
- 可能支持事务(ACID)
- 可能支持复杂查询
数据库vs存储系统
- 结构化数据管理,以表形式管理 vs 自行管理结构
- 事务能力的优越性
- 复杂查询能力灵活、简洁 vs 僵化复杂
数据库使用方式
Everything is D(omain) S(pecific) L(anguage) —> maybe SQL
- 数据操作
-
- Insert、Update、Select、Delete、Where子句、GroupBy、OrderBy
- 数据定义修改
-
- Create user、Create table、Create database、Alter table.....
三、主流存储产品剖析
单机系统
单机存储 = 单个计算机节点上的存储系统软件,一般不涉及网络交互
本地文件系统
Linux经典哲学:一切皆文件
key-value系统
- 常见使用方式:put(k,v)&get(k)
- 常见数据结构:LSM-Tree,某种程度上牺牲读性能,追求写入性能
- RocksDB、LevelDB
分布式存储系统
分布式存储系统 = 在单机存储基础上实现了分布式协议,涉及大量网络交互
分布式文件系统 HDFS
时代背景:专用的高级硬件很贵,同时数据存量很大,要求超高吞吐
核心特点:
- 支持海量数据存储
- 高容错性
- 弱POSIX语义
- 使用普通x86服务器,性价比高
分布式对象存储 Ceph
核心特点:
- 一套系统支持对象接口、块接口、文件接口,但是一切皆对象
- 数据写入采用主备复制模型
- 数据分布模型采用CRUSH算法
-
- HASH+权重+随机抽签
单机数据库
单机数据库= 单个计算机节点上的数据库系统事务在单机内执行,也可能通过网络交互实现分布式事务
单机关系型数据库
单机非关系型数据库
MongoDB、Redis、Elasticsearch三足鼎立
- 交互方式各不相同,没有统一的SQL
- 数据结构无关系约束,schema相对灵活
- 尝试支持SQL(子集)和“事务”
分布式数据库
单机数据库的文件与挑战
More to Do