Hyrise 是一个研究型内存数据库系统,由 HPI 自 2009 年开始开发,并于 2017 年完全重写。我们的目标是为内存数据管理领域的研究提供一个干净、灵活的平台。它的架构允许我们、我们的学生和其他研究人员围绕新的数据管理概念进行实验。为了实现真实的实验,Hyrise 提供全面的 SQL 支持并执行强大的查询计划优化。众所周知的基准测试,例如 TPC-H 或 TPC-DS,可以使用单个命令执行,无需任何准备。
本自述文件重点介绍存储库的技术方面。有关我们研究的更多背景和出版物列表,请访问 Hyrise 项目页面。
您仍然可以在 Github 上找到(已存档)以前版本的 Hyrise。
引用此版本的 Hyrise 时,请使用以下 bibtex 条目:
@inproceedings { DBLP:conf/edbt/DreselerK0KUP19 ,
author = { Markus Dreseler and
Jan Kossmann and
Martin Boissier and
Stefan Klauck and
Matthias Uflacker and
Hasso Plattner } ,
editor = { Melanie Herschel and
Helena Galhardas and
Berthold Reinwald and
Irini Fundulaki and
Carsten Binnig and
Zoi Kaoudi } ,
title = { Hyrise Re-engineered: An Extensible Database System for Research in
Relational In-Memory Data Management } ,
booktitle = { Advances in Database Technology - 22nd International Conference on
Extending Database Technology, {EDBT} 2019, Lisbon, Portugal, March
26-29, 2019 } ,
pages = { 313--324 } ,
publisher = { OpenProceedings.org } ,
year = { 2019 } ,
url = { https://doi.org/10.5441/002/edbt.2019.28 } ,
doi = { 10.5441/002/edbt.2019.28 } ,
timestamp = { Mon, 18 Mar 2019 16:09:00 +0100 } ,
biburl = { https://dblp.org/rec/conf/edbt/DreselerK0KUP19.bib } ,
bibsource = { dblp computer science bibliography, https://dblp.org }
}
Hyrise 是为 Linux(最好是最新的 Ubuntu 版本)开发的,并针对在服务器硬件上运行进行了优化。我们支持Mac以方便Hyrise的本地开发,但不建议用于基准测试。
我们支持许多开箱即用的基准测试。这样就可以轻松生成性能数据,而无需设置数据生成、加载 CSV 和查找查询运行程序。您可以使用./hyriseBenchmark*
二进制文件运行它们。
请注意,查询计划是在我们的 CI 管道中生成的,可能有多个并行阶段,并且不同的 CI 运行可能在不同的机器上执行。报告的运行时间不应被视为可靠的基准性能数字。
基准 | 笔记 |
---|---|
TPC-DS | 查询计划 |
TPC-H | 查询计划 |
加盟订单 | 查询计划 |
星型模式 | 查询计划 |
JCC-H | 使用 -j 标志调用 hyriseBenchmarkTPCH 二进制文件。 |
TPC-C | 开发中,尚未进行适当的优化 |
请查看我们的贡献者指南。
您可以在术语表中找到代码中使用的大多数术语和缩写的定义。如果您找不到所需的内容,请随时提出问题。
分步指南是了解 Hyrise 的良好起点。
您可以自行安装依赖项,也可以使用install_dependencies.sh
脚本(推荐)来安装其中列出的所有依赖项和子模块。安装脚本在 macOS Monterey (12.4) 和 Ubuntu 22.04 下进行了测试。
请参阅依赖项以获取与brew install
或apt-get install
一起使用的依赖项的详细列表,具体取决于您的平台。作为编译器,我们通常使用最新版本的 clang 和 gcc(仅限 Linux)。请确保系统编译器指向最新版本或相应地使用 cmake(见下文)。旧版本可能可以工作,但未经测试也不支持。
您可以使用 Nix 构建 Hyrise。为此,请首先在当前操作系统上安装 Nix。然后,在存储库的根目录中运行以下命令:
nix-shell resources/nix --pure
这将使您进入安装了所有依赖项的 shell。您现在可以像往常一样构建 Hyrise。请注意,建议使用--pure
标志,因为它可以避免使用本地系统的依赖项。
有关 Nix 的更多信息,请参阅 Nix 软件包。
如果您想使用 CLion 创建基于 Docker 的开发环境,请参阅我们的专用教程。
否则,要将 Hyrise 的所有依赖项获取到 Docker 映像中,请运行
docker build -t hyrise .
您可以通过以下方式启动容器
docker run -it hyrise
在容器内,您可以签出 Hyrise 并运行./install_dependencies.sh
以下载所需的子模块。
强烈建议执行源外构建,即为构建创建单独的目录。该目录的建议名称为cmake-build-{debug,release}
,具体取决于构建类型。在此目录中调用cmake ..
来配置构建。默认情况下,我们使用非常严格的编译器标志(超出-Wextra
,包括-Werror
)。如果您使用官方支持的环境之一,这应该不是问题。如果您只是想在不同的系统上测试 Hyrise 并遇到问题,您可以调用cmake -DHYRISE_RELAXED_BUILD=On ..
,这将禁用这些严格检查。对 CMake 的后续调用,例如,当不需要将文件添加到构建时,生成的 Makefile 将处理该问题。
CMake 将默认使用系统的默认编译器。要使用不同的版本,请在干净的构建目录中调用cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ..
请参阅依赖项以了解支持的编译器版本。
从 cmake 3.16 开始,您可以使用-DCMAKE_UNITY_BUILD=On
执行统一构建。对于完整(重新)构建或必须重新构建多个文件时,这些通常更快,因为启动编译器进程和加载最常见标头的相对成本降低了。然而,这仅对调试版本有意义。有关详细信息,请参阅我们关于减少编译时间的博客文章。
对于开发,您可能需要使用 ccache,它可以显着减少重新编译所需的时间。特别是在切换分支时,这可以将重新编译的时间从几分钟减少到一分钟或更短。不利的一面是,我们在 CI 服务器上看到了随机构建失败,这就是为什么我们不再推荐 ccache,而只是将其列为一个选项。要使用 ccache,请将-DCMAKE_CXX_COMPILER_LAUNCHER=ccache
添加到 cmake 调用中。您需要在环境变量或 ccache 配置中调整一些 ccache 设置,以便 ccache 可以处理预编译头。在我们的 CI 服务器上,这对我们有用: CCACHE_SLOPPINESS=file_macro,pch_defines,time_macros CCACHE_DEPEND=1
。
只需调用make -j*
,其中*
表示要使用的线程数。
通常会创建调试二进制文件。要为发布构建配置构建目录,请确保它为空并像cmake -DCMAKE_BUILD_TYPE=Release
一样调用 CMake
./scripts/lint.sh
(数据库代码使用 Google 的 cpplint。此外,我们使用flake8对 /scripts 下的 Python 脚本进行 linting。)
./scripts/format.sh
用于数据库代码。我们使用黑色来格式化 /scripts 下的 Python 脚本。)
从构建目录调用make hyriseTest
构建所有可用的测试。可以使用./<YourBuildDirectory>/hyriseTest
执行二进制文件。可以通过--gtest_filter=
选择所有可用测试的子集。
./scripts/coverage.sh
将在命令行打印摘要并在 ./coverage/index.html 创建详细的 html 报告
在 macOS 和 Linux 上需要 clang。
cmake -DENABLE_ADDR_UB_LEAK_SANITIZATION=ON
将生成带有 AddressSanitizer、LeakSanitizer 和 Undefined Behavior 选项的 Makefile。正常编译并运行它们 - 如果检测到任何问题,它们将被打印到控制台。它将在第一次检测到错误时失败并打印摘要。要将地址转换为实际的源代码位置,请确保 llvm-symbolizer 已安装(包含在 llvm 包中)并且在$PATH
中可用。要指定符号器的自定义位置,请将$ASAN_SYMBOLIZER_PATH
设置为可执行文件的路径。这似乎在 macOS 上是开箱即用的 - 如果没有,请确保安装了 llvm。可以使用LSAN_OPTIONS=suppressions=asan-ignore.txt ./<YourBuildDirectory>/hyriseTest
执行二进制文件。
cmake -DENABLE_THREAD_SANITIZATION=ON
将按上述方式工作,但需要使用 ThreadSanitizer。有些消毒剂是相互排斥的,这就是我们为此使用两种配置的原因。
当尝试优化构建项目所花费的时间时,了解在哪里花费了多少时间通常会很有帮助。 scripts/compile_time.sh
对此有所帮助。通过不带任何参数运行它来获取使用说明。
联系方式:名字.姓氏@hpi.de