heavydb

heavydb

开源关系型列式数据库引擎 支持CPU和GPU高性能计算

HeavyDB是一款开源的SQL关系型列式数据库引擎,利用CPU和GPU的并行计算能力,可在毫秒级查询数十亿行数据,无需索引或预处理。支持混合CPU/GPU及纯CPU系统,采用多级缓存和即时查询编译技术优化性能。适用于大规模数据分析场景,提供高效的查询处理能力。

HeavyDB数据库引擎SQLGPU加速大数据处理Github开源项目

HeavyDB(前身为OmniSciDB)

HeavyDB是一个开源的基于SQL的关系型列式数据库引擎,它充分利用现代硬件(包括CPU和GPU)的全部性能和并行能力,能够在毫秒级内查询数十亿行的数据集,无需索引、预聚合或降采样。HeavyDB可以在混合CPU/GPU系统(目前支持Nvidia GPU)上运行,也可以在仅使用CPU的系统上运行,支持X86、Power和ARM(实验性支持)架构。为了实现最佳性能,HeavyDB采用了存储、CPU内存和GPU内存之间的多级缓存数据方式,以及创新的即时(JIT)查询编译框架。

有关使用信息,请参阅产品文档,有关系统内部架构的更多详细信息,请查看开发者文档。更多技术讨论可以在HEAVY.AI社区论坛上找到。

该存储库包含了多个在单独许可下提供的第三方软件包。有关这些软件包及其各自许可证的详细信息,请参阅ThirdParty/licenses/index.md

下载和安装说明

HEAVY.AI为项目的稳定版本提供了Linux预构建二进制文件:

发行版包类型CPU/GPU仓库文档
CentOSRPMCPUhttps://releases.heavy.ai/os/yum/stable/cpuhttps://docs.heavy.ai/installation-and-configuration/installation/installing-on-centos/centos-yum-gpu-ee
CentOSRPMGPUhttps://releases.heavy.ai/os/yum/stable/cudahttps://docs.heavy.ai/installation-and-configuration/installation/installing-on-centos/centos-yum-gpu-ee
UbuntuDEBCPUhttps://releases.heavy.ai/os/apt/dists/stable/cpuhttps://docs.heavy.ai/installation-and-configuration/installation/installing-on-ubuntu/centos-yum-gpu-ee
UbuntuDEBGPUhttps://releases.heavy.ai/os/apt/dists/stable/cudahttps://docs.heavy.ai/installation-and-configuration/installation/installing-on-ubuntu/centos-yum-gpu-ee
*tarballCPUhttps://releases.heavy.ai/os/tar/heavyai-os-latest-Linux-x86_64-cpu.tar.gz
*tarballGPUhttps://releases.heavy.ai/os/tar/heavyai-os-latest-Linux-x86_64.tar.gz

开发HeavyDB:目录

链接

许可证

本项目采用Apache许可证2.0版

该存储库包含了多个在单独许可下提供的第三方软件包。有关这些软件包及其各自许可证的详细信息,请参阅ThirdParty/licenses/index.md

贡献

为了明确授予任何个人或实体贡献的知识产权许可,HEAVY.AI必须有一份已由每个贡献者签署的贡献者许可协议("CLA")存档,表示同意贡献者许可协议。在提交拉取请求后,机器人将通知您是否需要签署CLA,并提供如何签署的说明。请在签署之前仔细阅读协议,并保留一份副本以供记录。

构建

如果这是您第一次构建HeavyDB,请安装下面依赖部分中提到的依赖项。

HeavyDB使用CMake作为其构建系统。

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=debug ..
make -j 4

