数据库与存储系统 | 青训营笔记

150 阅读7分钟

数据库与存储系统

1.存储&数据库简介

1.1 存储系统

概览

什么是存储系统?一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件,就可以称为存储系统。

特点

  • 作为后端软件的底座,性能敏感。
  • 存储系统代码需要更加简洁,但同时也要考虑复杂的外界情况。
  • 存储系统软件架构容易受硬件影响。

存储器层级结构

金字塔模型,从塔尖到塔底依次为寄存器、高速缓存、RAM、(Persistent Memory、)闪存/USB、硬盘、磁带。

数据如何从应用到存储介质

  • 缓存:很重要,贯穿整个存储体系
  • 拷贝:很昂贵,应该尽量减少 硬件设备五花八门,需要有抽象统一的接入层。

image.png

RAID技术

单机存储系统怎么做到高性能/高性价比/高可靠性?R(edundant) A(rray) of I(nexpensive) D(isks)

RAID出现的背景:

  • 单块大容量磁盘的价格>多块小容量磁盘
  • 单块磁盘的写入能力<多块磁盘的并发写入性能
  • 单块磁盘的容错能力有限,不够安全

RAID0:

  • 多块磁盘简单组合。
  • 数据条带化存储,提高磁盘带宽。将写入的数据划分为多块,分别存入不同磁盘的相同偏置位置处。
  • 没有额外的容错设计。任何一块磁盘坏掉都会导致数据不可用。

RAID1:

  • 一块磁盘对应一块额外镜像盘。
  • 真实空间利用率仅50%。
  • 容错能力强。

RAID0+1:

  • 结合RAID0和RAID1,将4块磁盘分为两组,一组为另一组的镜像,组内多路读写。
  • 真实空间利用率仅50%。
  • 容错能力强、读写带宽大。

1.2 数据库

关系型数据库是存储系统,但在存储之外又发展出其他能力:

  • 结构化数据友好
  • 支持事务(ACID)
  • 支持复杂查询语言(SQL)

非关系型数据库也是存储系统,但是一般不要求严格的结构化:

  • 半结构化数据友好
  • 可能支持事务
  • 可能支持复杂查询语言

1.3 数据库与经典存储的比较

结构化数据管理

一条用户注册数据如果用经典的存储方法写入文件,需要自行定义管理结构,如第1-4个bytes存数据长度,第2-4个bytes存id......而若使用关系型数据库则可以用表形式管理。

事务能力

事务具有ACID的特性。

复杂查询能力

经典存储要使用代码循环查找,判断偏置等。关系型数据库提供SQL实现。

2.主流产品剖析

存储>>>>>数据库;单机>>>>>分布式。

2.1 单机存储

单机存储=单个计算机节点上的存储软件系统,一般不涉及网络交互。

本地文件系统

文件系统的管理单元:文件

文件系统接口:文件系统繁多,如Ext2/3/4,sysfs,rootfs等,但都遵循VFS的统一抽象接口。

Linux文件系统的两大数据结构:Index Node & Directory Entry。

Index Node记录文件的元数据,如id,大小,权限,磁盘位置等。inode是一个文件的唯一标识,会被存储到磁盘上。inode的总数在格式化文件系统时就固定了。

Directory Entry记录文件名、inode指针,层级关系(parent)等。dentry是内存结构,与inode的关系是多对一(硬链接hardlink)。

key-value存储

常见使用方式:put(k,v)&get(k)。

常见数据结构:LSM-Tree,某种程度上牺牲读性能,追求写性能。

产品:LevelDB、RocksDB。

LSM-Tree分为两部分,内存与磁盘。两部分都遵循顺序写入的模式,不断追加key-value。内存中包含两部分:内存表和不可变内存表。每次追加向内存表中写数据,当内存表满了的时候,将数据刷新到不可变内存表中。不可变内存表的数据满了以后将数据写入磁盘的level0有序表,level1有序表,level2有序表(level值越大,层级越深,空间越大)。读取数据时需要合并多层的的数据,因此读效率低。

2.2 分布式存储

分布式存储=在单机存储基础上实现了分布式协议,涉及大量网络交互。

分布式文件系统-HDFS

HDFS堪称大数据时代的基石。当时高级硬件很贵,同时数据存量很大,要求超高吞吐。

HDFS核心特点:

  • 支持海量数据存储
  • 高容错性
  • 弱POSIX语义
  • 使用普通x86服务器,性价比高

内部包含管控节点(记录文件的位置)和存储节点。计算等交互尽量在相近的存储节点甚至同一个存储节点上进行,以提高效率。

分布式对象存储系统-Ceph

