前言
本文主要讨论时序数据库中常见的一种时间戳或者数值压缩方法:delta-of-delta 算法,可以极大地降低数据存储的成本和提高数据写入、查询的性能。
delta-of-delta 压缩时间戳是 Facebook Gorilla 论文中所提到的,论文地址:http://www.vldb.org/pvldb/vol8/p1816-teller.pdf。社区比较火热的 Prometheus TSDB 项目也是借鉴了 Facebook Gorilla 论文中的思路,可以实现很高的时序数据压缩率。
delta 时间戳压缩
时间戳一般采用 long 类型进行存储,需要占用 8byte 存储空间。最直接的优化就是存储时间戳的差值,这里需要起始时间戳和 delta 的最大范围阈值。有两种常用的实现思路:
- 存储相邻两个时间戳差值 Delta(n) = T(n) - T(n-1)
Unix时间戳 | Delta |
---|---|
1571889600000 | 0 |
1571889600010 | 10 |
1571889600025 | 15 |
1571889600030 | 5 |
1571889600040 | 10 |
- 存储与起始时间戳的差值 Delta(n) = T(n) - T(0)
Unix时间戳 | Delta |
---|---|
1571889600000 | 0 |