以下cmake/ccmake选项可以启用/禁用不同的功能:

  • -DCMAKE_BUILD_TYPE=release - 要使用的构建类型和编译器选项。 选项包括 DebugReleaseRelWithDebInfoMinSizeRel 和不设置。
  • -DENABLE_ASAN=off - 启用地址sanitizer。默认为 off
  • -DENABLE_AWS_S3=on - 如果可用,启用AWS S3支持。默认为 on
  • -DENABLE_CUDA=off - 禁用CUDA。默认为 on
  • -DENABLE_CUDA_KERNEL_DEBUG=off - 为CUDA内核启用调试符号。会显著降低内核性能。默认为 off
  • -DENABLE_DECODERS_BOUNDS_CHECKING=off - 为列解码启用边界检查。默认为 off
  • -DENABLE_FOLLY=on - 使用Folly。默认为 on
  • -DENABLE_IWYU=off - 启用include-what-you-use。默认为 off
  • -DENABLE_JIT_DEBUG=off - 为JIT启用调试符号。默认为 off
  • -DENABLE_ONLY_ONE_ARCH=off - 仅为主机架构编译GPU代码,加快编译速度。默认为 off
  • -DENABLE_PROFILER=off - 启用google perftools。默认为 off
  • -DENABLE_STANDALONE_CALCITE=off - 需要独立的Calcite服务器。默认为 off
  • -DENABLE_TESTS=on - 构建单元测试。默认为 on
  • -DENABLE_TSAN=off - 启用线程sanitizer。默认为 off
  • -DENABLE_CODE_COVERAGE=off - 启用代码覆盖率符号(仅限clang)。默认为 off
  • -DPREFER_STATIC_LIBS=off - 如果可用,静态链接依赖项。默认为 off。仅在CentOS上有效。

测试

HeavyDB使用Google Test作为其主要测试框架。测试位于Tests目录下。

sanity_tests目标运行最常见的测试。如果使用Makefiles构建,可以使用以下命令运行测试:

make sanity_tests

AddressSanitizer

可以通过在新的构建目录中设置ENABLE_ASAN CMake标志来激活AddressSanitizer。此时还必须禁用CUDA。在空的构建目录中运行CMake并编译:

mkdir build && cd build
cmake -DENABLE_ASAN=on -DENABLE_CUDA=off ..
make -j 4

最后运行测试:

export ASAN_OPTIONS=alloc_dealloc_mismatch=0:handle_segv=0
make sanity_tests

ThreadSanitizer

可以通过在新的构建目录中设置ENABLE_TSAN CMake标志来激活ThreadSanitizer。此时还必须禁用CUDA。在空的构建目录中运行CMake并编译:

mkdir build && cd build
cmake -DENABLE_TSAN=on -DENABLE_CUDA=off ..
make -j 4

我们使用TSAN抑制文件来忽略第三方库中的警告。通过将其添加到TSAN_OPTIONS环境变量中来使用抑制文件:

export TSAN_OPTIONS="suppressions=/path/to/heavydb/config/tsan.suppressions"

最后运行测试:

make sanity_tests

生成软件包

HeavyDB使用CPack来生成用于分发的软件包。在CentOS上生成的启用静态链接的软件包可以在大多数其他最新的Linux发行版上使用。

要在CentOS上生成软件包(假设从heavydb仓库的顶层开始):

mkdir build-package && cd build-package
cmake -DPREFER_STATIC_LIBS=on -DCMAKE_BUILD_TYPE=release ..
make -j 4
cpack -G TGZ

第一个命令创建一个新的构建目录,以确保没有上一次构建的残留。

第二个命令配置构建,优先链接到依赖项的静态库而不是(默认的)共享库,并使用CMake的release配置(启用编译器优化)进行构建。链接到库的静态版本可以减少目标系统上必须安装的依赖项数量。

最后一个命令生成一个.tar.gz包。TGZ可以替换为,例如,RPMDEB以分别生成.rpm.deb

使用

startheavy包装脚本可用于在测试环境中启动HeavyDB。这个脚本执行以下任务:

  • 如果需要,通过initdb初始化data存储目录
  • 启动主HeavyDB服务器,heavydb
  • 提供下载和导入示例数据集的选项,使用insert_sample_data脚本

假设你在build目录中,并且它是heavydb仓库的子目录,可以通过以下方式运行startheavy

../startheavy

手动启动

假设以下命令在build目录内运行。

初始化data存储目录。这个命令只需要运行一次。

mkdir data && ./bin/initdb data

