存储和数据库 | 青训营笔记

126 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第15天

前言

本文介绍了存储结构和数据库,从历史发展、主流产品剖析到未来的发展方向等进行了详细介绍。本文主要是进行总结和科普,具体的实操还是需要大家下面自己查找资料。

1.一个案例

数据产生->数据流动->数据持久化(校验合法性、修改内存、写入存储介质)

  • 产生的问题:数据丢失、多人修改、编程语言、结构化数据等

2.存储系统

需要从硬件反推软件

1.定义

一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件

要素:用户、存储介质、内存、网络

2.特点

  • 性能敏感
  • 存储系统软件架构,易受硬件影响
  • 代码既简单又复杂

3.层级结构

image.png

4.数据流程

image.png 我们发现,缓存很重要,拷贝应减少,需要有抽象统一的接入层

5.分类

  • 块存储:存储软件栈里的底层系统,接口过于朴素
  • 文件存储:日常使用最广泛的存储系统,接口十分友好,实现五花八门
  • 对象存储:公有云上的王牌产品,immutable语义加持
  • key-value存储形式最灵活,存在大量的开源/黑盒产品

6.RAID

Redundant Array of Inexpensive Disks ,廉价磁盘冗余阵列

  • 背景

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

    • RAID 0 :多块磁盘简单组合,数据条带化存储,但无容错设计
    • RAID 1 : 一块磁盘对应一个镜像盘,容错能力强,但空间利用率为50%
    • RAID 0+1 :上面两者的结合,容错能力强,写入带宽好

3.数据库

1.分类

特殊的存储系统

  • 关系型数据库
  • 非关系型数据库

ps:

  • 关系 = 集合 = 任意元素组成的若干有序偶对,即反应了事物间的关系
  • 关系代数 = 对关系作运算的抽象查询语言
  • SQL = 一种DSL = 方便人类阅读的关系代数表达形式

2.关系型数据库

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

3.非关系型数据库

一般不要求严格的结构化

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

4.与经典存储对比

  • 结构化数据管理
    • 关系型数据库是以表达式管理
    • 经典存储是自行定义管理结构,面向bytes
  • 事务能力
    • 关系型数据库支持事务(ACID,之前文章讲述过事务的特点:原子性、一致性、独立性、持久性)
  • 查询能力
    • 数据库代码灵活、简洁
    • 一般存储系统代码僵化、复杂

5.数据库使用方式

SQL常见操作: Insert、Update、Select、Delete、Where子句、GroupBy、OrderBy等

4.主流产品分析

1.单机存储

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

分为两种存储方式:本地文件系统key-value存储

本地文件系统

  • 管理单元:文件
  • 文件系统接口:VFS统一抽象接口
  • Linux文件系统的两大数据结构
    • Index Node :记录文件元数据,inode是文件唯一标识
    • Directory Entry :记录文件名、inode指针、层级关系等,dentry是内存结构

key-value存储

  • 常见使用方式:put(k,v)、get(k)
  • 常见数据结构:LSM-Tree,追求写入性能
  • 产品:RocksDB

2.分布式存储

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

有两种存储方式:HDFSCeph

HDFS

  • 大数据时代基石
  • 背景: 高级硬件贵,数据存量大,要求超高吞吐
  • 特点
    • 支持海量数据存储
    • 高容错性
    • POSIX语义
    • 性价比高,用普通x86服务器
  • 框架 image.png

Ceph

  • 开源分布式存储系统里的万金油

  • 核心特点

    • 支持对象接口、块接口、文件接口,但一切皆文件
    • 数据写入采用主备复制模型
    • 数据分布模型采用CRUSH算法(HASH+权重+随机抽签)
  • 架构 image.png

3.单机数据库

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

有两种存储方式:关系型数据库非关系型数据库

关系型数据库

  • 产品:商业产品Oracle,开源产品MySQLPostgreSQL

  • 通用组件

    • Query Engine —— 负责解析query,生成查询计划
    • Txn Manager —— 负责事务并发管理
    • Lock Manager —— 负责锁相关的策略
    • Storage Engine —— 负责组织内存/磁盘数据结构
    • Replication--负责主备同步
    • 关键内存数据结构:B-Tree、B+-Tree、LRU List等
    • 关键磁盘数据结构: WriteAheadLog (RedoLog) 、 Page
  • 框架:先在Page中存储数据,随后到内存中的缓存,之后数据转移到硬盘中 image.png

非关系型数据库

  • 产品:MongoDB、 Redis、 Elasticsearch

  • 特点:交互方式各不相同;数据结构多;尝试支持SQL和事务

  • Elasticsearch

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

    • 面向「文档」存储
    • 文档可序列化成JSON/BSON,支持嵌套
    • collection = 文档的集合
    • 存储和构建索引能力依赖wiredTiger引擎
    • 4.0后开始支持事务
    • 常用client/SDK交互,可通过插件转译支持弱SQL
  • Redis

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

4.分布式数据库

  • 容量问题:容量受硬件限制
  • 弹性问题:扩缩容不灵活
  • 性价比问题:容量与cpu利用率不平衡

以上问题都可以通过将将存储节点池化来解决 image.png 更多特点:

  • 多写
  • 内存弹性
  • 分布式事务优化

5.新技术发展

1.分类

整体分为三个方向,如下

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

2.SPDK

  • Kernel Space-> User Space :避免syscall带来的性能损耗,直接从用户态访问磁盘
  • 中断 -> 轮询 :提高IO性能,减少CS
  • 无锁数据结构 :采用Lock-free queue,降低并发时同步开销

3.AI增强

采用AI决策,实现行列混存

4.高性能硬件

  • RDMA网络:减少拷贝和CPU开销
  • Persistenrt Menony:IO时延约在百纳秒量级
  • 可编程交换机:交换机层对网络包做计算逻辑
  • CPU、GPU、DPU: CPU更多核,GPU更强大算力和显存空间,DPU异构计算

小结

本文讲述了存储结构和数据库的基本知识,梳理下来让我更加理解存储方面的原理。这里只是一些理论讲解,具体的操作和语法还是需要自己去学习的,但是在这梳理之后,感觉语言并不是最重要的。毕竟,语法千千万,有思路,有思考,有收获才是最重要的!

参考

  • 字节跳动带你认识存储&数据库教程