1.数据的生命周期
1.1 数据的产生
以注册为例,注册时填写了用户名和密码等数据,然后点击了注册按钮,数据就向服务器发送过去,这样,数据就从无到有地产生了
1.2 数据的流动
产生的数据被打包为一条用户注册数据,通过网络发送到后端服务器,到达服务器后经过处理再被发送到数据库中,形成持久化数据;
在数据库系统后,还可能存在更多的存储系统,数据会继续流动到这些系统中
1.3 数据的持久化
数据到达数据库后,数据库首先检验数据是否合法,通过检验后,数据在内存中,通过高效的数据结构经过计算,形成可以被持久化的数据结构,最好以寿命和性能友好的方式写入存储介质(硬件),形成持久化数据.
2.存储和数据库
2.1 存储系统
存储系统是提供了读写,控制类接口,能够安全有效地把数据持久化的软件,就可以称之为存储系统
系统特点:性能敏感,容易受硬件影响
在存储系统中,缓存很重要,贯穿整个存储体系,拷贝很昂贵,应该尽量减少,硬件设备五花八门,需要有抽象的统一接口
2.2 RAID技术
RAID技术是为了使单机存储系统做到高性能,高性价比和高可靠性
出现的背景:
- 单块大容量磁盘价格大于多块小容量磁盘
- 单块磁盘的写入性能小于多块磁盘的并发写入性能
- 单块磁盘的容错性能有限,不够安全
2.2.1 RAID 0
- 多块磁盘简单组合
- 数据条带化存储,提高磁盘带宽
- 没有额外的容错设计
2.2.2 RAID 1
- 一块磁盘对应一块额外的镜像磁盘
- 空间利用率仅有50%
- 容错能力强
2.2.3 RAID 0+1
RAID 0和 RAID 1是两个极端,通过组合来组成适合的方案
- 结合了 0 和 1,根据需求组成不同方案
2.3 数据库
数据库和存储系统不一样吗?
2.3.1 关系型数据库
关系反映了事物(实体)间的关系,以关系代数作为运算的抽象查询语言
SQL是一种方便人们阅读的关系代数的表达方式
关系型数据库是存储系统,但相较于存储系统,它结构化数据友好,支持事物并支持复杂查询语言(SQL等)
2.3.2 非关系型数据库
非关系型数据库也是存储系统,但一般不要求严格的结构化
半结构化数据友好,可能支持事物,可能支持复杂查询语言
2.3.3 数据库优点
-
数据库与经典存储的区别是结构化管理系统,数据写入关系型数据库时,以表的形式管理(自动),而经典存储需要自信定义结构,是分复杂
-
数据库支持事物,具有很大的优越性
-
数据库支持复杂查询能力
3. 主流产品刨析
3.1 单机存储
单机存储不涉及网络交互
单机存储系统有:本地文件系统和key-value存储
3.1.1 本地文件系统
Linux的经典哲学:一切皆文件
- 文件系统管理单元:文件
- 文件系统接口︰文件系统繁多,如Ext2/3/4,sysfs,rootfs等,但都遵循VFS的统一抽象接口Linux文件系统的
- 两大数据结构:Index Node & Directory Entry
- lndex Node:记录文件元数据,如id、大小、权限、磁盘位置等,inode是一个文件的唯一标识,会被存储到磁盘上,inode的总数在格式化文件系统时就固定了
- Directory Entry:记录文件名、inode指针,层级关系(parent)等,与inode的关系是N:1(hardlink实现)
3.1.2 Key-value 存储
-
常见使用方式: put(k,v)和get(k)
-
常见数据结构: LSM-Tree,某种程度上牺牲读性能,追求写入性能,使用顺序读写,写性能好
3.2 分布式存储
分布式存储:在单机存储基础上实现了分布式协议,设计大量网络交互
3.2.1 分布式文件系统
HDFS:堪称大数据时代的基石
核心特点:
- 支持海量数据存储
- 高容错性
- 弱POSIX语义
- 使用x86服务器,性价比高
3.2.2 分布式对象存储
Ceph: 开源分布式系统里的万金油
核心特点:
- 支持对象接口,块接口,文件接口,但一切皆对象
- 数据写入采用主备复制模型
- 数据分布模型采用CRUSH算法,核心思想是HASH+权重+随机抽签确定存储服务器
3.3 单机关系型数据库
不涉及网络交互的数据库系统,但事务可以在单机内执行,也可能通过网络交互实现分布式事务
在商业中,Oracle称王,开源产品MySQL和PostgreSQL称霸
关键内存数据结构:B-Tree,B+ -Tree和LRU List等
关键磁盘数据结构:RedoLog,Page等
3.4 单机非关系型数据库
MongoDB,Redis,Elasticsearch三足鼎立
关系型数据库一般直接使用SQL交互,而非关系型数据库交互方式各不相同,没有约束关系后数据结构千奇百怪,schema相对灵活,非关系型数据库也在尝试支持SQL和事务
3.5 分布式数据库
单机数据库遇到的问题有:容量问题,弹性问题和性价比问题,因此引入了分布式数据库
- 单点容量有限,受硬件限制,使用池化技术,将存储节点池化,动态扩缩容量,与网络交互
- 可以换速更改硬件设备,将数据迁移到性能更好的(或更差的)硬件上,弹性好
- 同样,使用共享存储池,提高性价比
分布式数据库面临的问题:
- 单写而不是多写
- 从磁盘弹性到内存弹性
- 分布式事务优化
4.新技术
-
SPDK---Bypass OS kernel
-
AI相关技术,如AI根据情况决策,使用行存,列存还是行列混存,动态决策
-
高性能硬件