Skip to content

peiliping/TSDB

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

100 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TSDB

这是一个专注于 K 线(Kline)数据存储窗口计算 的轻量级命令行时序数据库(TSDB)。本项目基于 Lua 开发,展示了高效的定长存储方案、位图索引以及灵活的聚合计算模型。

项目核心优势

1. 架构清晰

项目采用高度模块化的设计,各层职责分明:

  • db (存储层):负责底层文件 I/O、元数据管理及数据物理定位。
  • record (模型层):定义 Schema、单条记录(Record)以及批处理(Batch)逻辑。
  • aggregate (计算层):负责时序数据的窗口运算与 MapReduce 抽象。
  • tools (工具层):提供二进制处理、位运算及 CRC 校验等基础能力。

2. 高效存储方案

  • 二进制持久化: 采用 string.pack/unpack 进行打包,相比 JSON 或 CSV 显著节省磁盘空间并提升 I/O 速度。
  • $O(1)$ 随机读写: 利用定长记录与时间戳偏移量进行物理定位,实现了极速的数据检索。
  • 位图索引 (Bitmask): 巧妙使用 nil_flags 处理可选字段,优雅地解决了二进制定长存储中 nil 值的表示问题。

3. 完备的计算模型

  • 多窗口支持: 原生支持 Tumbling(滚动)Sliding(滑动) 两种核心窗口模式。
  • 易扩展的 MapReduce: 聚合逻辑高度抽象,用户可以轻松扩展自定义函数(如已内置的 sum, avg, lr 线性回归等)。

4. 严谨的工程化实现

  • 单元测试: 提供完整的测试套件(test/ 目录),覆盖从字节处理到 DataTable 逻辑的所有核心链路,确保底层逻辑的准确性。
  • 数据健壮性: 具备自动补齐数据空洞(Gap Handling)的能力,在数据写入不连续时自动填充缺失记录,保证时间序列的完整性。

快速开始

运行测试

lua test/ATest.lua

命令行使用

直接运行 lua TSDB.lua 查看命令说明。

About

A Simple TimeSeriesDatabase For CMD

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages