go-diskqueue数据结构

2023-11-05

一、本文目的是介绍go-diskqueue

go-diskqueue,应用于nsq:https://github.com/nsqio/nsq,作用是存储内存装不下的消息到磁盘,并支持读取。

go-diskqueue:https://github.com/yudongdai/go-diskqueue/blob/master/diskqueue.go(注释版)

 

二、文件的组织

2.1文件的组成

2.1.1 元数据,文件名格式如下:{TopicName}.diskqueue.meta.dat,每个Topic只会存在1个文件
2.1.2 文件数据,文件名格式如下:{TopicName}.diskqueue.{num}.dat,因为限制了单文件大小,每个Topic只会存在多个文件,当一个文件按编号递增
 

2.2数据结构

2.2.1元数据文件,记录着写了多少消息到磁盘,写到哪个编号文件了,读到哪个编号文件了,读的偏移量:

 

_, err = fmt.Fprintf(f, "%d\n%d,%d\n%d,%d\n",
    d.depth, //落地消息个数
    d.readFileNum, d.readPos, //读文件编号,读文件的当前偏移量
    d.writeFileNum, d.writePos) //文件编号,写文件当前偏移量

 

2.2.2数据文件,格式比较简单。限制单文件的大小,当文件大小达到阈值时,文件数据编号自增1:

读取数据时,先读取消息长度,再读内容。

	// 先读出消息的大小
	err = binary.Read(d.reader, binary.BigEndian, &msgSize)
	if err != nil {
		d.readFile.Close()
		d.readFile = nil
		return nil, err
	}

总结

1.go-diskqueue代码量只有600多行,有比较多精妙设计,值得一看。

2.fsync在diskqueue中也会应用,尤其是元数据落地。

3.注意大小端问题

 

原文出自:https://blog.csdn.net/daiyudong2020/article/details/108250750

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