Ceph的核心特点:

  • 一套系统支持对象接口、块接口、文件接口,且一切皆对象。
  • 数据写入采用主备复制模型。
  • 数据分布模型采用CRUSH算法(hash+权重+随机抽签)。

2.3 单机关系型数据库

单机数据库=单个计算机节点上的数据库系统

事务在单机内执行,也可能通过网络交互实现分布式事务。

商业产品oracle。开源产品MySQL,PostgreSQL

关系型数据库的通用组件:

  • Query Engine:负责解析查询,生成查询计划
  • Txn Manager:负责事务并发控制
  • Lock Manager:负责锁相关的策略
  • Storage Engine:负责组织内存、磁盘数据结构
  • Replication:负责主备同步

关键内存数据结构:B-Tree、B+Tree、LRU List等。

关键磁盘数据结构:WriteAheadLog(RedoLog)、Page。

2.4 单机非关系型数据库

MongoDB、Redis、Elasticsearch。

关系型数据库一般直接使用SQL交互,而非关系型数据库交互方式各不相同。

非关系型数据库的数据结构千奇百怪,没有关系约束后,schema相对灵活。

不管是否是关系型数据库,大家都在尝试支持SQL(子集)和事务。

Elasticsearch:

  • 面向文档存储
  • 文档可序列化成json,支持嵌套
  • 存储在index,index=文档的集合
  • 存储和构建索引能力以来Lucene引擎
  • 实现了大量搜索数据结构&算法(支持模糊搜索、关联搜索等,能自动算出关联程度)
  • 支持RESTFUL API,也支持弱SQL交互

MongoDB:

  • 面向文档存储
  • 文档可序列化成JSON/BSON,支持嵌套
  • 存在collection。collection=文档的集合
  • 存储和构建索引能力依赖wiredTiger引擎
  • 4.0后开始支持事务(多文档、跨分片多文档等)
  • 常用client/SDK交互,可通过插件转义支持弱SQL

Redis:

  • 数据结构丰富(hash表,set,zset,list)
  • C语言实现,超高性能
  • 主要基于内存,但支持AOF/RDB持久化
  • 常用redis-cli/多语言SDK交互

2.5 分布式数据库

单机数据库的问题:容量有限,受硬件影响。没有弹性,资源扩缩容需要物理搬迁数据,费时费力。性价比低,计算资源和存储资源往往不匹配。

分布式数据库:存储节点池化,动态扩缩容,动态分配资源。

分布式数据库发展趋势:

  • 多写的效率高于单写
  • 从磁盘弹性到内存弹性
  • 分布式事务优化

3.新技术演进

3.1 概览

  • 软件架构变更:Bypass OS kernel
  • AI增强:智能存储格式转换
  • 新硬件革命:存储介质变更、计算单元变更、网络硬件变更

3.2 SPDK(Storage Performance Development Kit)

Bypass OS kernel已经称为一种趋势,SPDK使用了这种技术。

  • 避开OS的内核空间,避免系统调用带来的性能损耗。直接从用户态IO访问磁盘。
  • 用轮询替代中断:磁盘性能提高后中断次数随之上升(以前访问外设速度慢,所以cpu不能等待,而是中断并切换线程),不利于IO性能。SPDK poller可以绑定特定的cpu不断轮询,减少cs(content switch,上下文切换),提高性能。
  • 使用很多无锁数据结构,如使用Lock-free Queue,降低并发时的同步开销。

3.3 AI & Storage

AI领域相关技术,如机器学习在很多领域,如推荐、风控、视觉领域证明了有效性。

在Storage领域,AI可以进行数据存储格式的转换:如数据的行存、列存各有优势,可以由AI决策进行行列混存(对数据贴行存或列存的标签)。

3.4 高性能硬件

  1. RDMA网络:传统的网络协议栈需要基于多层网络协议处理数据包,存在用户态与内核态的切换,足够通用但性能不是最佳。RDMA是kernel bypass的流派,不经过传统的网络协议栈,可以把用户态虚拟内存映射给网卡,减少拷贝开销,减少cpu开销。
  2. Persistent Memory:是在NVMe SSD和Main Memory间的一种全新的存储产品。IO时延介于SSD和Memory之间,约百纳秒量级。可以用作易失性内存(Memory mode),也可以用作持久化介质(app-direct)。
  3. 可编程交换机:P4 Switch,配有编译器、计算单元、DRMA,可以在交换机层对网络包做计算逻辑。在数据库场景下可以实现缓存一致性协议等。
  4. CPU/GPU/DPU:CPU从multi-core走向many-core,核心数量指数增长。GPU算力越来越强,显存空间越来越大。DPU异构计算,减轻CPU的workload(cpu用于通用计算,dpu用于特定计算)

引用

数据库与存储系统|青训营笔记