单机存储系统

article/2025/9/22 8:27:34

单机存储引擎就是哈希表、B树等数据结构在机械磁盘和SSD等持久化介质上的实现。

单机存储系统是单机存储引擎的一种封装,对外提供文件、键值、表格或者关系模型,单机存储系统的理论来源于关系数据库

哈希存储引擎是哈希表的持久化实现。

B树存储引擎是B树的持久化实现。

LSM树(Log structure merge tree)存储引擎采用批量转储技术来避免磁盘随机写人。

 

 

一、CPU架构

CPU架构有两种:SMP和NUMA

 

1、SMP:

经典的多CPU架构为对称多处理结构(symmetric Multiprocessing,SMP)

在一个云计算机上汇集了一组处理器,它们之间对称工作无主次无从属关系,共享相同的物理内存及总线


主要特征:共享。

系统中所有资源(CPU、内存、IO)都是共享的,由于多CPU对前端总线的竞争,SMP的扩展能力非常有限。

 

 

2、NUMA

主流服务器架构一般为NUMA(非一致存储访问)架构。

具有多个NUMA节点,每个NUMA节点是一个SMP结构。

 

二、单机存储系统瓶颈

存储系统的性能瓶颈一般在于IO性能

 

 

同一个数据中心内部的传输延时是比较小的,网络一次来回的时间在1毫秒之内。

数据中心之间的传输延迟是很大的,取决于光在光纤中的传输时间。

 

存储系统的性能瓶颈主要在于磁盘随机读写

设计存储引擎的时候会针对磁盘的特性做很多的处理,比如将随机写操作转化为顺序写,通过缓存减少磁盘随机读操作

固态磁盘用来做缓存或者性能要求较高的关键业务

 

 

三、单机存储引擎

存储引擎是存储系统的发动机,直接决定了存储系统能够提供的性能和功能。

常见的存储引擎:哈希、B树、LSM树

 

1、哈希

Bitcask 是一个基于哈希表结构的键值存储系统,它仅支持追加操作

 

每个文件有一定的大小限制,当文件增加到相应的大小时,就会产生一个新的文件,老的文件只读不写

在任意时刻,只有一个文件是可写的,用于数据追加,称为活跃数据文件

其他已经达到大小限制的文件,称为老数据文件

每个写操作总共需要进行一次顺序的磁盘写人和一次内存操作。

 

内存中存储了主键和value的索引信息。

磁盘文件中存储了主键和value的实际内容。

 

定期执行合并操作以实现垃圾回收。

合并操作:将所有老数据文件中的数据扫描一遍并生成新的数据文件。

对同一个key的多个操作以只保留最新一个的原则进行删除,合并后,新生成的数据文件就不再有冗余数据了。

 

Bitcask通过索引文件来提高重建哈希表的速度

索引文件:将内存中的哈希索引表转储到磁盘生成的结果文件。

Bitcask对老数据文件进行合并操作时,会产生新的数据文件和产生一个索引文件,索引文件记录每一条记录的哈希索引信息。

 

 

2、B树存储引擎

B树存储引擎支持随机读取和支持范围扫描。

叶子节点保存每行的完整数据,非叶子节点保存索引信息。


B+树的根节点是常驻内存。

 

缓冲区管理器负责将可用的内存划分成缓冲区,缓冲区是与页面同等大小的区域,磁盘块的内容可以传送到缓冲区中。

缓冲区管理器的关键在于替换策略

 

LRU算法淘汰最长时间没有读或者写过的块

现代数据库一般采用LIRS算法,将缓冲池分为两级,数据首先进人第一级,如果数据在较短的时间内被访问两次或者以土,则成为热点数据进入第二级,每一级内部还是采用LRU替换算法。

 

 

2、LSM树存储引擎

将对数据的修改增量保持在内存中,达到指定的大小限制后将这些修改操作批量写人磁盘,读取时需要合并磁盘中的历史数据和内存中最近的修改操作。

 

有效地规避了磁盘随机写人问题,读取时可能需要访问较多的磁盘文件

 

 

4、数据模型

存储引擎相当于存储系统的发动机,数据模型就是存储系统的外壳。

 

存储系统的数据模型主要包括三类:文件关系以及键值

 

4.1、文件模型和对象模型

文件系统以目录树的形式组织文件

POSIX( Portable Operating System interface)是应用程序访问文件系统的api标准,定义文件系统存储接日及操作集。定义了读写操作语义。

要求读写并发时能够保证操作的原子性

 

POS IX标准适合单机文件系统

对象模到与文件模型比较类似,与文件模型不同的是,对象模型要求对象一次性写入到系统,只能删除整个对象,不允许修改其中某个部分。

 

每个关系是一个表格,由多个元组(行)构成,而每个元组又包含多个属性(列)。关系名、属性名以及属性类型称作该关系的模式(schema)。

 

SQL还包括两个重要的特性:索引以及事务

数据库索引用于减少SQL执行时扫描的数据量,提高读取性能。

数据库事务则规定了各个数据库操作的语义,保证了多个操作并发执行时的ACIO特性(原子性、一致性、隔离性、持久性),

 

