存储文件内存映射-MappedFileQueue|学习笔记

简介: 快速学习存储文件内存映射-MappedFileQueue

开发者学堂课程【RocketMQ 知识精讲与项目实战(第三阶段)存储文件内存映射-MappedFileQueue】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/704/detail/12480


存储文件内存映射-MappedFileQueue

 

内容介绍:

一.存储文件内存映射

二.MappedFileQueue

 

一.存储文件内存映射

存储文件的内存映射。RocketMQ 将消息进行持久化的时候,主要用到了几个目录进行消息的存储,比如 CommitLog 里面每一个文件其实都是存储的消息的源数据,

image.pngConsumerqueue 其实是为了进行消息的检索,这里面存储了相当于消息的索引信息,使用它可以快速找到 CommitLog 中的数据,index 是专门的比如根据消息的属性进行索引时,索引信息在这里面进行存储。

RocketMQ 使用了内存映射技术提高了 IO 访问性能,为了使用内存映射,无论对于 CommitLog、Consumerqueue 以及 indexFile,这三类不同的文件都被设计为固定的长度,当一个文件写满之后再创建另外一个新的文件,以文件名作为第一条消息对应的全局物理偏移量。使用内存映射主要的原因,就是提高 IO 访问的性能。我们会看到 CommitLog、Consumerqueue 以及indexFile,它们都是一些固定大小的文件。

其中 CommitLog 每一个的大小都是1G, Consumerqueue 以主题为文件夹名字,这里面分别设置了消息队列对应的存储文件,每一个都是5.72,对于索引的文件大小都是400兆,这些设置的目的都是为了更好地使用内存映射的技术,提高文件的 IO 访问性能。

分别看一下内存映射相关的一些重要的类。

 

二.MappedFileQueue

image.png

第一个是 MappedFileQueue,这个类相当于 CommitLog 中的一个文件的队列,可以将其当做 CommitLog 的目录。这个类中重要的属性第一个是 storePath,是当前 CommitLog 目录的绝对磁盘路径。第二个 mappedFileSize,是每一个消息存储文件的大小,这个数据默认的是1024M(1G)。这里面还有一个集合CopyOnWriteArrayList<MappedFile> mappedFiles 就是文件的集合。还有一个专门的服务类,该服务类的作用主要是创建 MappedFile,当一个文件写满之后,会使用该服务类创建一个新的文件。这里面还存储了当前刷盘指针(flushedwhere = 0)以及当前数据提交的指针(committedwhere = 0)。这是MappedFileQueue 这个类的一些重要属性。在这个类中提供了很多查找MappedFile 的方法。

image.png比如根据时间进行查找,这叫做 getMappedFileByTime,这个方法提供了以时间查找最后进行操作的MappedFile 的文件。还有根据消息偏移量查找,还有查找最小偏移量,根据查找某一个文件的最小偏移量,还有获取存储文件的最大偏移量以及返回存储文件当前的指针,这些方法都是该类中主要的一些方法。在 RocketMQ 中为了提高文件的 IO 访问性能,用到了内存映射的技术,第一个重要的类就是MappedFileQueue,它对应的是 CommitLog 的文件的队列。

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
4月前
|
Arthas 存储 算法
深入理解JVM,包含字节码文件,内存结构,垃圾回收,类的声明周期,类加载器
JVM全称是Java Virtual Machine-Java虚拟机JVM作用:本质上是一个运行在计算机上的程序,职责是运行Java字节码文件,编译为机器码交由计算机运行类的生命周期概述:类的生命周期描述了一个类加载,使用,卸载的整个过类的生命周期阶段:类的声明周期主要分为五个阶段:加载->连接->初始化->使用->卸载,其中连接中分为三个小阶段验证->准备->解析类加载器的定义:JVM提供类加载器给Java程序去获取类和接口字节码数据类加载器的作用:类加载器接受字节码文件。
410 55
|
2月前
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
552 0
|
2月前
|
存储 缓存 NoSQL
内存管理基础:数据结构的存储方式
数据结构在内存中的存储方式主要包括连续存储、链式存储、索引存储和散列存储。连续存储如数组,数据元素按顺序连续存放,访问速度快但扩展性差;链式存储如链表,通过指针连接分散的节点,便于插入删除但访问效率低;索引存储通过索引表提高查找效率,常用于数据库系统;散列存储如哈希表,通过哈希函数实现快速存取,但需处理冲突。不同场景下应根据访问模式、数据规模和操作频率选择合适的存储结构,甚至结合多种方式以达到最优性能。掌握这些存储机制是构建高效程序和理解高级数据结构的基础。
190 1
|
2月前
|
存储 弹性计算 固态存储
阿里云服务器配置费用整理,支持一万人CPU内存、公网带宽和存储IO性能全解析
要支撑1万人在线流量,需选择阿里云企业级ECS服务器,如通用型g系列、高主频型hf系列或通用算力型u1实例,配置如16核64G及以上,搭配高带宽与SSD/ESSD云盘,费用约数千元每月。
166 0
|
6月前
|
分布式计算 算法 Java
|
10月前
|
传感器 人工智能 物联网
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发,以及面临的挑战和未来趋势,旨在帮助读者深入了解并掌握这些关键技术。
227 6
|
11月前
|
存储
共用体在内存中如何存储数据
共用体(Union)在内存中为所有成员分配同一段内存空间,大小等于最大成员所需的空间。这意味着所有成员共享同一块内存,但同一时间只能存储其中一个成员的数据,无法同时保存多个成员的值。
|
11月前
|
存储 C语言
数据在内存中的存储方式
本文介绍了计算机中整数和浮点数的存储方式,包括整数的原码、反码、补码,以及浮点数的IEEE754标准存储格式。同时,探讨了大小端字节序的概念及其判断方法,通过实例代码展示了这些概念的实际应用。
746 1
|
11月前
|
存储 弹性计算 算法
前端大模型应用笔记(四):如何在资源受限例如1核和1G内存的端侧或ECS上运行一个合适的向量存储库及如何优化
本文探讨了在资源受限的嵌入式设备(如1核处理器和1GB内存)上实现高效向量存储和检索的方法,旨在支持端侧大模型应用。文章分析了Annoy、HNSWLib、NMSLib、FLANN、VP-Trees和Lshbox等向量存储库的特点与适用场景,推荐Annoy作为多数情况下的首选方案,并提出了数据预处理、索引优化、查询优化等策略以提升性能。通过这些方法,即使在资源受限的环境中也能实现高效的向量检索。
418 1

热门文章

最新文章