项目结构

整个项目使用 Go 实现,所以遵循了一般 Go 项目的规则,下面是整个项目结构的简单说明:

├── aggregation           : 数据聚合,函数及表达式计算
├── app                   : broker、storage、standalone、cli 等runtime
│   ├── broker            : Broker 内部实现及整个 Broker 的运行时依赖
│   ├── standalone        : 单机模式运行时依赖
│   └── storage           : storage 内部实现与 运行时依赖
├── bin                   : 编译生成的文件,二进制包名称为 `lind`
├── cmd                   : main 函数
│   ├── cli               : 交互式命令行
│   ├── lind              : lind 二进制包
│   └── tools             : 命令行工具 
├── config                : 各组件启动时需要的配置项
├── constants             : 一些通用的常量定义
├── coordinator           : 分布式的协调者,包括 Metadata, State 及 Task 的管理,包含了 Broker, Storage 及 Master 等
├── docker                : docker image 构建
├── e2e                   : 集成和性能测试用例
├── flow                  : 数据查询流程接口
├── ingestion             : metric数据摄取入口
│   ├── common            : gzip handler、行解析等通用工具
│   ├── flat              : 原生格式接收器
│   ├── influx            : influxdb 数据转换到linmetric
│   └── proto             : PB 数据接收器 
├── internal              : 内部的一些工具包
│   ├── bootstrap         : 启动时初始化_internal数据库的方法
│   ├── client            : 访问Broker API Client
│   ├── concurrent        : 并发goroutine池
│   ├── conntrack         : grpc 与 tcp conn埋点钩子
│   ├── linmetric         : lindb自带的内部多值类型的sdk打点工具
│   |── mock              : 项目所用到的一些 Mock 工具实现
|   ├── monitoring        : 自带的系统层监控采集与native metrics pusher
│   └── server            : app 通用接口
├── kv                    : 底层的通用 KV 存储
├── metrics               : 所有监控指标定义
├── models                : 整个项目的 Model 定义
├── pkg                   : 整个项目通用工具包
│   ├── bit               : 位读写 │   ├── bufioutil         : 缓冲io工具包
│   ├── bufpool           : 存放buffer的sync pool
│   ├── collections       : float array、bit array 等数据结构
│   ├── encoding          : delta-bit-packing、zigzag 等编码工具包
│   ├── fasttime          : 毫秒级的时间,避免频繁的系统调用
│   ├── fileutil          : 常用的文件操作
│   ├── hostutil          : 获取机器状态的包
│   ├── http              : gin http server的通用方法
│   ├── lockers           : 文件锁
│   ├── logger            : zap logger
│   ├── ltoml             : toml文件解析与类型
│   ├── option            : shard 配置选项
│   ├── queue             : 持久化队列
│   ├── state             : etcd 操作工包
│   ├── stream            : 文件读取工具包
│   ├── strutil           : 字符串工具包
│   ├── timeutil          : 时间处理工具包
│   |── trie              : 紧凑型的trie树,用于string->int的存储
│   |── unique            : 全局唯一ID存储
│   └── validate          : 对 struct 进行校验的工具包
├── proto                 : protobuf
│   ├── gen               : protobuf 生成的golang code
│   ├── opentelemetry-v1  : open telemetry的protobuf文件,暂未利用
│   └── v1                : lindb内的proto buf 文件
├── query                 : 分布式的数据与元数据查询
│   ├── broker            : 计算节点的数据查询与聚合
│   ├── context           : 查询上下文
│   ├── operator          : 查询算子
│   ├── stage             : 查询 Stage
│   └── tracker           : 跟踪整个查询过程
├── replica               : broker数据写入以及storage层的复制
├── rpc                   : 内部通信的 RPC 
├── series                : 时间线迭代器、聚合器
│   ├── field             : field数据结构与聚合器
│   ├── metric            : metric校验与histogram工具类
│   └── tag               : tag数据结构
├── sql                   : SQL 解析
│   ├── grammar           : antlr4生成的语法解析器
│   └── stmt              : SQL statement 
├── tsdb                  : 整个 Time Series 存储引擎 
│   ├── indexdb           : 索引存储
│   ├── memdb             : LSM 树的内存数据库
│   ├── metadb            : metric 元数据
│   ├── tblstore          : tsdb与 KV 存储的读写交互,包括索引文件与数据文件
│   └── template          : 利用模板生成一些通用的代码
└── web                   : lindb admin页面的前端项目