go-diskqueue数据结构 的相关文章

  • 100行代码实现加权负载均衡算法(WRR)

    轮询算法round robin是很基础的负载均衡算法 实际应用中wrr更为常见 但一般不需要自己实现 因为一般需要rr的场景 都已经在基础设施层面进行了支持 比如lvs或nginx通过配置即可实现 但业务上偶尔也需要自己实现负载均衡 所以有
  • Mysql Group Replication 简介及单主模式组复制配置

    一 Mysql Group Replication简介 Mysql Group Replication MGR 是一个全新的高可用和高扩张的MySQL集群服务 高一致性 基于原生复制及paxos协议的组复制技术 以插件方式提供一致数据安全保
  • 互联网高可用架构探讨

    高可用指标与问题 高可用 英文单词High Availability 缩写HA 它是分布式系统架构设计中一个重要的度量 业界通常用多个9来衡量系统的可用性 如下表 既然有可用率 有一定会存在不可用的情况 系统宕机一般分为有计划的和无计划的
  • 一文了解电商大促系统的高可用保障思路

    本文面向受众可以是运营 可以是产品 也可以是研发 测试人员 作者希望通过如下思路 知历史 gt 清家底 gt 明目标 gt 定战略 gt 做战术 gt 促成长 帮助大家能够了解电商大促系统的高可用保障 减少哪些高深莫测的黑话和高大尚的论调
  • Elasticsearch高可用和路由规则

    文章目录 Lucene Elasticsearch ELK stack Elasticsearch集群和分片路由 高可用 Lucene 迄今为止最先进 性能最好的 功能最全的搜素引擎库 Elasticsearch 基于Apache Luce
  • 【系统架构】什么是集群?为什么要使用集群架构?

    什么是集群 为什么要使用集群架构 1 什么是集群 2 为什么要使用集群 2 1 高性能 2 2 价格有效性 2 3 可伸缩性 2 4 高可用性 2 5 透明性 2 6 可管理性 2 7 可编程性 3 集群的常见分类 3 1 负载均衡集群 3
  • ES高可用及集群管理

    ES高可用及集群管理 Elasticsearch 是一个分布式 高扩展 高实时 RESTful 风格的搜索与数据分析引擎 服务可用性 允许有节点停止服务 数据可用性 部分节点丢失 不会丢失数据 水平扩展 集群容错 一 分片 1 什么是分片及
  • 架构修炼-10:高并发设计

    一 如何衡量高并发的系统性能 1 吞吐量Throughput 2 响应延迟Response Delay 二 性能优化目标 1 缩短响应时间 2 提高系统并发数 提升吞吐量 3 系统处理合理状态 机器利用率 随着系统压力增加 X坐标 在线业务
  • go-diskqueue数据结构

    一 本文目的是介绍go diskqueue go diskqueue 应用于nsq https github com nsqio nsq 作用是存储内存装不下的消息到磁盘 并支持读取 go diskqueue https github co
  • Centos7 安装redis集群哨兵模式

    一 整体哨兵模式规划 redis节点规划 6381 master 6382 slave 6383 slave 6384 slave sentinel模式节点规划 26381 26382 二 Redis主从安装步骤 1 单机版Redis安装
  • MySQL 异步复制源自动故障转移

    1 异步复制源架构 1 1基于主从复制的异步复制源 从MySQL 8 0 22开始支持异步连接故障转移机制 我们可以在一套主从复制架构的基础上 创建一个异步复制连接的Replica副本 当主从复制Source发生意外宕机 业务提升Repli
  • 分布式服务高可用实现:复制

    1 为什么需要复制 我们可以考虑如下问题 当数据量 读取或写入负载已经超过了当前服务器的处理能力 如何实现负载均衡 希望在单台服务器出现故障时仍能继续工作 这该如何实现 当服务的用户遍布全球 并希望他们访问服务时不会有较大的延迟 怎么才能统
  • linux管理控制面板--可视化管理linux

    市面上主要的网站主机分为三大类 具体差异简单说明 虚拟主机 也是大家口中说的 主机空间 可定制化低 适合纯小白和新手 完全不懂技术 说明白点 就是一台云服务器分割空间和内存形成的主机空间 可以用来搭建网站 但是管理权限受到主机厂商一些限制
  • 物联网上行数据实现tcp 负载均衡和高可用架构 nginx + keepalived方案

    文章目录 需求介绍 架构设计 具体配置 nginx 配置 keepalived 配置 需求介绍 之前有做过一个物联网设备接入的项目 项目中会启动一个数据接入服务 TCP server 用来接收传感器设备上传的数据 数据接入服务需要分布式部署
  • keepalived双主模式(互为主备)

    考虑到keepalived高可用 备节点的机器基本上属于空闲状态 很浪费硬件资源 所以我们可以让keepalived互为主备 跑多个实例 第一个节点配置 vim etc keepalived keepalived conf global d
  • 微服务架构跨库分页解决的四种方案

    微服务架构是一项在云中部署应用和服务的新技术 大部分围绕微服务的争论都集中在容器或其他技术是否能很好的实施微服务 而红帽说API应该是重点 微服务可以在 自己的程序 中运行 并通过 轻量级设备与HTTP型API进行沟通 关键在于该服务可以在
  • 高可用:如何实现消息队列的 HA?

    管理学上有一个木桶理论 一只水桶能装多少水取决于它最短的那块木板 这个理论推广到分布式系统的可用性上 就是系统整体的可用性取决于系统中最容易出现故障 或者性能最低的组件 系统中的各个组件都要进行高可用设计 防止单点故障 消息队列也不例外 本
  • 实现基于 Keepalived 和 Nginx 的高可用架构

    目录 前言 1 高可用性简介 2 准备服务器和软件 3 高可用的配置 主从配置 3 1 配置 etc keepalived keepalived conf文件 3 2 配置 usr local src nginx check sh脚本文件
  • 高可用:如何实现消息队列的 HA?

    管理学上有一个木桶理论 一只水桶能装多少水取决于它最短的那块木板 这个理论推广到分布式系统的可用性上 就是系统整体的可用性取决于系统中最容易出现故障 或者性能最低的组件 系统中的各个组件都要进行高可用设计 防止单点故障 消息队列也不例外 本
  • 实现基于 Keepalived 和 Nginx 的高可用架构

    目录 前言 1 高可用性简介 2 准备服务器和软件 3 高可用的配置 主从配置 3 1 配置 etc keepalived keepalived conf文件 3 2 配置 usr local src nginx check sh脚本文件

