数据库
对数据进行持久化,那么应该先要检查数据的合法性,然后修改内存,用高效的数据结构存储数据,最后写入存储介质,以寿命&性能友好的方式写入硬件。
存储&数据库简介
存储系统
一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件,就可以称为存储系统。
系统特点:
- 作为后端软件的底座,性能敏感
- 存储系统软件架构,容易受硬件影响
- 存储系统代码,既“简单"又“复杂”
存储器层级结构
数据怎么从应用到存储结构呢,需要注意些什么?
- 「缓存」很重要,贯穿整个存储体系
- 「拷贝」很昂贵,应该尽量减少
- 硬件设备五花八门,需要有抽象统一的接入层
RAID技术:
R(edundant)A(rray) of I(nexpensive)D(isks)
RAID出现的背景:
- 单块大容量磁盘的价格>多块小容量磁盘
- 单块磁盘的写入性能<多块磁盘的并发写入性能
- 单块磁盘的容错能力有限,不够安全
RAID 0
- 多块磁盘简单组合
- 数据条带化存储,提高磁盘带宽
- 没有额外的容错设计
RAID 1
- 一块磁盘对应一块额外镜像盘
- 真实空间利用率仅50%
- 容错能力强
RAID 0 + 1
- 结合了RAID O和 RAID 1
- 真实空间利用率仅50%
- 容错能力强,写入带宽好
数据库
数据库分为关系型数据库和非关系型数据库。
关系型数据库
关系型数据库是存储系统,但是在存储之外,又发展出其他能力。
- 结构化数据友好
- 支持事务(ACID)
- 支持复杂查询语言
菲关系型数据库
非关系型数据库也是存储系统,但是一般不要求严格的结构化。
- 半结构化数据友好
- 可能支持事务(ACID)
- 可能支持复杂查询语言
数据库 VS 经典存储
| 对比方向 | 数据库 | 经典存储 |
|---|---|---|
| 存储 | 写入关系型数据库,以表形式管理 | 写入文件,自行定义管理结构 |
| 事务 | 具有事务能力,有ACID特性 | 没有事务能力 |
| 复杂查询能力 | 灵活、简洁 | 僵化、复杂 |
主流产品
单机存储
单机存储=单个计算机节点上的存储软件系统,一般不涉及网络交互,主要由本地文件系统和KV存储。
文件系统的管理单元:文件
文件系统接口:文件系统繁多,如Ext2/3/4,sysfs,rootfs等,但都遵循VFS的统一抽象接口。
Linux文件系统的两大数据结构: Index Node & Directory Entry
Index Node
- 记录文件元数据,如id、大小、权限、磁盘位置等
- inode是一个文件的唯一标识,会被存储到磁盘上
- inode的总数在格式化文件系统时就固定了
Directory Entry
- 记录文件名、inode指针,层级关系(parent)等
- dentry是内存结构,与inode的关系是N:1(hardlink的实现)
KV存储:
- 常用使用方式有put方法和get方法。
- 常见数据结构:LSM-Tree,某种程度上牺牲读性能,追求写入性能。
- 拳头产品: RocksDB
分布式存储
分布式存储=在单机存储基础上实现了分布式协议,涉及大量网络交互。主要存储方式也是两种,分布式文件系统和分布式对象存储。
HDFS:Hadoop Distributed File System
HDFS 是一种分布式文件系统,用于处理在商业硬件上运行的大型数据集。 它用于将单个 Apache Hadoop 集群扩展到数百 (甚至数千)个节点。 HDFS 是 Apache Hadoop 的主要组件之一,其他组件包括 MapReduce和 YARN。 HDFS 不应与 Apache HBase 混淆或被 Apache HBase 取代,Apache HBase 是一个面向列的非关系数据库管理系统,它位于 HDFS 之上,可以通过其内存处理引擎更好地支持实时数据需求。
特点;
- 支持海量数据存储
- 高容错性
- 弱POSIX语义
- 使用普通x86服务器,性价比高
Ceph: Ceph在一个统一的系统中独特地提供对象、块和文件存储。Ceph 高度可靠、易于管理且免费。Ceph 的强大功能可以改变您公司的 IT 基础架构和管理大量数据的能力。Ceph 提供了非凡的可扩展性——数以千计的客户端访问 PB 到 EB 的数据。ceph存储集群相互通信以动态复制和重新分配数据。
特点:
- 一套系统支持对象接口、块接口、文件接口,但是一切皆对象4020
- 数据写入采用主备复制模型
- 数据分布模型采用CRUSH(HASH+权重+随机抽签)算法
单机关系型数据库
单机数据库=单个计算机节点上的数据库系统
事务在单机内执行,也可能通过网络交互实现分布式事务
商业产品Oracle称王,开源产品MySQL & PostgreSQL称霸
关系型数据库的通用组件:
- Query Engine——负责解析query,生成查询计划
- Txn Manager ——负责事务并发管理
- Lock Manager ——负责锁相关的策略
- Storage Engine——负责组织内存/磁盘数据结构
- Replication ---——负责主备同步
关键内存数据结构: BTree、B+Tree、LRU List等
关键磁盘数据结构:WriteAheadLog ( RedoLog)、 Page
单机非关系型数据库
MongoDB、Redis、Elasticsearch三足鼎立
- 关系型数据库一般直接使用SQL交互,而非关系型数据库交互方式各不相同
- 非关系型数据库的数据结构千奇百怪,没有关系约束后, schema相对灵活
- 不管是否关系型数据库,大家都在尝试支持SQL(子集)和“事务”
(来源于青训营)
分布式数据库
分布式解决单机容量限制的问题,由于单点容量有限,受硬件限制,存储节点池化、动态扩缩容。
分布式解决弹性的问题,动态扩容缩容
分布式解决性价比的问题,CPU利用率