(八)带你认识存储和数据库 | 青训营

46 阅读5分钟

课程目录

image-20230813152102338.png

01 经典案例

一条数据从产生,到数据流动,最后持久化的全生命周期

数据的产生

image-20230813152428831.png

数据的流动

image-20230813152442986.png

数据的持久化

image-20230813152502955.png

为什么要做持久化? 一直把数据放在内存里面是不可能的,需要记忆的数据必须持久化存储写入硬件。

记得关注硬件的寿命

潜在的问题

image-20230813152512929.png

02 存储 & 数据库简介

什么是存储系统, 什么是数据库系统?

存储系统

系统概览

image-20230813153215169.png

四个关键点:用户、介质、内存、网络

系统特点

image-20230813153356202.png

既简单(io不能有很多分支),有复杂(要考虑多种异常情况)

存储器层级结构

image-20230813153758256.png

数据怎么从应用到存储介质

image-20230813154014006.png

Disk : 代指任何存储设备

RAID技术

image-20230813154256878.png

什么是条带化存储?

raid0 增速

raid1 增加可靠性

数据库

难道数据库和存储系统不一样吗?

image-20230813184541788.png

概览

笛卡尔乘积是指在数学中,两个集合XY的笛卡尔积(Cartesian product),又称直积,表示为X×Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员 。

假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。

image-20230813184726325.png

DSL: domain specific language (领域专用语言)

关系型数据库特点

image-20230813184838156-16919237205541.png

非关系型数据库

image-20230813184949736.png

数据库 vs 经典存储

结构化数据管理

image-20230813185115578.png

经典存储:就是自定义存储的数据结构,然后以byte为单位存储到文件中。

然后数据库也是建立在经典存储上面的,是经典存储一步一步的增加功能和升级从而陈给了现在的数据库。

事务能力

image-20230813185129466.png

一致性:事务前后状态是统一的,例如A有1000块,给B转账500块,最终A(500)、B(500)。不一致举例:A(500),B(0)

复杂查询能力

image-20230813185158497.png

经典存储:需要些代码去读取一个一个的数据,然后进行if-else 判断

数据库使用方式

sql是在数据库领域具有统治性的DSL

image-20230813185950489.png

03 主流产品剖析

3.1 单机存储

概览

image-20230814002753898-16919440745522.png

本地文件系统

image-20230814003454832.png

VFS: Virtual File System

index node 和 文件关系是1:1的

系统的index node数量在初始化时基本就是固定的

Directory Entry是一个全内存的数据结构,并不会被持久化到磁盘

key-value 存储

image-20230814003631818.png

常见的数据结构:LSM-Tree,某种程度上牺牲读性能,追求写入性能(HDD-SSD) LSM-Tree是在HDD到SDD转变的节点创建的,当时HDD(顺序读写)在市场上是占统治地位的

LSM-Tree: Log Structured Merge Tree

左边:内存结构

右边:磁盘结构

两边都是顺序写入的pattern

黄色的MemTable中的记录会被一条一条地添加,当满了之后就会被加入灰色的Memtable 不可变的MemTable会被顺序写入到0 SSTable(有序的key value集合)

level 0 装满之后下刷到level1 ,会不断的往下刷,想要执行get(key), 需要将多层level合并

immutable 不可变的

3.2 分布式存储

概览

image-20230814194838063.png 重点关注网络交互的有效性和性能

分布式文件系统

image-20230814195027394.png

posix语义:是posix

NameNode: 保存了整个系统数据存储的拓扑结构,当读数据的时候先和NameNode进行交互,拿到数据存储在哪。在HDFS的基础上建立了Hadoop体系。

分布式对象存储系统

image-20230814195705073.png

数据分布模型:副本怎么在物理服务器上存储。

3.3 单机关系型数据库

概览

image-20230814195740488.png

关系型数据库

image-20230814195946998.png

image-20230814200046613.png

左边是数据结构,右边是数据存储结构(Page 、Redo Log、Temp file)

每个节点就是一个Page,对树或者节点的操作都会记录在redo log之中

temp data : 一些中间数据,例如在计算的过程中发现内存不够了,把一些join或者sorted 的结果写入临时文件,再需要用到的时候进行读取。

3.4 单机 非关系型数据库

image-20230814200533767.png

ElasticSearch使用案例

image-20230814200854793.png

搜索使用的是倒排索引

3.5 从单机到分布式数据库

image-20230814201128812.png

解决容量问题

image-20230814201305336.png

解决办法:设计存储池,存储池和数据之间使用网络进行交互,数据库不用担心存储容量够不够。存储池会自动完成存储资源的扩充和卸载。

解决存储设备的容量、弹性、性价比问题。

解决弹性问题

弹性:资源的动态扩展和卸载

image-20230814202146889.png

最开始的Server 资源图后来业务扩张,更换Server设备,后来业务收缩又更换Server 设备,这是非常麻烦的。

解决办法:服务设备资源池化,使用cpu pool和storage pool

解决性价比问题

image-20230814202137398.png

解决办法:服务设备资源池化

More to DO

image-20230814201919764.png

  • 现在的数据库不管是不是分布式都是单写架构,同一时间同一数据只有一个用户能够进行操作
  • 怎么提升内存的单行
  • 分时事务的优化

04 新技术演进

4.1 概览

image-20230814202905501.png

4.2 新技术演进-SPDK

image-20230814203228367.png

访问外设,一些外设速度很慢,需要中断,这个时候可以让cpu去干别的事。

SPDK提供的poller分两种:基于定时器的poller和非定时器的poller。谓Poller,其实就是用户定义函数的封装

减少cs: context switch

4.3 新技术演进 - al & storage

image-20230814223933731.png

根据行存储和列存储各自的优势,再利用al实时分析(依据的数据有数据访问频度等)哪些数据行存储哪些数据列存储

4.4 新技术演进-高性能硬件

image-20230814224309484.png

rdma网络参考网址:blog.csdn.net/bandaoyu/ar… rdma直接将数据映射到网卡,减少拷贝次数,减少cpu开销

persistent memory 结合了ssd和memory二者的特性。

可编程交换机在分布式数据库情况下,做一些缓存一致性协议,一些多副本协同的工作。

many-core 20核-->40核--->100核

workload: 工作量

总结

image-20230814225704101.png转存失败,建议直接上传图片文件

课后作业

image-20230814225746191.png

引用

image-20230814225931897.png

补充

世界是树型的

世间的一切都是key-value 例如key是你的标识,value是你的内涵