启动 HeavyDB 服务器:

./bin/heavydb

如果需要,在新终端中运行 insert_sample_data 脚本插入示例数据集:

../insert_sample_data

现在您可以开始使用数据库了。可以使用 heavysql 工具从命令行与数据库交互:

./bin/heavysql -p HyperInteractive

其中 HyperInteractive 是默认密码。如果未提供用户名,则默认使用 admin 用户。

代码风格

贡献的代码应在大多数 Linux 发行版上使用最新的编译器编译时不产生警告。代码更改应遵循 C++ 核心指南

clang-format

在存储库的顶层提供了一个基于 Chromium 风格指南的 .clang-format 样式配置。请在提交前使用最新版本(首选 8.0+)的 ClangFormat 格式化您的代码。

使用方法:

clang-format -i File.cpp

clang-tidy

在存储库的顶层提供了一个 .clang-tidy 配置。请在提交前使用最新版本(首选 6.0+)的 clang-tidy 对您的代码进行 lint 检查。

clang-tidy 需要在运行前生成所有文件。最简单的方法是在运行 clang-tidy 之前进行完整构建。提供了一个运行 clang-tidy 的构建目标。使用方法:

make run-clang-tidy

注意:clang-tidy 可能会对源代码进行无效或过于冗长的更改。建议先提交您的更改,然后运行 clang-tidy 并在将其修改添加到您的提交之前审查其建议的更改。

注意:clang-tidy 目标使用 LLVM 提供的 run-clang-tidy.py 脚本,该脚本可能依赖于 PyYAML。该目标还依赖于 jq,用于过滤 compile_commands.json 文件的部分内容。

依赖项

HeavyDB 有以下依赖项:

软件包最低版本是否必需
CMake3.16
LLVM9.0
GCC8.4.0否,如果使用 clang 构建
Go1.12
Boost1.72.0
OpenJDK1.7
CUDA11.0是,如果编译时支持 GPU
gperftools
gdal2.4.2
Arrow3.0.0

CentOS 7

HeavyDB 需要一些在常见的 CentOS/RHEL 软件包存储库中不提供的依赖项。为 CentOS 7(x86_64)提供了一个包含所有这些依赖项的预构建软件包。

使用 scripts/mapd-deps-prebuilt.sh 构建脚本安装预构建的依赖项。

这些依赖项将安装到 /usr/local/mapd-deps 下的目录中。mapd-deps-prebuilt.sh 脚本还安装了 Environment Modules,以简化所需环境变量的管理。运行 mapd-deps-prebuilt.sh 脚本后,请注销并重新登录以激活 Environment Modules 命令 module

默认情况下,mapd-deps 环境模块是禁用的。要在当前会话中激活它,请运行:

module load mapd-deps

要禁用 mapd-deps 模块:

module unload mapd-deps

警告:mapd-deps 软件包包含较新版本的软件包,如 GCC 和 ncurses,这些可能与您的其他环境不兼容。在编译其他软件包之前,请确保禁用 mapd-deps 模块。

下面是安装 CUDA 的说明。

CUDA

建议(但不是必需)使用 .rpm 安装 CUDA 和 NVIDIA 驱动程序,具体方法请参见 NVIDIA 提供的说明rpm(网络)方法(首选)可确保您始终拥有最新的稳定驱动程序,而 rpm(本地)方法允许您安装而无需互联网访问。

.rpm 方法需要安装 DKMS,可以从 Extra Packages for Enterprise Linux 存储库获得:

sudo yum install epel-release

安装后请务必重启以激活 NVIDIA 驱动程序。

环境变量

mapd-deps-prebuilt.sh脚本包含两个具有适当环境变量的文件:mapd-deps-<date>.sh(用于从shell配置中源引)和mapd-deps-<date>.modulefile(用于Environment Modules,yum包environment-modules)。这些文件放置在mapd-deps安装目录中,通常为/usr/local/mapd-deps/<date>。可以使用其中任何一个来配置环境:.sh可以在shell配置中源引;.modulefile需要移动到modulespath。

构建依赖项

