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