4.2键值模型和表格模型

大量的NoSQL系统采用了键值模型

key-value模型过于简单,

支持的应用场景有限,NaSQL系统中使用比较广泛的模型是表格模型。表格模型弱化了关系模型中的多表关联,支持基于单表的简单操作

表格模型除了支持简单的基于主键的操作,还.支持范围扫描。也支持基于列的操作。

表格模型一般不支持多表关联操作,事务操作支持也比较弱

表格模型往往还支持无模式特性,

 

 

5、事务与并发控制

事务ACID属性

事务分为3种类型:读事务写事务以及读写混合事务

 

并发控制,数据库锁

锁也分为两种类型:读锁以及写锁,允许对同一个元素加多个读锁,但只允许加一个写锁,且写事务将阻塞读事务

    解决死锁的思路主要有两种:第一种思路是为每个事务设置一个超时时间,超时后自动回滚。第二种思路是死锁检测:死锁出现的原因在于事务之间互相依赖,依赖关系构成一个环路。检测到死锁后叮以通过回滚其中某些事务来消除循环依赖。

 

写时复制

写时复制(copy-on-write)读操作不用加锁,极大地提高了读取性能。

写操作成本高,多个写操作之间是互斥的同一时刻只允许一个写

 

多版本并发控制

C能够实现读事务不加锁。对每行数据维护多个版本,无论事务的执行时间有多长,MVCC能够提供与事务开始时刻相一致的数据。提高了系统的并发度。定期删除不再需要的版本,及时同收空间。

 

6、故障恢复

数据库系统以及其他的分布式存储系统一般采用操作日志

 

操作日志分为回滚日志重做日志以及UNDO/REDO日志

 

7、操作日志

保证数据库的一致性,数据库操作需要持久化到磁盘,通过操作日志顺序记录每个数据库操作并在内存中执行这些操作,内存中的数据定期刷新到磁盘,实现将随机写请求转化为顺序写请求。

 

关系数据库系统一般采用UNDO/REDO日志

REDO的操作日志日志的约束规则为:必须先刷人到磁盘中在修改内存中的元素X之前,要确保与这一修改相关。

    成组提交:Group Commit技术是一种有效的优化手段。REDO日志首先写人到存储系统的日志缓冲区中。

成组提交技术保证REDO日志成功刷人磁盘后才返回写操作成功。这种做法可能会牺牲写事务的延时,但大大提高了系统的吞吐量。

检查点,需要将内存中的数据定期转储到磁盘

 

8、数据压缩

数据压缩分为有损压缩无损压缩两种。

有损从缩算法压缩比率高,但数据可能失真,一般用于床缩图片、音频、视频。

无损版缩算法能够完全还原原始数据,

压缩算法的核心是找重复数据,列式存储技术通过把相同列的数据组织在一起。

压缩算法

压缩的本质就是找数据的重复或者规律,用尽量少的字节表示。

Huffman编码

前缀编码要求一个字符的编码不能是另一个字符的前缀二

LZ系列压缩算法

LZ系列压缩算法是基于字典的压缩算法。

LZ系列的算法是一种动态创建字典的方法,压缩过程中动态创建字典并保存在从缩信息里面

列式存储

传统的行式数据库将一个个完整的数据行存储在数据页中。在磁盘中是比较高效的

列式数据库是将同一个数据列的各个值存放在一起。


列式数据库压缩时有很大的优势

Bigtable列式数据库对网页库压缩可以达到15倍以上的压缩率。


http://chatgpt.dhexx.cn/article/V8kFnS4a.shtml

相关文章

存储系统和结构

很久没有在CSDN上面发文章了,最近复习机组的存储器,感慨自己这两年把知识都还给老师了,便做个笔记好好整理一下,也有了一些新收获。转载请注明来源:https://leerw.github.io 存储系统和结构 存储系统 将两个或来两…

存储系统 —— Cache(高速缓冲存储器)

本文主要介绍以下几方面的知识: Cache 的基本工作原理Cach和主存之间的映射方式Cache中主存块的替换算法Cache写策略 1.Cache的基本工作原理 存储系统存在的问题 局部性原理 (3)Cache 工作原理 性能分析 块地址形式 2.Cach和主存之间的映射方式 (1)全相联…

3-1存储系统-存储器概述主存储器

文章目录 一.存储器概述(一)存储器分类1.按在计算机中的作用(层次)分类2.按存储介质分类3.按存取方式分类4.按信息的可保存性分类 (二)存储器的性能指标 二.主存储器(一)基本组成1.译…

存储系统的层次结构

目录 一.背景二.层次结构(1)结构(2)原理(3)性能 一.背景 现在我们使用的计算机系统结构是冯诺依曼体系结构,它的一个特点就是中央处理器CPU(控制器算数运算器)与存储器相…

分布式存储Ceph存储系统RADOS

