Hyrise は、HPI によって 2009 年から開発され、2017 年に全面的に書き直された研究用インメモリ データベース システムです。私たちの目標は、インメモリ データ管理の分野における研究にクリーンで柔軟なプラットフォームを提供することです。そのアーキテクチャにより、私たち、学生、その他の研究者は、新しいデータ管理概念に基づいた実験を行うことができます。現実的な実験を可能にするために、Hyrise は包括的な SQL サポートを備え、強力なクエリ プランの最適化を実行します。 TPC-H や TPC-DS などのよく知られたベンチマークは、準備をせずに 1 つのコマンドで実行できます。
この Readme ファイルは、リポジトリの技術的な側面に焦点を当てています。私たちの研究の詳細な背景と出版物のリストについては、Hyrise プロジェクト ページをご覧ください。
Hyrise の (アーカイブされた) 以前のバージョンはまだ Github で見つけることができます。
このバージョンの 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 バージョン) 用に開発され、サーバー ハードウェアで実行するように最適化されています。 Hyrise のローカル開発を容易にするために Mac をサポートしていますが、ベンチマークには推奨しません。
私たちは、すぐに使用できる多数のベンチマークをサポートしています。これにより、データ生成、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
これにより、すべての依存関係がインストールされたシェルが表示されます。これで、通常どおりハイライズを構築できます。ローカル システムからの依存関係の使用を避けるため、 --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
使用して Unity ビルドを実行できます。完全な (再) ビルドの場合、または複数のファイルを再ビルドする必要がある場合、コンパイラー プロセスの開始と最も一般的なヘッダーのロードにかかる相対コストが削減されるため、通常はこれらの方が高速になります。ただし、これはデバッグ ビルドの場合にのみ意味があります。詳細については、コンパイル時間の短縮に関するブログ投稿を参照してください。
開発には、再コンパイルに必要な時間を大幅に短縮する ccache を使用するとよいでしょう。特にブランチを切り替える場合、これにより再コンパイルにかかる時間を数分から 1 分以下に短縮できます。マイナス面としては、CI サーバーでランダムなビルド障害が発生していることが確認されているため、ccache はもう推奨せず、単にオプションとしてリストするだけです。 ccache を使用するには、cmake 呼び出しに-DCMAKE_CXX_COMPILER_LAUNCHER=ccache
を追加します。 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 が使用されます。さらに、/scripts にある Python スクリプトのリントにはflake8 を使用します。)
./scripts/format.sh
(clang-format はデータベース コードに使用されます。/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、および未定義の動作オプションを使用して Makefile を生成します。通常どおりコンパイルして実行します。問題が検出された場合は、コンソールに出力されます。最初に検出されたエラーで失敗し、概要が出力されます。アドレスを実際のソース コードの場所に変換するには、llvm-symbolizer がインストールされ (llvm パッケージに含まれている)、 $PATH
で使用できることを確認してください。シンボライザーのカスタムの場所を指定するには、 $ASAN_SYMBOLIZER_PATH
実行可能ファイルのパスに設定します。これは macOS ではそのまま使用できるようです。そうでない場合は、llvm がインストールされていることを確認してください。バイナリはLSAN_OPTIONS=suppressions=asan-ignore.txt ./<YourBuildDirectory>/hyriseTest
で実行できます。
cmake -DENABLE_THREAD_SANITIZATION=ON
上記と同様に機能しますが、ThreadSanitizer を使用します。一部のサニタイザーは相互に排他的であるため、これに対して 2 つの構成を使用します。
プロジェクトの構築に費やす時間を最適化しようとする場合、どこにどのくらいの時間が費やされるのかを把握しておくことが役立つことがよくあります。 scripts/compile_time.sh
これに役立ちます。引数なしで実行すると、使用方法の説明が表示されます。
連絡先: [email protected]