首页
/ HoraedB 项目中的清单文件格式优化实践

HoraedB 项目中的清单文件格式优化实践

2025-06-28 21:55:51作者:尤峻淳Whitney

背景介绍

在时序数据库HoraedB中,清单(manifest)文件用于存储SST文件的元数据信息。当前版本使用Protocol Buffers(protobuf)作为清单文件的序列化格式,但在实际使用中发现了一些性能问题。

现有问题分析

protobuf格式虽然具有良好的模式演化能力,但在HoraedB的特定场景下存在以下不足:

  1. 空间效率低:对于包含大量SST文件元数据的列表,protobuf会为每个结构体重复序列化元信息,造成存储空间浪费。

  2. 增量更新困难:整个清单文件作为一个protobuf消息序列化,使得增量更新变得复杂,每次更新都需要重新序列化整个文件。

优化方案设计

经过社区讨论,决定采用自定义二进制格式来优化清单文件的存储效率。新设计的格式具有以下特点:

文件整体结构

| 魔数(u32) | 版本号(u8) | 标志位(u8) | 记录总长度(u64) | 记录(N)... |
  • 魔数:用于验证数据源的合法性
  • 版本号:支持未来的模式演化
  • 标志位:保留用于扩展功能,如压缩支持
  • 记录总长度:用于完整性校验

记录结构

每条记录采用固定长度的自描述格式:

| ID(u64) | 时间范围(i64×2) | 文件大小(u32) | 行数(u32) |

这种设计使得每条记录的元数据仅占用28字节,相比protobuf格式显著减少了存储空间。

实现细节

合并流程优化

新的清单文件合并流程简化为:

  1. 从对象存储下载现有清单文件
  2. 将增量SST文件元数据转换为二进制记录
  3. 直接追加到现有清单文件末尾
  4. 更新文件头部的记录总长度字段
  5. 上传回对象存储覆盖原文件

性能考虑

每条记录28字节的设计使得单个清单文件可以高效存储大量SST文件元数据。理论上,1GB的清单文件可以存储约3800万条SST文件记录。

版本兼容性处理

通过版本号字段支持未来的模式演化。当检测到版本升级时,系统可以自动将旧格式清单转换为新格式,确保向后兼容。

实际效果

基准测试表明,新格式在序列化100条增量SST记录到包含1000条记录的现有清单时,性能表现稳定,处理时间在微秒级别。

总结

HoraedB通过优化清单文件格式,显著提升了存储效率和更新性能。这种自定义二进制格式的设计不仅解决了protobuf在特定场景下的不足,还为未来的功能扩展预留了空间。这种优化对于需要处理海量时序数据的数据库系统尤为重要,能够有效降低存储开销和提高元数据管理效率。

登录后查看全文

项目优选

收起
leetcodeleetcode
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
51
15
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
566
410
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
124
208
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
75
145
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
428
38
MateChatMateChat
前端智能化场景解决方案UI库,轻松构建你的AI应用,我们将持续完善更新,欢迎你的使用与建议。 官网地址:https://matechat.gitcode.com
693
91
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
98
253
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
298
1.03 K
Dora-SSRDora-SSR
Dora SSR 是一款跨平台的游戏引擎,提供前沿或是具有探索性的游戏开发功能。它内置了Web IDE,提供了可以轻轻松松通过浏览器访问的快捷游戏开发环境,特别适合于在新兴市场如国产游戏掌机和其它移动电子设备上直接进行游戏开发和编程学习。
C++
20
4
CS-BooksCS-Books
🔥🔥超过1000本的计算机经典书籍、个人笔记资料以及本人在各平台发表文章中所涉及的资源等。书籍资源包括C/C++、Java、Python、Go语言、数据结构与算法、操作系统、后端架构、计算机系统知识、数据库、计算机网络、设计模式、前端、汇编以及校招社招各种面经~
96
13