RADOS是Ceph最为关键的技术,它是一个完整的对象存储系统,所有存储在Ceph系统中的数据最终由这一层来存储。本文主要介绍RADOS的系统架构和IO处理流程,以了解Ceph存储的设计原理。 1、Ceph功能模块与RADOS Ceph存储系统的逻辑结构在“分布式系…

计算机存储系统

前言 何为存储系统? 存储系统是指计算机中由存放程序和数据的各种存储设备、控制部件及管理信息调度的设备(硬件)和算法(软件)所组成的系统。 为何需要存储系统? 信息是人类认知外界的方式,最初…

存储系统的概念

1.程序的局部性原理 统计表明, 无论是访问存取指令还是存储数据,在一个较短的时间间隔内,程序所访司的存储器地址在很大比例上集中在存储器地址空间的很小范围内。 这种在某一段时间内预繁访问某一局部的存储器地址空间、而对此范围以外的地址空间则很少…

存储系统-概念

概念 存储系统是计算机的重要组成部分之一。存储系统提供写入和读出计算机工作需要的信息(程序和数据)的能力,实现计算机的信息记忆功能。现代计算机系统中常采用寄存器、高速缓存、主存[内存]、外存[可以理解为磁盘,磁带等]的多级…

计算机组成原理——存储系统(超详细,必看!!)

本篇文章是对王道考研的2021计算机组成原理学习笔记,希望对大家有所帮助。 文章目录 三、存储系统3.1 基本概念1.存储器的层次结构2.存储器的分类3.存储器的性能指标 3.2主存储器3.2.1主存储器的基本组成3.2.2 随机存取存储器RAM1.存储元件不同导致的特性差异2.DRAM…

修改并保存hosts文件

文章目录 问题解决方法 问题 打开hosts文件发现无法修改或者修改后点击保存后是另存为 解决方法 首先找到hosts文件,文件在 C:\Windows\System32\drivers\etc 目录下 选择hosts文件右键选择属性 把属性中只读前面的对号去掉然后点击确定 然后就可以修改保存了

Win11修改hosts文件方法,Win11无法修改hosts解决方法

博主亲测有效! 1.找到hosts文件的位置。 首先找到hosts文件,W11的host文件目录是c:\windows\system32\drivers\etc 2.修改hosts文件权限 选中hosts文件,右键选择属性,弹出属性窗口。 默认权限是只读状态,取消勾选。…

Windows下修改hosts文件

Windows下修改本地域名解析文件,原因你懂的,当然多数人选择修改这个应该都是选择最优或者较优的IP地址服务器进行访问。很多网站在运营商DNS服务器上的IP地址非常慢。 我们可以不做任何文件权限的修改,也不用蠢到删除用户之后只保留Admin用户…

win10如何修改hosts文件?

win10修改hosts文件的方法: 1、打开c盘,点击“Windows”,点击“system32”-“drivers”-“etc”,找到hosts文件; 2、修改hosts文件的权限 右键hosts文件,选择属性。 选择“安全”选项,点击ho…

win10 修改hosts文件

在win10之前修改hosts文件非常简单,直接使用notepad就可以修改了,到了win10阶段,就没那么简单了,你能看到hosts文件,就是改不了。 C:\Windows\System32\drivers\etc目录下: 就是改不了。 下面聊一下修改的…

Windows系统如何修改Hosts文件

Hosts其实是IP和网址建立的一个关联关系,在hosts配置好IP和网址,用户访问此网址时,会自动在hosts配置文件中找对应关系,找到后就会打开网页。 1.在配置hosts时,需要给当前用户分配权限。在hosts文件上右键菜单点击属性…

Mac 修改Hosts文件的方式

每次都要查询怎么改Hosts文件,还是记录下来吧!!!! 1、修改终端命令 (1)打开终端,输入命令行: sudo vi /etc/hosts (2)输入本机密码后&#xf…

hosts文件位置以及如何修改hosts文件【Windows】【以github为例】

Hosts文件简介 Hosts是一个没有扩展名的系统文件,主要作用是定义IP地址和主机名的映射关系,是一个映射IP地址和主机名的规定。当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到&a…

一步步教你修改Windows本地hosts文件,轻松修改域名指向!

一步步教你修改Windows本地hosts文件,轻松修改域名指向! 简介:一、什么是hosts文件二、准备工作二、定位hosts文件三、修改hosts文件四、刷新DNS缓存五、验证修改结果结论 简介: 在前端开发过程中,我们经常需要修改本…

win11中修改hosts文件没有权限解决方案

1.找到hosts文件位置,一般情况下都在这个位置 C:\Windows\System32\drivers\etc 2.修改文件设置 将文件默认的只读修改选项勾选去掉,然后文件就可以进入编辑状态,但是需要获取管理员权限 3.通过管理员权限访问 Win R 进入运行提示框&…

Win11如何修改hosts文件?Win11修改hosts文件的方法

​hosts文件是一个用于储存计算机网络中各节点信息的计算机文件。这个文件负责将主机名映射到相应的IP地址。近期有部分Win11用户想修改hosts文件,但是不太清楚应该如何操作,针对这一情况,今天小编将为大家分享Win11修改hosts文件的方法&…