TDengine 检测数据最佳压缩算法工具,助你一键找出最优压缩方案

简介: 在使用 TDengine 存储时序数据时,压缩数据以节省磁盘空间是至关重要的。TDengine 支持用户根据自身数据特性灵活指定压缩算法,从而实现更高效的存储。然而,如何选择最合适的压缩算法,才能最大限度地降低存储开销?为了解决这一问题,我们特别推出了一个实用工具,帮助用户快速判断并选择最适合其数据特征的压缩算法。

在使用 TDengine 存储时序数据时,压缩数据以节省磁盘空间是至关重要的。TDengine 支持用户根据自身数据特性灵活指定压缩算法,从而实现更高效的存储。然而,如何选择最合适的压缩算法,才能最大限度地降低存储开销?为了解决这一问题,我们特别推出了一个实用工具,帮助用户快速判断并选择最适合其数据特征的压缩算法。

本工具通过分析样本数据,提供最佳压缩率的检测结果,并同时输出与之相关的两个关键性能指标:写入速度和查询速度。由于写入过程中涉及数据压缩,压缩效率越高,写入速度越快;而查询过程中则需要解压数据,解压效率越高,查询速度越快。借助这些指标,用户可以根据实际需求,在存储效率与访问性能之间找到最佳平衡,选择最适合自己数据的压缩算法。

下载和安装

  1. 本工具为开源工具,使用 python 编写
  2. 工具下载地址:https://github.com/taosdata/TDengine/tree/3.0/tools/auto/testCompression
  3. 本工具为绿色软件,下载后即可使用,无需安装

使用指南

文件说明

  1. testCompression.py:主程序文件,运行时需依赖 json/template.json。
  2. json 目录: 存放运行 taosBenchmark 所需的 JSON 和 CSV 文件。
  3. json/tempalte.json:taosBenchmark 用于生成不同二级压缩算法的模板文件,文件名固定不可修改,格式与使用方法详见官网文档: https://docs.taosdata.com/reference/tools/taosbenchmark/。模板文件中使用宏 @COMPRESS 表示压缩算法名。支持的四种压缩算法分别为:zlib、xz、zstd、lz4,以及 disabled(关闭二级压缩)。
  4. d0_10w.csv.zip: 测试样本数据文件(10 万条数据)。使用前需解压至当前目录,在 template.json 中有引用。
  5. query.json:报告中 query-QPS 指标的来源,通过 taosBenchmark 测试查询性能,使用可详见官网taosBenchmark 使用说明。
  6. generate.json:配置文件用于通过 taosBenchmark 生成样例数据 d0_10w.csv。可以修改此 json 生成更大规模的数据集(如 100 万或更多)。

使用步骤

  1. 前置条件:
    1. 确认已安装 TDengine 3.3.2.0 及以上版本
    2. 确认已安装 python3
    3. 确认已安装 TDegnine 的 python3 连接器 taospy
    4. 确认 taosd 服务已启动,执行 taos 可正常连接 TDengine
    5. 确认 taosBenchmark(安装包中自带) 能运行
  2. 进入仓库源码目录 testCompression
  3. 解压 json\d0_10w.csv.zip 到当前 json 目录,确认 d0_10w.csv 在 json 目录下存在
  4. 在 testCompression 目录下执行 python3 ./testCompression.py 运行主程序启动检测
  5. 输出测试报告,测试完成。历史测试报告记录在 ./result.txt
    操作步骤:

    # 安装 TDengine python 连接器
    pip3 install taospy
    # 下载 TDengine 开源代码仓库
    git clone https://github.com/taosdata/TDengine.git
    # 进入工具目录
    cd TDengine/tools/auto/testCompression
    # 解压测试样本数据集
    unzip json/d0_10w.csv.zip -d ./json/
    # 运行主程序
    python3 testCompression.py
    # 查看测试报告
    cat ./result.txt
    

    输出报告

    为了检测更精准,在上一步示例操作中把 tempalte.json 文件中子表数 childtable_count 从 1 改为 10 ,数据规模扩大 10 倍到 100w 后得到的检测数据如下:
    数据分布说明:100w 数据是把 csv 文件中 10w 数据复制出 10 份放到 10 个子表中的
    af12121e6e2b29b4fe8bfea3436f5693_b8a23a95-d682-4078-95ad-0b366f1784c0.png
    从结果可以看出,此样本数据下最好的 xz 压缩算法与最差的 lz4 之间压缩率差距还是很大的。

    格式说明:
    1.第一行括号中的时间为测试开始时间,最后一行为测试完成时间。
    2.2 ~ 4 行是记录 taosBenchmark json 文件中的几个重要信息,VGROUPD 数量,子表数量及生成子表行数。
    3.下面 5 ~ 10 行为报告内容,各列如下:
    No: 序号
    compress: 压缩算法
    dataSize: 磁盘上压缩后数据文件大小
    rate: 压缩率
    writeSpeed: 写入速度 (单位:写入行数/每秒)
    query-QPS: 查询 QPS(单位: 查询请求数/每秒) ,查询 sql 可在 json/query.json 中指定
    4.重点说下 rate (压缩率)的计算:
    分母:
    1)对于固定长度数据类型,分母即约定的长度 bool ( 1 字节)tinyint ( 1 字节) smallint ( 2 字节) int ( 4 字节) 等
    2)对于可变长度数据类型,如 varchar, binary , nchar 等,分母是在建表时创建字段时指定的长度,如 varchar(12) 即 12 字节
    分子:压缩后数据的实际大小
    此压缩率是以超级表为统计单位,统计的是超级表及其所有子表。

    更换样本

    更换为自己的样本数据,需要修改以下几处:
    a.更换 CSV 文件
    若你的数据已在 TDegnine 中,可以通过 taos-CLI 工具导出。
    重点强调下,一个 csv 文件中只能存放一张子表数据。
    选择一个最具代表数据特征的子表,假设为 d0,可以使用 select * from d0 >> d0.csv 命令完成导出,导出后的 csv 需删除第一行(第一行是列名, 非数据,需删除)。
    步骤如下:

    j# taos-CLI 中导出表数据到 csv 
    select * from d0 >> d0.csv
    # shell 中删除 csv 首行
    sed -i '1d' d0.csv
    

