存储与数据库 | 青训营

存储&数据库

案例导入

新用户注册,其注册数据的流动

  • 数据库的数据持久化
  • 潜在问题
    • 数据库怎么保证数据不丢失
    • 数据库如何处理多人同时修改数据的问题
    • 为什么使用数据库作为存储,除了数据库还能将数据存到其他存储系统中吗
    • 数据库只能处理结构化数据吗
    • 有哪些操作数据库的方式,要用什么编程语言
  • 存储系统

  • 存储系统——提供了读写、控制类接口,安全有效地把数据持久化存储到硬件介质的软件
  • 存储系统涉及到用户、存储介质、内存、网络等方面,需要综合考量
  • 系统特点
    • 作为后端软件的底座,性能敏感(很可能会被高并发、多次操纵)
    • 存储系统软件架构容易受硬件影响(存储系统软件需要与存储硬件介质接轨,因此底层硬件发生变化,软件架构通常需要随之变化)
    • 存储系统代码,既“简单”(主要是IO方面,因为需要保证大量高并发操作的性能,IO操作过于复杂,容易出问题),又“复杂”(需要考虑到各种异常情况,因此其涉及到的异常处理逻辑比较复杂)
  • 存储层级结构
  • 计算机内存等级金字塔追求性价比,稳定、容量较大、速度较快且价格不高——Persistent Memory

  • 数据从应用——>存储介质
  • image.png经验之谈

  • 缓存很重要,贯穿整个存储体系(不管是buffer还是cache,不管是在应用层传输数据还是向硬件介质层写入数据都需要用到缓存,因为涉及到不同层次接收的数据传输大小不同,需要缓存做缓冲)
  • 拷贝很昂贵,应该尽量减少(拷贝昂贵在于占用CPU等资源,如果主线进程上有较多拷贝,就会大大影响应用性能)
  • 硬件设备五花八门,他们的接口设计的写入容量等均不同,所以,应用还需要有抽象的接入层,以面对硬件设备变更问题
  • RAID技术(Redundant Array Inexpensive Disks)
  • 数据库

  • 分类
  • 数据库使用方式——SQL语句
  • 数据库VS经典存储
  • 主流存储&新技术

    主流产品

    单机存储

  • 单机存储 = 单个计算机节点上的存储软件系统,一般不涉及网络交互
  • 单机存储主要有两种:本地文件系统和key-value存储
  • 本地文件系统
  • key-value存储
  • image.png

    分布式存储

  • 分布式存储 = 在单机存储基础上实现了分布式协议,涉及大量网络交互
  • 分布式存储主要有两种:分布式文件系统和分布式对象存储
  • 分布式文件系统(以HDFS为例介绍)
  • 分布式对象存储(以Ceph为例介绍)
  • image.png

  • Ceph核心特点
    • 系统支持对象接口、块接口、文件接口,一切皆对象
    • 数据写入采用主备复制模型
    • 数据分布模型采用CRUSH算法(Hash+权重+随机抽签)
  • 单机数据库

  • 单机数据库 = 单个计算机节点上的数据库系统
  • 事务在单机内执行,也可能通过网络交互实现分布式事务
  • 单机数据库分为:关系型数据库和非关系型数据库
  • 单机关系型数据库

  • 商业产品Oracle称王,开源产品MySQL & PostgreSQL称霸
  • 关系型数据库的通用组件
    • Query Engine —— 负责解析query,生成查询计划
    • Txn Manager —— 负责事务并发管理
    • Lock Manager —— 负责锁相关的策略
    • Storage Engine —— 负责组织内存/磁盘数据结构
    • Replication —— 负责主备同步
  • 关键内存数据结构:B-Tree、B+Tree、LRU List等
  • 关键磁盘数据结构:WriteAheadLog(RedoLog)、Page
  • 关系型数据库大致结构
  • image.png

    单机非关系型数据库

  • MongoDB、Redis、Elasticsearch三足鼎立
  • 交互方式:关系型数据库一般直接使用SQL交互,而不同的非关系型数据库交互方式各不相同
  • 数据结构:非关系型数据库的数据结构千奇百怪,没有关系约束,schema相对灵活
  • 趋势:不管是否为关系型数据库,大家都在尝试支持SQL(子集)和“事务”
  • MongoDB
    • 面向【文档】存储
    • 文档可序列化成JSON/BSON,支持嵌套
    • 存在【collection】,collection = 文档的集合
    • 存储和构建索引的能力依赖 wiredTiger 引擎
    • 4.0后开始支持事务(多文档、跨分片文档等类型的事务)
    • 常用client/SDK交互,可通过插件转译支持弱 SQL 交互
  • Redis
    • 数据结构丰富(hash表、set、zset、list)
    • C语言实现,具有超高性能
    • 主要基于内存,但支持AOF/RDB持久化
    • 常用redis-cil/多语言SDK交互
  • Elasticsearch
    • 面向【文档】存储
    • 文档可序列化成JSON,支持嵌套
    • 存在【index】,index = 文档的集合
    • 存储和构建索引的能力依赖 Lucene 引擎
    • 实现了大量搜索数据结构 & 算法
    • 支持 RESTFUL API,也支持弱 SQL 交互
    • 与RDBMS相比,天然能做【模糊搜索】,还能自动算出关联程度(RDBMS需要上层设计模糊匹配)
  • 分布式数据库

  • 问题引入
  • 单机数据库系统在使用过程中有以下几个主要问题

  • 容量(单点容量有限,受硬件影响,通常一个数据库系统接入挂载的磁盘是有限的)
  • 弹性(在实际业务场景下,数据有时会暴涨,资源受限,此时需要扩容,而有时数据量缩减,用不到那么多存储空间,则需要缩容,这样来回扩缩容非常麻烦且耗时较多)
  • 性价比(传统存储,磁盘容量与CPU等资源是按一定比例的,通常情况下,极有可能存在容量不够,但CPU使用率极低的情况,CPU浪费很严重,CPU资源比较昂贵)
  • 问题解决——存储节点池化,动态扩缩容
  • image.png

  • 弹性问题与性价比考虑
  • image.png

  • 分布式数据库的其他优点
    • 较于单机数据库系统,支持多写(多人写入操作)
    • 从磁盘弹性(问题解决中提到的)扩展到了内存弹性
    • 分布式事务优化
  • 新技术

    目前现状

  • 软件架构变更——Bypass OS kernel(目前做的比较好的变更,目前软件架构没有较大改革)
  • AI增强——智能存储格式转换(期待有所应用)
  • 新硬件革命
    • 存储介质变更
    • 计算单元变更
    • 网络硬件变更
  • SPDK

  • Bypass OS kernel 已经成为一种趋势,SPDK是其典型应用
  • S(Storage)P(Performance)D(Development)K(Kit)具有以下三种变化
  • AI & Storage

  • AI在很多领域都有不错的实践效果,但是在Storage方面并没有很大的应用
  • 期待可以应用的领域:智能存储格式转换
    • 传统的数据存储通常是列存或是行存,但是单一存储格式并不能最大化利用存储空间,
    • 而行列混存这个设想可以解决这个问题,但是Storage是动态变化的,所以需要AI动态决策行列混存策略
  • 高性能硬件

  • RDMA网络
  • Persistent Memory
  • 可编程交换机
  • CPU/GPU/DPU