2026/4/15 20:33:11
网站建设
项目流程
横泉水库建设管理局网站,特殊符号网站,怎样做的英文网站,h5在线制作工具手机版原文地址#xff1a;https://duckdb.org/2026/01/23/duckdb-vortex-extension
标题: “在 DuckDB 中宣布支持 Vortex” 作者: “Guillermo Sanchez, SpiralDB 团队” 摘要: “Vortex 是一种新的列式文件格式#xff0c;设计前景非常广阔。SpiralDB 和 DuckDB Labs 已携手合作…原文地址https://duckdb.org/2026/01/23/duckdb-vortex-extension标题: “在 DuckDB 中宣布支持 Vortex”作者: “Guillermo Sanchez, SpiralDB 团队”摘要: “Vortex 是一种新的列式文件格式设计前景非常广阔。SpiralDB 和 DuckDB Labs 已携手合作为您在读取和写入 Vortex 文件时提供极快的体验”我认为值得在开头先简单谈谈已确立的列式数据格式。Parquet 为分析领域做出了许多惊人的贡献。如果您回顾 CSV 曾是更好选择的年代就会知道 Parquet 有多么重要。然而即使规范随着时间的推移不断演进Parquet 也存在一些设计上的限制。一个特别的限制是它采用块压缩引擎需要解压页面才能进行后续操作如过滤、解码值等。一段时间以来研究人员和私营公司一直在研究 Parquet 的替代方案以期改进 Parquet 的一些缺点。来自 SpiralDB 团队的 Vortex 就是其中之一。什么是 VortexVortex 是一种可扩展、开源的列式数据格式。它旨在处理异构计算模式和不同的数据模态。但是这具体意味着什么呢该项目于 2025 年 8 月由 SpiralDB 团队捐赠给 Linux 基金会。Vortex 为不同的数据类型提供了不同的布局和编码。其中一些最引人注目的包括用于浮点数编码的 ALP 和用于字符串编码的 FSST。这种轻量级压缩策略在保持数据体积小的同时实现了 Vortex 最重要的特性之一计算函数。通过了解数据的编码布局Vortex 能够对压缩数据运行任意表达式。这使得 Vortex 阅读器能够在不解压数据的情况下在存储段内执行过滤表达式等操作。我们提到异构计算是为了强调 Vortex 的设计理念是为不同数据类型包括向量、大段文本甚至图像或音频提供优化的布局同时最大化 CPU 或 GPU 的利用率。其理念是将解压缩延迟到 GPU 或 CPU从而实现 Vortex 所称的“延迟物化”。FastLanes 编码一个起源于 CWI 的项目与 DuckDB 同源是实现此功能的主要驱动力之一。Vortex 还支持动态加载库类似于 DuckDB 扩展以提供针对特定类型的新编码以及特定的计算函数例如用于地理空间数据。另一个非常有趣的功能是将 WebAssembly 编码到文件中这使得阅读器能够受益于应用于文件的特定计算内核。除了 DuckDB 之外DataFusion、Spark 和 Arrow 等其他引擎也已提供与 Vortex 的集成。更多信息请查看 Vortex 文档。DuckDB Vortex 扩展正如其名DuckDB 是一个数据库是的但它也被广泛用作查询多种不同数据源的引擎。通过核心或社区扩展DuckDB 可以与以下系统集成数据库如 Snowflake、BigQuery 或 PostgreSQL。湖仓格式如 Delta、Iceberg 或 DuckLake。文件格式最著名的是 JSON、CSV、Parquet以及最近的 Vortex。社区已经变得非常有创造力所以现在您甚至可以使用 社区扩展 通过 DuckDB 读取 YAML 和 Markdown。这一切都归功于 DuckDB 的扩展系统它使得实现与不同文件格式或外部系统交互的逻辑相对容易。SpiralDB 团队构建了一个 DuckDB 扩展。与 DuckDB Labs 团队一起我们已将该扩展作为 DuckDB 核心扩展 提供让社区可以在 DuckDB 中享受 Vortex 作为一等公民的待遇。使用示例安装和使用 Vortex 扩展非常简单INSTALL vortex;LOADvortex;然后您可以轻松地使用它来读写类似于 Parquet 等其他扩展。SELECT*FROMread_vortex(my.vortex);COPY(SELECT*FROMgenerate_series(0,3)t(i))TOmy.vortex(FORMAT vortex);为什么选择 Vortex 和 DuckDBVortex 声称主要在三个用例中表现出色传统的 SQL 分析通过延迟解压缩和对压缩数据执行计算表达式Vortex 可以在存储段内过滤数据减少 I/O 和内存消耗。机器学习预处理管道通过支持多种不同数据类型的编码Vortex 声称能够高效地读写数据无论是音频、文本、图像还是向量。AI 模型训练FastLanes 等编码允许非常高效地将数据复制到 GPU。Vortex 旨在能够将数据直接从 S3 对象存储复制到 GPU。通过延迟解压缩实现更高效的 I/O 和内存使用的承诺是尝试将 DuckDB 与 Vortex 结合用于 SQL 分析的一个充分理由。另一方面如果您希望在用于多个用例包括预处理管道和 AI 训练的统一数据集上运行分析那么 Vortex 可能是一个不错的选择因为它旨在很好地适应所有这些用例。性能实验对于那些渴望看到数据的人我们决定使用 DuckDB 运行 TPC-H 基准测试比例因子为 100以了解 Vortex 作为存储格式与 Parquet 相比的表现。我们尽力使基准测试尽可能公平。以下是参数在 Mac M110 核32 GB 内存上运行。基准测试对每个查询运行 5 次并使用平均值进行最终报告。每个查询运行后关闭 DuckDB 连接试图使运行“更冷”避免 DuckDB 的缓存特别是 Parquet影响结果。操作系统的页面缓存确实对后续运行有影响但我们决定承认这个因素并且仍然保留第一次运行。每个 TPC-H 表是单个文件这意味着 Parquet 和 Vortex 的 lineitem 文件都相当大都约 20 GB。这使我们能够忽略通配符和许多小文件的影响。用于基准测试的数据文件使用 tpchgen-rs 生成并使用 DuckDB 的 Parquet 和 Vortex 扩展复制出来。我们将 Vortex 与 Parquet v1 和 v2 进行比较。v2 规范允许比 v1 规范快得多的读取速度但许多写入器不支持 v2因此我们认为同时包含两者是值得的。结果非常好。与 Parquet V2 相比TPC-H 基准测试运行速度快了 18%与 Parquet V1 相比快 35%使用推荐的几何平均值计算。另一个有趣的结果是各次运行之间的标准偏差。Parquet 的每次查询的第一次也是最冷的运行与后续运行之间存在相当大的差异而 Vortex 在所有运行中都表现良好标准偏差小得多。格式几何平均值 (秒)算术平均值 (秒)平均标准偏差 (秒)总时间 (秒)parquet_v12.3247122.8757220.14591463.265881parquet_v21.8391712.2880130.18296250.336281vortex1.5076751.9912890.07889343.808349不同基准测试运行的时间确实存在差异后续运行也产生了类似结果但略有变化。Parquet v2 和 Vortex 之间的差异始终在几何平均值上约为 12-18%在总时间上约为 8-14%。基准测试非常困难点击此处查看基准测试结果的更详细分解。此图显示了每个查询的结果包括标准偏差误差线。以下是数据集大小的总结。请注意Parquet v1 和 v2 都使用了 DuckDB Parquet 写入器使用的默认压缩方式即 Snappy。在这种情况下Vortex 没有使用任何通用压缩但数据大小仍然具有竞争力。表parquet_v1parquet_v2vortexcustomer1.150.991.06lineitem21.1516.0218.14nation0.000.000.00orders6.024.545.03part0.590.470.54partsupp4.073.333.72region0.000.000.00supplier0.070.060.07总计33.0625.4028.57结论Vortex 是 Parquet 等成熟列式格式的一个非常有趣的替代方案。它专注于轻量级压缩编码、延迟解压缩以及能够在压缩数据上运行计算表达式这使其适用于广泛的用例。就 DuckDB 而言我们看到 Vortex 对于分析查询已经非常高效在 TPC-H 基准测试查询中与 Parquet v2 相当或更好。Vortex 自 6 个多月前发布的 0.36.0 版本以来一直保持向后兼容。Vortex 目前版本为 0.56.0。