跳转至

数据存储目录

根目录

VM 根目录,主要文件如下

.
|-- cache
|-- data       # 数据目录
|-- flock.lock # 锁文件,防止其他进行篡改
|-- indexdb    # 索引目录
|-- metadata
`-- snapshots  # 快照目录

数据目录

数据目录 data,最主要的就是 small 和 big 目录,这两个目录同时创建,结构是一样的

  • small 目录:内存中的数据先持久化此目录,压比例高,会定期检测判断是否满足 merge 条件,合并多个小文件。
  • big 目录:small 过大后会合并到 big 目录,压比例极高。
.
|-- big
|-- flock.lock
`-- small

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 进行多维检索。