b.template.json 中做相应修改

1. "prepared_rand": 100000  一定要改为大于或等于你的 CSV 文件行数
2. "sample_file": "./json/d0_10w.csv"  改成你 csv 文件路径
3. "use_sample_ts": "yes",   如果你的 csv 文件中第一列是时间主列,保持 yes 不动,即写入数据的时间使 用 csv 文件中的第一列时间。如果你的 csv 文件没有时间列的,改成 no,由 taosBenchmark 帮你生成时间列,生成时间的开始时间由"start_timestamp" 指定,步长由 "timestamp_step" 指定,每个子表生成的记录数由 "insert_rows" 指定。
4. "childtable_count": 1, CSV 文件写入到几个子表中,每个子表写入数据都是和 CSV 中数据是相同的,填写你期望的数量。
5. "columns": 更换成与你 CSV 文件中数据相匹配的列类型

示例:
如你的 CSV 文件有 100 万行, 你希望能把写入数据规模扩大 10 倍,那按照如下黄色背景标记地方修改即可:

j{
    "filetype": "insert",
    ...
    "prepared_rand": 1000000,
    "databases": [
        {
            "dbinfo": {
                "name": "dbrate",
                ...
            },
            "super_tables": [
                {
                    "name": "meters",
                    "childtable_count": 10,
                    "childtable_prefix": "d",
                    "insert_rows": 1000000,
                    ...
                }
            ]
        }
    ]
}

检测方法

  1. 整体检测
    这种方式是通过按用户实际建表结构和实际数据进行整体压缩率测试,上述示例即属于这种,一个 CSV 文件中混合着表的所有数据类型,对所有数据类型整体上评估最佳压缩算法。该方法优点是操作简单,检测速度快,但却无法针对不同数据类型的列分别优化,可能会忽略各列数据类型对应的最佳压缩算法。
  2. 单数据列检测
    单数据列检测方式将用户实际建表中的所有列按数据类型分组,例如,如果表中包含四种数据类型,则分为四组,每组分别进行一次测试。该方法的优势在于,CSV 文件中仅保留时间列和指定的数据类型列,使得检测结果更加精确,能够准确找到该数据类型的最佳压缩率。但其缺点是需要进行多轮操作,增加了测试的复杂性和时间成本。

    常见问题

  3. 我的数据样本应该多大合适?
    原则上,数据越大,检测压缩率越准确。建议 CSV 文件的行数不少于 1 万,写入数据库的总行数不少于 100 万。通过配置多个子表写入,可以进一步放大样本数量,提升测试的精度。
  4. 我已知某列最佳压缩算法,不想再每轮测试中再改变,怎么办?
    我们的目标是找出每列数据的最佳压缩算法。当已知某列的最佳压缩算法时,可在 template.json 中直接用具体算法名替换 @COMPRESS 宏,这样在测试过程中,该列的压缩算法将保持不变。
  5. TDengine 都支持哪些压缩算法?
    压缩算法支持列表请参考官网:https://docs.taosdata.com/reference/taos-sql/compress/
  6. 如何在 template.json 中定义数据类型?
    在 csv 测试样本数据中,每一列数据都需要在 template.json 中声明数据类型。可参考 taosBenchmark 使用说明 最后一节的“数据类型书写对照表”,确保数据类型定义正确:https://docs.taosdata.com/reference/tools/taosbenchmark/

    结语

    通过该工具,用户可以更高效地测试并选择最适合自身数据的压缩算法,不仅提升存储效率,还能在性能和存储之间取得最佳平衡。无论是整体压缩测试还是单数据列检测,该工具都为不同需求提供了灵活的方案,帮助用户快速找到解决方案。同时,如果您在使用过程中有任何疑问或遇到问题,欢迎访问我们的开源社区:https://github.com/taosdata 与社区成员互动,或发送邮件至 kjduan@taosdata.com 与我们联系。
