数据存储目录
根目录
VM 根目录,主要文件如下
.
|-- cache
|-- data # 数据目录
|-- flock.lock # 锁文件,防止其他进行篡改
|-- indexdb # 索引目录
|-- metadata
`-- snapshots # 快照目录
数据目录
数据目录 data,最主要的就是 small 和 big 目录,这两个目录同时创建,结构是一样的
- small 目录:内存中的数据先持久化此目录,压比例高,会定期检测判断是否满足 merge 条件,合并多个小文件。
- big 目录:small 过大后会合并到 big 目录,压比例极高。
small 目录和 big 目录的存在,主要是兼顾近期数据读取和历史数据压缩的需求。
small 目录与 big 目录的作用是相似的
data
├── big # bigPartition 目录
│ ├── 2022_10 # Partion 目录,和 small 目录对应,并且是一起创建的,格式 YYYY_MM
│ │ ├── 1220340512_2352123_20221025065211.709_20221026104054.811_17213D4BBA9BB688
│ │ │ ├── index.bin
│ │ │ ├── metaindex.bin
│ │ │ ├── min_dedup_interval
│ │ │ ├── timestamps.bin
│ │ │ └── values.bin
│ │ ├── 124785216_611026_20221026103953.174_20221027023117.912_17213D4BBA9BE72F
│ │ │ ├── index.bin
│ │ │ ├── metaindex.bin
│ │ │ ├── min_dedup_interval
│ │ │ ├── timestamps.bin
│ │ │ └── values.bin
│ │ ├── tmp
│ │ └── txn
│ └── snapshots
├── flock.lock
└── small # smallPartition 目录
├── 2022_10 # Partion 目录,和 big 目录一起创建的
│ ├── 100_45_20221026221205.503_20221026221205.505_17213D4BBA9BD9EB
│ │ ├── index.bin
│ │ ├── metaindex.bin
│ │ ├── min_dedup_interval
│ │ ├── timestamps.bin
│ │ └── values.bin
# part 目录命令方式 数据点数_数据块数_最小时间_最大时间_纳秒转的 16 进制
│ ├── 104208_53764_20221027023632.913_20221027023642.149_17213D4BBA9BE775
│ │ ├── index.bin
│ │ ├── metaindex.bin
│ │ ├── min_dedup_interval
│ │ ├── timestamps.bin # 时间戳列数据
│ │ └── values.bin # value 列数据
│ ├── tmp # merge 或 flush 文件时的临时目录
│ └── txn # 事务目录,在 mergeParts 完成后,将 tmpPartPath 的 dstPartPath 的原子写入到 txn/%016X 文件中,然后开始执行重命名事务
└── snapshots
small 目录,按照月生成 partition 目录,比如 2021_09 目录;每个 partition 目录包括 partition 目录、临时目录、事物目录三类目录
内存中数据每刷一次盘,就会生成一个partition目录,如 5004_1251_20210916071840.019_20210916071929.037_16A53BF0BA13671D
5004
表示包括的数据行数(抓取的数据点数量)1251
数据块数20210916071840.019_20210916071929.037
表示此 partition 目录覆盖数据的时间戳范围,最小时间_最大时间16A53BF0BA13671D
目录生成的系统时间,纳秒时间戳的 16 进制。
缓存目录
索引目录,与数据目录不同的是,索引目录是由多个 table 目录组成,每个目录会根据保留周期迭代,并且完全自治。
indexdb
├── 172139EA5E64F6AF # 系统纳秒时间,并转换成 16 进制形式
│ ├── converted-to-v1.28.0
│ ├── flock.lock
│ ├── tmp
│ └── txn
├── 172139EA5E64F6B0 # tableName
│ ├── 1040434_4736_172139EA6198A61C # 索引 partition,命令方式:项目数量_数据块数_mergeidx
│ │ ├── index.bin
│ │ ├── items.bin
│ │ ├── lens.bin
│ │ ├── metadata.json
│ │ └── metaindex.bin
│ ├── 1059832_3985_172139EA61989297
│ │ ├── index.bin
│ │ ├── items.bin
│ │ ├── lens.bin
│ │ ├── metadata.json
│ │ └── metaindex.bin
│ ├── converted-to-v1.28.0 # 历史兼容版本
│ ├── flock.lock
│ ├── tmp # 与 small 目录的 tmp 作用相同
│ └── txn # 与 small 目录的 txn 作用相同
└── snapshots
关于 TSID:VM 在接收写数据后,会根据包含 metric 和 labels 的 MetricName 生成一个唯一标识 TSID,然后 metric + labels + TSID
作为索引 index, TSID + timestamp + value
作为数据 data。其中,索引部分主要是用于支持按照 label 或者 tag 进行多维检索。