You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QuestDB数据文件存储特性与压缩机制相关技术咨询

QuestDB磁盘占用测试及相关问题解答

测试场景说明

我模拟了5000万条数据以查看数据文件占用的磁盘空间,每写入10条数据会额外写入value2和str2两个字段,模拟代码如下:

while (j<=50000000) {
    sender.metric("xush").tag("tagName", "tag1").field("value1", 100).field("str1", "hello");
    if (j % 10 == 0) {
        sender.field("value2", 100).field("str2", "hello");
    }
  sender.$(beginTs);
    sender.flush();
    j++;
}

文件磁盘占用情况如下:

[root@idb23 2021-11-01T00]# du -hs ./*
382M    ./timestamp.d
191M    ./tagName.d
668M    ./str1.d
382M    ./str1.i
239M    ./str2.d
382M    ./str2.i
191M    ./value1.d
191M    ./value2.d

问题解答

  • 关于.i文件的作用:.i是字符串类型列的偏移量索引文件,存储了字符串在对应.d文件中的位置偏移信息,用来快速定位任意行的字符串内容,不需要遍历整个.d文件就能完成字符串读取。
  • 空值占用空间的问题:该情况属实。QuestDB的列存储设计为定长列每行占用固定空间,变长列的偏移量也为定长存储,所以即使某行该字段为空,也会在列文件中预留对应长度的占位空间,和有效值占用相同的空间大小,所以测试里value2只有1/10行有值,但.d文件大小和全量写入的value1.d完全一致。
  • 固定值字段空间浪费的问题:这是原生列存储的常规设计,你的使用方式没有问题。如果要优化这种场景,可以把固定值的字段调整为标签,或者业务侧自行做冗余裁剪,QuestDB本身目前不会对同列重复值做自动去重存储。
  • 压缩机制相关问题:QuestDB支持数据压缩,你测试的是未开启压缩的原始存储占用。你可以在建表时指定压缩策略,或者在配置文件中开启分区自动压缩,压缩后存储空间会有明显下降,相比其他时序数据库的压缩比处于同一水平。

内容的提问来源于stack exchange,提问作者yiwojiu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 03:06:03