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 버전 권장)용으로 개발되었으며 서버 하드웨어에서 실행되도록 최적화되었습니다. 우리는 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
이렇게 하면 모든 종속성이 설치된 셸로 이동하게 됩니다. 이제 평소처럼 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 ..
호출하여 빌드를 구성합니다. 기본적으로 우리는 매우 엄격한 컴파일러 플래그( -Werror
포함하여 -Wextra
이상)를 사용합니다. 공식적으로 지원되는 환경 중 하나를 사용하는 경우 이는 문제가 되지 않습니다. 단순히 다른 시스템에서 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와 함께 작동합니다. 일부 소독제는 상호 배타적이므로 이에 대해 두 가지 구성을 사용합니다.
프로젝트 구축에 소요되는 시간을 최적화하려고 할 때, 어디에 소요되는 시간이 얼마나 되는지 파악하는 것이 도움이 되는 경우가 많습니다. scripts/compile_time.sh
도움이 됩니다. 인수 없이 실행하여 사용법 지침을 얻으세요.
연락처: [email protected]