大规模分布式储存系统笔记(一)

2023-05-16

分布式储存系统的特性:
1.可扩展性:可按集群规模增长,系统性能线性增长;
2.低成本:系统自动容错,自动负载均衡,运维方便
3.高性能:
4.易用性:对外提供接口

数据类型:
非结构化数据:文档,文本图片等
结构化数据:存关系数据库,结构化数据的模式(Schema,包括属性、数据类型以及数据之间联系),内容模式要定义
半结构数据:如HTML,模式结构与内容混合,无需事先定义结构
分布式存储系统
分布式文件系统:常存Blob(Binary Large Object 二进制大对象)对象,非结构化数据,定长块,大文件
在这里插入图片描述
分布式键值系统:存储关系简单的半结构化数据,只提供CRUD功能
分布式表格系统:用于储存较为复杂的半结构数据,支持CRUD,支持扫描某个主键范围,一表格为单位组织数据,每个表格包含多行,通过主键标识一行,支持CRUD 及范围查找。
分布式数据库:用于存储结构化数据,采用二维表格组织数据 。

常见硬件参数:
在这里插入图片描述
存储介质对比:
在这里插入图片描述
储存系统性能主要包括两个维度:吞吐量以及访问延迟,磁盘与SSD访问延迟相差大,带宽相差不大(对于SATA接口的ssd来说),磁盘适合大块顺序访问的存储系统,访问不频繁的冷数据,SSD适合随机访问较多或者对延时比较敏感的关键系统,访问频繁的热数据。

单机存储引擎:
哈希存储引擎,利用哈希表的持久化实现,支持CRUD 不支持顺序扫描,存储系统键值存储系统;B树存储引擎利用B树持久化实现,支持CRUD和顺序扫描对应存储系统是关系数据库,LSM(Log-Structured Merge Tree),支持CRUD 顺序查找,通过批量转储技术规避磁盘随机写入

哈希存储引擎:
Bitcask 为例,仅支持追加,不修改老数据,系统中文件大小有限制,到一定大小会参数新文件,老文件只读,在任意时刻只有一个文件可写,该文件为活跃数据文件,老文件为老数据文件(older data file)
1.数据结构:
每条记录包含主键,value内容,主键长度,value长度,时间戳,crc校验。数据删除操作将value设为一个特殊值做标识
内存中是基于哈希表的索引结构,通过主键定位到value位置,哈希表结构中每一项包含三个用于定位数据的信息,分别为文件编号(file id),value在文件中的位置(value_pos),value长度(value_sz) 通过读取file_id对应文件value_pos开始的value_sz个字节 得到value,写入是1先在Key_value记录追加到活跃数据文件尾部,再更新内存哈希表,每次写要进行一次顺序磁盘写入和内存操作。
在这里插入图片描述
如果value平均长度为1k,每条记录在内存中索引信息为32字节,磁盘内存比为32:1
定期合并:
定期执行合并操作,将所有老数据文件中数据扫描,对同一个key的多个操作只保留最新一个
3,快速恢复
指断电后内存hash表数据消失,要扫描数据重建hash表,bitcask通过索引文件(hint file)提高重建哈希表速度。
索引文件将内存中的哈希索引表转存到磁盘生成结果文件,主要在合并操作的时候生成索引文件

B树存储引擎
以Mysql InnoDB中,有一个称为聚集索引的特殊索引,行数据存于其中组成B+树
1.
在这里插入图片描述
MySQL InnoDB按照页面页面(Page)来组织,每个页面对应B+树的一个节点,叶子节点保存每行完整数据,非叶子节点保持索引信息。数据中每个节点有序存储,数据库查询从根节点开始二分查找到叶子节点,每次读取一个节点,对应页面不在内存,要从磁盘中读取并缓存起来 ,B+树根节点常驻内存,B+树一次最多要h-1次读取磁盘,复杂度 O ( h ) = O ( l o g d N ) O(h)=O(logd^{N}) O(h)=O(logdN)(N元素个数, d每个节点度,h为B+树高度)修改时 先提交日志,再修改内存B+树,内存中修改超一定比例,会将页面再磁盘中修改

2.缓冲区管理
缓冲区管理中替换策略:
LRU
维护一个链表,维护最近访问的数据的顺序,并淘汰链表最后的数据。
LIRS
LRU算法,对于查询要进行全表扫描,导致LRU链表被污染情况,将缓冲区分为两部分,第一部分被访问数据,被访问两次以上数据,进入第二部分,第二部分淘汰用LRU

LSM树存储引擎
LSM树(Log Structured Merge Tree) 对数据的修改增量保持在内存中,达到指定大小限制后将修改批量写入硬盘。读取时合并磁盘中历史数据和内存中修改操作。优势,规避磁盘随机写入,读取可能要访问较多磁盘文件;
存储结构:
在这里插入图片描述
LevelDB存储引擎:内存中MemTable和不可变的MemTable(Immutable Memtable,冻结MemTable)磁盘上文件:当前文件Crurrent ,清单文件(Manifest),操作日志(Commit Log)文件,SSTable文件,操作先写入日志,在修正操作到MemTable。Memtable到达内存上限后,将内存数据转储到外存文件中,将MemTable转储不可变,后台将不可变MemTable数据排序转储到磁盘,形成SSTable, Compaction操作

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

大规模分布式储存系统笔记(一) 的相关文章

  • java如何实现base64和图片互相转换呢?

    下文笔者讲述base64和图片互相转换的方法分享 xff0c 如下所示 实现思路 笔者通过一个utils类实现base64和图片两者的互相转换 例 import java io FileInputStream import java io
  • Java删除字符串中指定字符的方法分享

    转自 xff1a Java如何删除字符串中指定字符呢 xff1f 字符串 字符串主要用于编程 xff0c 概念说明 函数解释 用法详述见正文 xff0c 这里补充一点 xff1a 字符串在存储上类似字符数组 xff0c 所以它每一位的单个元
  • Java中Collections.singleton方法起什么作用呢?

    转自 Java中Collections singleton方法起什么作用呢 xff1f 下文笔者讲述Collections singleton方法的功能简介说明 xff0c 如下所示 Collections singleton方法功能 返回
  • Java如何借助Stream流进行求和呢?

    转自 Java如何借助Stream流进行求和呢 xff1f list简介 集合就是把具有相同属性的东西放在一起 xff0c 也可以是容器 xff0c 把有关的东西都放进去 List是位于java util下的一个接口 xff0c 有序集合
  • Java JSON格式简介说明

    转自 Java JSON格式简介说明 下文笔者讲述java中JSON格式的相关简介说明 xff0c 如下所示 JSON简介说明 JSON JavaScript Object Notation 是一种轻量级的基于文本的数据交换格式 它采用完全
  • Java 如何使用Matcher.matches()匹配整个字符串呢?

    转自 Java 如何使用Matcher matches 匹配整个字符串呢 xff1f 下文讲述使用Matcher matches 匹配整个字符串的方法分享 xff0c 如下所示 Matcher matches 对整个字符串进行匹配 当整个字
  • Java中如何删除文件呢?

    转自 xff1a Java中如何删除文件呢 下文笔者讲述java中删除文件的方法分享 xff0c 如下所示 实现思路 借助File delete 方法即可实现文件删除操作 File delete语法 public boolean delet
  • Java中Random.nextInt()方法功能简介说明

    转自 Java中Random nextInt 方法功能简介说明 下文笔者将讲述Random nextInt 方法的功能简介说明 xff0c 如下所示 Random nextInt 方法功能 用于随机产生某个范围区间的整数 注意事项 Rand
  • Java中ArrayList之clone()方法的功能说明

    转自 Java中ArrayList之clone 方法的功能说明 下文讲述ArrayList中clone 方法的功能简介说明 xff0c 如下所示 ArrayList Clone 方法的功能简介 clone 方法的功能 用于复制一份Array
  • (附源码)计算机毕业设计SSM智慧小区团购系统

    项目运行 环境配置 xff1a Jdk1 8 43 Tomcat7 0 43 Mysql 43 HBuilderX xff08 Webstorm也行 xff09 43 Eclispe xff08 IntelliJ IDEA Eclispe
  • springboot如何使用soap协议的方式访问webService接口呢?

    转自 springboot如何使用soap协议的方式访问webService接口呢 xff1f 下文笔者讲述springboot采用soap协议的方式访问webService接口的方法分享 xff0c 如下所示 1 引入相应的jar包 lt
  • springboot-starter如何整合阿里云datahub呢?

    转自 springboot starter如何整合阿里云datahub呢 xff1f 下文笔者讲述springboot整合datahub的方法分享 如下所示 Datahub简介说明 DataHub的功能 xff1a 1 与大数据解决方案中K
  • Spring之@Qualifier注解简介及示例

    转自 Spring之 64 Qualifier注解简介及示例 下文笔者讲述 64 Qualifier注解功能简介及示例分享 64 Qualifier注解功能简介 功能1 使用bean名称注入DI属性 功能2 设置bean的名称 64 Qua
  • Docker学习一篇就够了

    Docker简介 Docker 是一个开源的应用容器引擎 xff0c 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中 然后发布到任何流行的Linux或Windows操作系统的机器上 也可以实现虚拟化 容器是完全使用沙箱机制 相互之
  • LocalDate与Date相互转换

    1 LocalDate转Date LocalDate date 61 LocalDate of 2006 07 26 ZoneId zone 61 ZoneId systemDefault Instant instant 61 date a
  • mssql sqlserver 将字段null(空值)值替换为指定值的三种方法分享

    摘要 下文将分享两种将字段中null值替换为指定值的方法分享 xff0c 如下所示 实验环境 sqlserver 2008 R2 例 create table test keyId int identity info varchar 30
  • C#调用RabbitMQ实现消息队列

    前言 我在刚接触使用中间件的时候 xff0c 发现 xff0c 中间件的使用并不是最难的 xff0c 反而是中间件的下载 xff0c 安装 xff0c 配置才是最难的 所以 xff0c 这篇文章我们从头开始学习RabbitMq xff0c
  • DataX踩坑2 | 定时任务crontab不执行或报错:/bin/sh: java: command not found

    前面两天写了一个DataX的增量同步脚本 xff0c 今天检查了一下发现定时任务没有执行成功 xff0c 数据并没有同步 以下为排查问题和解决方法 一 定时任务crontab不执行 脚本 xff08 测试用的可以设为每分钟一次 xff1a
  • Thread类的sleep()方法和对象的wait()方法区别

    sleep 方法 xff08 休眠 xff09 是线程类 xff08 Thread xff09 的静态方法 xff0c 调用此方法会让当前线程暂停执行指定的时间 xff0c 将执行机会 xff08 CPU xff09 让给其他线程 xff0
  • Altium Desinger - 推挤式布线

    版本 xff1a Altium Desinger 19 操作 xff1a 推挤式布线 推挤式布线方法 1 选用拉线工具 2 点击 34 Tab 34 3 Interactive Routing Options 34 Shift 43 R 3

随机推荐