数据库和存储系统
存储 & 数据库
背景知识
存储系统
提供读写以及控制类接口,可以安全有效地对数据进行持久化的软件
特点
- 作为软件的底座,性能敏感
- 系统软件的架构,易受软件影响
- 系统代码简单又复杂
RAID 技术出现的原因
- 单块大容量的硬盘的价格高于多块小容量硬盘
- 单块硬盘的写入性能低于多块硬盘的并发写入性能
- 单块硬盘的容错能力不足,数据的安全得不到保障
RAID 0
- 多块硬盘进行简单的组合
- 数据条带化进行存储,提升硬盘带宽
- 没有额外错设计
RAID 1
- 一块硬盘附加一块镜像盘
- 物理空间的利用率为 50%
- 容错能力强
RAID 0 + 1
- 结合 0 和 1
- 物理空间的利用率为 50%
- 容错能立强,写入带宽好
数据库和存储系统的联系
- 在这里涉及到关系型数据库与非关系型数据库,这里所提到的关系是任意元素构成若干有序偶对反应了事物之间的关系,会涉及到关系代数的一些操作(交 并 笛卡尔积)
- 对于人们所使用的描述关系代数的表达形式是一种DSL我们称为 SQL
- 关系型数据库是存储系统,还额外提供了其他的能力
- 结构化数据友好
- 支持事务 (ACID)
- 支持复杂的查询语言
- 非关系型数据库也是存储系统,但是可能不具备严格的结构化
- 半结构化数据友好
- 可能支持事务操作
- 可能支持复杂的查询语言
数据库存储 & 经典存储
- 结构化数据管理 - 关系型数据库以表的形式进行存储,经典的则是写入文件(自定义管理的结构)
- 支持事务能力 - 数据库支持事务的操作,传统的则不具备这一能力
- 复杂查询方式简单 - 对于数据库来说复杂的查询灵活简单,传统的方式僵化且复杂
ACID
- A(tomicity) 事务内要么做,要么都不做
- C(onsistency) 事务前,数据保持一致性
- I(solation) 各个事务互相隔离,操作互相不影响
- D(urability) 事务成功,保持数据的持久化
单机存储
单个计算机节点的存储软件系统,通常是不会与网络及进行交互
- 本地文件系统
- key-value存储
本地文件系统(在Linux中)的管理单元为文件,文件系统可以采用不同的接口,如 ext4/3/2,sysfs,rootfs,他们都遵循 VFS 的统一抽象接口,主要的两大数据结构(Index Node 和 Directory Entry)
在Linux中Index Node 是文件的唯一标识,它记录文件的元数据(id,size,权限,位置)
而Directory Entry 则记录了文件名、inode指针以及层级关系,dentry是内存结构与inode是 N : 1 (hardlink实现)
key-value 存储常见的数据结构为 LSM-Tree,写入性能强,但读取的性能有一定的牺牲,通常以 put(k,v) & get(k) 进行使用