这是一个专注于 K 线(Kline)数据存储 和 窗口计算 的轻量级命令行时序数据库(TSDB)。本项目基于 Lua 开发,展示了高效的定长存储方案、位图索引以及灵活的聚合计算模型。
项目采用高度模块化的设计,各层职责分明:
- db (存储层):负责底层文件 I/O、元数据管理及数据物理定位。
- record (模型层):定义 Schema、单条记录(Record)以及批处理(Batch)逻辑。
- aggregate (计算层):负责时序数据的窗口运算与 MapReduce 抽象。
- tools (工具层):提供二进制处理、位运算及 CRC 校验等基础能力。
-
二进制持久化: 采用
string.pack/unpack进行打包,相比 JSON 或 CSV 显著节省磁盘空间并提升 I/O 速度。 -
$O(1)$ 随机读写: 利用定长记录与时间戳偏移量进行物理定位,实现了极速的数据检索。 -
位图索引 (Bitmask): 巧妙使用
nil_flags处理可选字段,优雅地解决了二进制定长存储中nil值的表示问题。
- 多窗口支持: 原生支持 Tumbling(滚动) 和 Sliding(滑动) 两种核心窗口模式。
- 易扩展的 MapReduce: 聚合逻辑高度抽象,用户可以轻松扩展自定义函数(如已内置的
sum,avg,lr线性回归等)。
- 单元测试: 提供完整的测试套件(
test/目录),覆盖从字节处理到 DataTable 逻辑的所有核心链路,确保底层逻辑的准确性。 - 数据健壮性: 具备自动补齐数据空洞(Gap Handling)的能力,在数据写入不连续时自动填充缺失记录,保证时间序列的完整性。
lua test/ATest.lua直接运行 lua TSDB.lua 查看命令说明。