vortex-data/vortex
GitHub: vortex-data/vortex
Vortex 是一种高性能、可扩展的列式文件格式和压缩框架,旨在替代 Apache Parquet,提供数量级的读取和扫描性能提升。
Stars: 3024 | Forks: 172
# 🌪️ Vortex
[](https://github.com/vortex-data/vortex/actions)
[](https://www.bestpractices.dev/projects/10567)
[](https://docs.vortex.dev)
[](https://codspeed.io/vortex-data/vortex)
[](https://crates.io/crates/vortex)
[](https://pypi.org/project/vortex-data/)
[](https://central.sonatype.com/artifact/dev.vortex/vortex-spark)
[](https://codecov.io/github/vortex-data/vortex)
[](CITATION.cff)
[在 Slack 上加入社区!](https://vortex.dev/slack) | [文档](https://docs.vortex.dev/) | [性能基准测试](https://bench.vortex.dev)
如果您有兴趣进行更紧密的合作,请发送电子邮件至 info@vortex.dev
## 概述
Vortex 是一种下一代列式文件格式和工具包,专为高性能数据处理而设计。
它是构建基于对象存储的数据系统的最快、最具扩展性的格式。它提供:
- **极致的性能**
- 100 倍的随机读取速度(对比现代 Apache Parquet)
- 10-20 倍的扫描速度
- 5 倍的写入速度
- 相似的压缩率
- 通过零拷贝/零解析的元数据,高效支持宽表
- **可扩展架构**
- 效仿 Apache DataFusion 的可扩展方法
- 可插拔的编码系统、类型系统、压缩策略和布局策略
- 与 Apache Arrow 的零拷贝兼容性
- **开源,中立治理**
- Linux 基金会 (LF AI & Data) 项目
- 基于 Apache-2.0 许可证
- **生态集成**
- Arrow, DataFusion, DuckDB, Spark, Pandas, Polars 等等
- Apache Iceberg(即将推出)
## 核心特性
### 核心能力
- **逻辑类型** - 逻辑 schema 与物理布局之间的清晰分离
- **零拷贝 Arrow 集成** - 与 Apache Arrow 数组之间的无缝转换
- **可扩展的编码** - 具有内置优化的可插拔物理布局
- **级联压缩** - 支持嵌套的编码方案
- **高性能计算** - 针对编码数据优化的计算内核
- **丰富的统计数据** - 用于优化的延迟加载统计摘要
### 技术架构
#### 逻辑与物理设计
Vortex 严格区分了逻辑和物理层面的问题:
- **逻辑层**:定义数据类型和 schema
- **物理层**:处理编码和存储的实现
- **内置编码**:兼容 Apache Arrow 的内存格式
- **扩展编码**:优化的压缩方案(RLE、字典等)
## 快速开始
### 安装说明
#### Rust Crate
所有功能均通过主要的 `vortex` crate 导出。
```
cargo add vortex
```
#### Python 包
```
uv add vortex-data
```
#### 命令行工具 (vx)
要浏览 Vortex 文件的结构,你可以使用 `vx` 命令行工具。
```
# 安装预编译二进制文件(快速,推荐)
cargo binstall vortex-tui
# 或者从源码编译
cargo install vortex-tui --locked
# 或者通过 Python 运行而无需安装
uvx --from vortex-data vx --help
# 用法
vx browse
```
### 开发环境设置
#### 前置条件 (macOS)
```
# 可选但推荐的依赖项
brew install flatbuffers protobuf # For .fbs and .proto files
brew install duckdb # For benchmarks
# 安装 Rust toolchain
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# 或
brew install rustup
# 初始化 submodules
git submodule update --init --recursive
# 使用 uv 设置依赖项
uv sync --all-packages
```
### 基准测试
使用 `vx-bench` 运行基准测试,比较各引擎(DataFusion, DuckDB)和格式(Parquet, Vortex):
```
# 安装 benchmark orchestrator
uv tool install "bench_orchestrator @ ./bench-orchestrator/"
# 运行 TPC-H benchmarks
vx-bench run tpch --engine datafusion,duckdb --format parquet,vortex
# 比较结果
vx-bench compare --run latest
```
完整文档请参阅 [bench-orchestrator/README.md](bench-orchestrator/README.md)。
### 性能优化
为了获得最佳性能,我们建议使用 [MiMalloc](https://github.com/microsoft/mimalloc):
```
#[global_allocator]
static GLOBAL_ALLOC: MiMalloc = MiMalloc;
```
## 项目信息
### 许可证
基于 Apache License, Version 2.0 授权。
### 治理
Vortex 是一个独立的开源项目,不受任何单一公司控制。Vortex 项目是
Linux 基金会项目的一个子项目。其治理模式记录在
[CONTRIBUTING.md](CONTRIBUTING.md) 中,并受
[技术章程](https://vortex.dev/charter.pdf) 条款的约束。
### 报告漏洞
如果您发现安全漏洞,请发送电子邮件至 。
### 商标
版权所有 © Vortex a Series of LF Projects, LLC.
有关使用条款、商标政策和其他项目政策,请参阅
### Vortex 中的研究
- [BtrBlocks](https://www.cs.cit.tum.de/fileadmin/w00cfj/dis/papers/btrblocks.pdf) - 高效的列式压缩
- [FastLanes](https://www.vldb.org/pvldb/vol16/p2132-afroozeh.pdf) & [GPU 上的 FastLanes](https://dbdbd2023.ugent.be/abstracts/felius_fastlanes.pdf) - 高性能整数压缩
- [FSST](https://www.vldb.org/pvldb/vol13/p2649-boncz.pdf) - 快速随机访问字符串压缩
- [ALP](https://ir.cwi.nl/pub/33334/33334.pdf) & [G-ALP](https://dl.acm.org/doi/pdf/10.1145/3736227.3736242) - 自适应无损浮点压缩
- [Procella](https://dl.acm.org/citation.cfm?id=3360438) - YouTube 的统一数据系统
- [Anyblob](https://www.durner.dev/app/media/papers/anyblob-vldb23.pdf) - 对对象存储的高性能访问
- [ClickHouse](https://www.vldb.org/pvldb/vol17/p3731-schulze.pdf) - 面向所有人的快速分析
- [MonetDB/X100](https://www.cidrdb.org/cidr2005/papers/P19.pdf) - 超流水线查询执行
- [Morsel 驱动的并行性](https://db.in.tum.de/~leis/papers/morsels.pdf):面向多核时代的 NUMA 感知查询评估格式
- [The FastLanes File Format](https://github.com/cwida/FastLanes/blob/dev/docs/specification.pdf) - 表达式运算符
### 学术研究中的 Vortex
- [Anyblox](https://gienieczko.com/anyblox-paper) - 一个用于自解码数据集的框架
- [F3](https://dl.acm.org/doi/pdf/10.1145/3749163) - 面向未来的开源数据文件格式
### 开源灵感来源
- [Apache Arrow](https://arrow.apache.org)
- [Apache DataFusion](https://github.com/apache/datafusion)
- Jorge Leitao 开发的 [parquet2](https://github.com/jorgecarleitao/parquet2)
- [DuckDB](https://github.com/duckdb/duckdb)
- [Velox](https://github.com/facebookincubator/velox) & [Nimble](https://github.com/facebookincubator/nimble)
#### 感谢所有与社区分享其知识和代码的贡献者!🚀
标签:Apache Arrow, Rust, 列式存储, 可视化界面, 大数据, 数据压缩, 文件格式, 目录扫描, 网络流量审计, 逆向工具, 通知系统