scripts/mapd-deps-centos.sh脚本用于构建依赖项。如果您想更改依赖项版本或在其他CPU架构上构建,请修改此脚本并运行。

cd scripts
module unload mapd-deps
./mapd-deps-centos.sh --compress

macOS

提供了scripts/mapd-deps-osx.sh,它会自动安装和/或更新Homebrew,并使用它来安装所有依赖项。运行之前请确保macOS完全更新,并已安装Xcode。Xcode可以从App Store安装。

CUDA

mapd-deps-osx.sh将通过Homebrew自动安装CUDA,并将正确的环境变量添加到~/.bash_profile中。

Java

mapd-deps-osx.sh将通过Homebrew自动安装Java和Maven,并将正确的环境变量添加到~/.bash_profile中。

Ubuntu

HeavyDB所需的大多数构建依赖项都可以通过APT获得。某些依赖项,如Thrift、Blosc和Folly必须自行构建,因为它们要么在默认仓库中不存在,要么版本过时。为Ubuntu 18.04(x86_64)提供了一个包含所有这些依赖项的预构建包。默认情况下,依赖项将安装到/usr/local/mapd-deps/;请参阅下面的环境变量部分,了解如何将这些依赖项添加到您的环境中。

Ubuntu 16.04

HeavyDB需要比Ubuntu 16.04提供的版本更新的Boost版本。scripts/mapd-deps-ubuntu1604.sh构建脚本将编译并安装更新版本的Boost到/usr/local/mapd-deps/目录。

Ubuntu 18.04

使用scripts/mapd-deps-prebuilt.sh构建脚本安装预构建的依赖项。

这些依赖项将安装到/usr/local/mapd-deps下的目录中。上述mapd-deps-prebuilt.sh脚本将生成一个名为mapd-deps.sh的脚本,其中包含需要设置的环境变量。只需在当前会话中源引此文件(或将其符号链接到/etc/profile.d/mapd-deps.sh)即可激活它:

source /usr/local/mapd-deps/mapd-deps.sh

环境变量

需要将CUDA和mapd-deps的lib目录添加到LD_LIBRARY_PATH中;需要将CUDA和mapd-deps的bin目录添加到PATH中。mapd-deps-ubuntu.shmapd-deps-prebuilt.sh脚本将生成一个名为mapd-deps.sh的脚本,其中包含需要设置的环境变量。只需在当前会话中源引此文件(或将其符号链接到/etc/profile.d/mapd-deps.sh)即可激活它:

source /usr/local/mapd-deps/mapd-deps.sh

CUDA

Ubuntu的最新版本在标准仓库中提供了NVIDIA CUDA Toolkit和驱动程序。安装方法:

sudo apt install -y \
    nvidia-cuda-toolkit

安装后请务必重启以激活NVIDIA驱动程序。

构建依赖项

scripts/mapd-deps-ubuntu.shscripts/mapd-deps-ubuntu1604.sh脚本分别用于构建Ubuntu 18.04和16.04的依赖项。这些脚本将安装所有必需的依赖项(除CUDA外)并构建需要的依赖项。如果您想更改依赖项版本或在其他CPU架构上构建,请修改此脚本并运行。

cd scripts
./mapd-deps-ubuntu.sh --compress

Arch

提供了scripts/mapd-deps-arch.sh,它将使用yayArch User Repository安装软件包,并为下面列出的一些软件包使用自定义PKGBUILD脚本。如果您还没有yay,请先安装它:https://github.com/Jguer/yay#installation

软件包版本要求:

CUDA

可以使用以下方法安装CUDA和NVIDIA驱动程序。 yay -S
linux-headers
cuda
nvidia

安装完成后请务必重启以激活NVIDIA驱动。

环境变量

cuda 软件包应该会设置使用CUDA所需的环境变量。如果你收到错误提示说找不到 nvcc,那么需要将CUDA的 bin 目录添加到 PATH 中:最简单的方法是创建一个名为 /etc/profile.d/mapd-deps.sh 的新文件,内容如下:

PATH=/opt/cuda/bin:$PATH
export PATH

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多