目录
相关文章
|
28天前
|
传感器 人工智能 监控
智慧工地 AI 算法方案
智慧工地AI算法方案通过集成多种AI算法,实现对工地现场的全方位安全监控、精准质量检测和智能进度管理。该方案涵盖平台层、展现层与应用层、基础层,利用AI技术提升工地管理的效率和安全性,减少人工巡检成本,提高施工质量和进度管理的准确性。方案具备算法精准高效、系统集成度高、可扩展性强和成本效益显著等优势,适用于人员安全管理、施工质量监控和施工进度管理等多个场景。
|
1月前
|
传感器 人工智能 监控
智慧电厂AI算法方案
智慧电厂AI算法方案通过深度学习和机器学习技术,实现设备故障预测、发电运行优化、安全监控和环保管理。方案涵盖平台层、展现层、应用层和基础层,具备精准诊断、智能优化、全方位监控等优势,助力电厂提升效率、降低成本、保障安全和环保合规。
智慧电厂AI算法方案
|
18天前
|
存储 人工智能 自然语言处理
Delta-CoMe:清华联合OpenBMB等高校开源的新型增量压缩算法
Delta-CoMe是由清华大学NLP实验室联合OpenBMB开源社区、北京大学和上海财经大学提出的新型增量压缩算法。该算法通过结合低秩分解和低比特量化技术,显著减少了大型语言模型的存储和内存需求,同时保持了模型性能几乎无损。Delta-CoMe特别适用于处理数学、代码和多模态等复杂任务,并在推理速度上有所提升。
55 6
Delta-CoMe:清华联合OpenBMB等高校开源的新型增量压缩算法
|
5天前
|
存储 算法 数据挖掘
重磅发布 | OpenSearch推出向量检索GPU图算法方案并支持GPU规格售卖
OpenSearch向量检索版推出了面向企业开发者的GPU图算法方案(CAGRA算法),支持客户直接购买GPU规格节点,是国内首家支持GPU规格的向量检索产品。
49 12
|
28天前
|
机器学习/深度学习 传感器 人工智能
智慧无人机AI算法方案
智慧无人机AI算法方案通过集成先进的AI技术和多传感器融合,实现了无人机的自主飞行、智能避障、高效数据处理及多机协同作业,显著提升了无人机在复杂环境下的作业能力和安全性。该方案广泛应用于航拍测绘、巡检监测、应急救援和物流配送等领域,能够有效降低人工成本,提高任务执行效率和数据处理速度。
智慧无人机AI算法方案
|
25天前
|
存储 关系型数据库 分布式数据库
PolarDB的PolarStore存储引擎以其高效的索引结构、优化的数据压缩算法、出色的事务处理能力著称
PolarDB的PolarStore存储引擎以其高效的索引结构、优化的数据压缩算法、出色的事务处理能力著称。本文深入解析PolarStore的内部机制及优化策略,包括合理调整索引、优化数据分布、控制事务规模等,旨在最大化其性能优势,提升数据存储与访问效率。
25 5
|
28天前
|
机器学习/深度学习 监控 算法
基于反光衣和检测算法的应用探索
本文探讨了利用机器学习和计算机视觉技术进行反光衣检测的方法,涵盖图像预处理、目标检测与分类、特征提取等关键技术。通过YOLOv5等模型的训练与优化,展示了实现高效反光衣识别的完整流程,旨在提升智能检测系统的性能,应用于交通安全、工地监控等领域。
|
1月前
|
传感器 人工智能 监控
智慧化工厂AI算法方案
智慧化工厂AI算法方案针对化工行业生产过程中的安全风险、效率瓶颈、环保压力和数据管理不足等问题,通过深度学习、大数据分析等技术,实现生产过程的实时监控与优化、设备故障预测与维护、安全预警与应急响应、环保监测与治理优化,全面提升工厂的智能化水平和管理效能。
118 0
智慧化工厂AI算法方案
|
1月前
|
存储 编解码 负载均衡
数据分片算法
【10月更文挑战第25天】不同的数据分片算法适用于不同的应用场景和数据特点,在实际应用中,需要根据具体的业务需求、数据分布情况、系统性能要求等因素综合考虑,选择合适的数据分片算法,以实现数据的高效存储、查询和处理。
|
1月前
|
存储 缓存 算法
分布式缓存有哪些常用的数据分片算法?
【10月更文挑战第25天】在实际应用中,需要根据具体的业务需求、数据特征以及系统的可扩展性要求等因素综合考虑,选择合适的数据分片算法,以实现分布式缓存的高效运行和数据的合理分布。
下一篇
DataWorks