Velox是一个C++数据库加速库,提供可重用、可扩展和高性能的数据处理组件。这些组件可以被重复使用来构建专注于不同分析工作负载的计算引擎,包括批处理、交互式处理、流处理和人工智能/机器学习。Velox由Meta创建,目前与IBM/Ahana、Intel、Voltron Data、Microsoft、ByteDance等多家公司合作开发。
在常见的使用场景中,Velox接收一个完全优化的查询计划作为输入,并执行描述的计算。考虑到Velox不提供SQL解析器、数据框架层或查询优化器,它通常不适合最终用户直接使用;相反,它主要被开发人员用于集成和优化他们的计算引擎。
Velox提供以下高级组件:
- 类型:支持标量、复杂和嵌套类型(如结构体、映射、数组、张量等)的通用类型系统。
- 向量:一个与Arrow兼容的列式内存布局模块,提供多种编码方式,如Flat、Dictionary、Constant、Sequence/RLE和Bias,此外还支持延迟实例化模式和乱序写入。
- 表达式求值:一个完全向量化的表达式求值引擎,允许在Vector/Arrow编码数据之上高效执行表达式。
- 函数包:遵循Presto和Spark语义的向量化函数实现集。
- 操作符:常见数据处理操作符的实现,如扫描、投影、过滤、分组、排序、随机洗牌、哈希连接、展开等。
- I/O:通用连接器接口,允许使用不同的文件格式(ORC/DWRF和Parquet)和存储适配器(S3、HDFS、本地文件)。
- 网络序列化器:可实现不同线路协议的接口,用于网络通信,支持PrestoPage和Spark的UnsafeRow。
- 资源管理:用于处理计算资源的原语集合,如内存竞技场和缓冲区管理、任务、驱动程序以及用于CPU和线程执行的线程池、溢出和缓存。
Velox是可扩展的,允许开发人员定义自己的引擎特定专门化,包括:
- 自定义类型
- 简单和向量化函数
- 聚合函数
- 操作符
- 文件格式
- 存储适配器
- 网络序列化器
示例
可扩展性和与不同组件API集成的示例可以在这里找到。
文档
详细介绍库多个方面的开发者指南,以及可用函数列表可以在这里找到。
博客文章可以在这里找到。
入门
获取Velox源代码
git clone https://github.com/facebookincubator/velox.git
cd velox
一旦检出Velox,第一步是安装依赖项。有关依赖项以及Velox如何为您管理一些依赖项的详细信息可以在这里找到。
Velox还提供以下脚本,帮助开发人员为特定平台设置和安装Velox依赖项。
设置依赖项
以下设置脚本使用DEPENDENCY_DIR
环境变量设置构建包的位置。如果您未设置此变量,它将默认为当前工作目录。
$ export DEPENDENCY_DIR=/path/to/your/dependencies
在macOS上设置
在Mac机器上(无论是Intel还是Apple芯片),您可以按如下方式设置然后构建:
$ export INSTALL_PREFIX=/Users/$USERNAME/velox/velox_dependency_install
$ ./scripts/setup-macos.sh
$ make
对于macOS 14.4和XCode 15.3,如果缺少m4
,您可以:
- 通过
brew
安装m4
:
$ brew install m4
$ export PATH=/opt/homebrew/opt/m4/bin:$PATH
- 或者使用
gm4
代替:
$ M4=/usr/bin/gm4 make
在Ubuntu上设置(20.04或更高版本)
支持的架构是x86_64(avx, sse)和AArch64(apple-m1+crc, neoverse-n1)。您可以按如下方式构建:
$ ./scripts/setup-ubuntu.sh
$ make
在Centos 9 Stream上设置(带适配器)
Velox适配器包括AWS S3、Google Cloud Storage和Azure Blob文件系统等文件系统。这些适配器需要安装额外的库。一旦检出Velox,您可以按如下方式设置和构建:
$ ./scripts/setup-centos9.sh
$ ./scripts/setup-adapters.sh
$ make
请注意,setup-adapters.sh
支持MacOS和Ubuntu 20.04或更高版本。
在Linux上使用Clang
通过在运行平台特定设置脚本之前设置USE_CLANG
环境变量,可以在Ubuntu 22.04/24.04和CentOS 9的设置步骤中额外安装Clang 15。
$ export USE_CLANG=true
这将安装并使用Clang 15来构建依赖项,而不是使用默认的GCC编译器。
完成后,在运行任何make
命令之前,设置要使用的编译器:
$ export CC=/usr/bin/clang-15
$ export CXX=/usr/bin/clang++-15
$ make
构建Velox
在根目录下运行make
来编译源代码。对于开发,使用make debug
构建非优化的调试版本,或使用make release
构建优化版本。使用make unittest
构建并运行测试。
注意:
- Velox要求编译器至少为GCC 11.0或Clang 15.0。
- Velox要求CPU支持以下指令集:
- bmi
- bmi2
- f16c
- Velox尝试在可用时使用以下(或等效的)指令集:
- 在Intel CPU上
- avx
- avx2
- sse
- 在ARM上
- Neon
- Neon64
- 在Intel CPU上
Velox的构建指标发布在https://facebookincubator.github.io/velox/bm-report/
使用docker-compose构建Velox
如果您不想安装构建Velox所需的系统依赖项,您也可以使用docker-compose在Docker容器上构建并运行Velox的测试。使用以下命令:
$ docker-compose build ubuntu-cpp
$ docker-compose run --rm ubuntu-cpp
如果您想增加或减少构建Velox时使用的线程数,可以通过以下方式覆盖NUM_THREADS
环境变量:
$ docker-compose run -e NUM_THREADS=<要使用的线程数> --rm ubuntu-cpp
贡献
查看我们的贡献指南,了解如何为项目做出贡献。
社区
Velox的技术治理机制在这份文档中有描述。组件和维护者列表在这里。
与Velox开源社区的主要沟通渠道是通过Velox-OSS Slack工作区。请联系velox@meta.com以获取Velox Slack频道的访问权限。
许可证
Velox根据Apache 2.0许可证授权。许可证副本可以在这里找到。