随机推荐

  • c++基础练习题三

    1 按照商品价格降序输出商品信息 include
  • 【TensorRT】TensorRT 部署Yolov5模型(C++)

    TensorRT 部署Yolov5模型C 源码地址 1 TensorRT部署模型基本步骤 1 1 onnx模型转engine 1 2 读取本地模型 1 3 创建推理引擎 1 4 创建推理上下文 1 5 创建GPU显存缓冲区 1 6 配置输入
  • 计算机最高单价公式,CFA考试中计算器的三种最高频率的用法

    原标题 CFA考试中计算器的三种最高频率的用法 CFA考试中使用计算机的频率还是比较多的 但是你知道使用CFA考试中使用计算机最高频率的使用方法你知道吗 下边有小跃给大家分享一下在CFA考试中计算器的三种最高频的用法 CFA考试时只允许使用
  • 在OpenCV中使用Canny边缘检测

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 边缘检测是非常常见和广泛使用的图像处理 对于许多不同的计算机视觉应用非常必要 如数据提取 图像分割 在更细粒度的特征提取和模式识别中 它降低了图像中的噪声和细节数量 但保
  • dos进入mysql不记得密码_windos mysql 忘记密码,无密码登录,重新登录

    上一节的MySQL的配置安装里 并没有用到配置文件my ini 那在MYSQL8 0 13如何解决密码重置问题呢 我去网上搜了好多的资料都是改配置文件my ini的 后来终于找到了一条命令 操作步骤如下 1 打开命令窗口cmd 输入命令 n
  • Android开发学习【简单控件】

    Android开发学习 Day01 Android onCreate 详解 简单控件 文本显示 设置文本内容方式 设置文本的大小 设置文本的颜色 设置视图的宽高 直接设置 在代码中设置视图宽高 设置视图间距 设置视图的对齐方式 线性布局Li
  • 【深入理解C++】内存布局

    关于 C 的内存布局 网上说法不一 有人将其分为 4 4 4 区 也有人将其分为 5 5 5 区 不同的人分成的 5
  • 什么是JWT?

    在HTTP接口调用的时候 服务端经常需要对调用方做认证 以保证安全性 一种常见的认证方式是使用JWT Json Web Token 采用这种方式时 经常在header传入一个authorization字段 值为对应的jwt token 或者
  • python调用hive脚本_python 中写hive 脚本

    1 直接执行 sql脚本 import numpy as np import pandas as pd import lightgbm as lgb from pandas import DataFrame from sklearn mod
  • wkhtmltopdf 实现html 文档对象转换为pdf 文件核心功能代码

    环境说明 环境 windows10 客户端软件 wkhtmltopdf 记得配置wkhtmltopdf 全局环境变量 相关的安装步骤可以baidu或者google wkhtmltopdf 安装包已经上传csdn Java 核心功能代码 添加
  • javaweb 如何在前端根据数据画出图像曲线

    一个实现画板的程序 与我的项目没啥关系 发现一个实现图表的js程序 chartjs官网 我一会儿得学学 echarts的js的实例 唉 找不到一个好的方法 看了看echarts的官方文档 发现echarts确实非常强悍相比如chartjs来
  • 龙书笔记

    1 我们可以设置第四个参数w 当w设置为1时 为了让点可以恰当的转变 当w设置为0时 为了防止向量被平移 2 一个平面 n d 可以被当做一个4d向量来交换 将这个4D向量乘期望的变换矩阵的逆矩阵就可以了 3 顶点操作 并非所有的显卡都支持
  • 小程序练手

    上个星期学了一下小程序 然后写了一个项目练练手 主要实现了三个功能 实现文件的上传功能 实现评论功能 实现展示功能 这里记录一下云开发几个重要的点 首先的是文件的上传并预览 wxml
  • MYSQL02高级_目录结构、默认数据库、表文件、系统独立表空间

    文章目录 MySQL目录结构 查看默认数据库 MYSQL5 7和8表文件 系统 独立表空间 MySQL目录结构 如何查看关联mysql目录 root mysql8 find name mysql var lib mysql var lib
  • SpringSecurity学习笔记(九)RememberMe进阶

    参考视频 编程不良人 前面我们介绍了rememberMe的实现原理 从中我们可以思考这样一个问题 如果我们的cookie被非法用户获取 然后携带这个cookie进行访问我们的项目中的内容 就会导致非法用户登录 这个问题怎么解决呢 Remem
  • MySQL 字符串函数:字符串截取

    MySQL 字符串函数 字符串截取 MySQL 字符串截取函数 left right substring substring index 还有 mid substr 其中 mid substr 等价于 substring 函数 substr
  • linux 新建用户无 .profile 问题

    1 新建一个用户 其家目录下面默认生成什么文件由 etc skel 目录决定 就是 这个目录下面有什么新建用户后家目录就生成什么 2 新建一个用户可以由 d 参数指定家目录 如 useradd d home test u 500 g ora
  • 微信小程序wx.getUserInfo授权获取用户信息(头像、昵称)

    这个接口只能获得一些非敏感信息 例如用户昵称 用户头像 经过用户授权允许获取的情况下即可获得用户信息 至于openid这些 需要调取wx login来获取 index wxml
  • VS2013使用技巧汇总

    1 Peek View 在不新建TAB的情况下快速查看 编辑一个函数的代码 以前要看一个函数的实现 需要在使用的地方点击F12跳转到该函数 实际上这是很浪费时间的 VS2013Peek View便解决了这个问题 在光标移至某个函数下 按下a
  • go-diskqueue数据结构

    一 本文目的是介绍go diskqueue go diskqueue 应用于nsq https github com nsqio nsq 作用是存储内存装不下的消息到磁盘 并支持读取 go diskqueue https github co