Hyrise — это исследовательская система баз данных в памяти, которая разрабатывается HPI с 2009 года и была полностью переписана в 2017 году. Наша цель — предоставить чистую и гибкую платформу для исследований в области управления данными в памяти. Его архитектура позволяет нам, нашим студентам и другим исследователям проводить эксперименты над новыми концепциями управления данными. Чтобы эксперименты были реалистичными, Hyrise обеспечивает комплексную поддержку SQL и выполняет мощную оптимизацию плана запросов. Известные тесты, такие как TPC-H или TPC-DS, можно выполнить с помощью одной команды и без какой-либо подготовки.
Этот файл 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) и оптимизирован для работы на серверном оборудовании. Мы поддерживаем Mac, чтобы облегчить локальную разработку Hyrise, но не рекомендуем его для сравнительного тестирования.
Мы поддерживаем ряд тестов «из коробки». Это позволяет легко генерировать показатели производительности без необходимости настраивать генерацию данных, загружать CSV-файлы и искать средство выполнения запросов. Вы можете запустить их, используя двоичные файлы ./hyriseBenchmark*
.
Обратите внимание, что планы запросов генерируются в нашем конвейере CI, возможно, с множеством параллельных этапов, и разные прогоны CI могут выполняться на разных машинах. Заявленное время работы не следует воспринимать как надежные показатели производительности.
Контрольный показатель | Примечания |
---|---|
ТПК-ДС | Планы запросов |
ТПК-Н | Планы запросов |
Присоединиться к заказу | Планы запросов |
Звездная схема | Планы запросов |
JCC-H | Вызовите двоичный файл hyriseBenchmarkTPCH с флагом -j. |
ТПК-С | В разработке, адекватная оптимизация еще не проведена |
Ознакомьтесь с нашими правилами для участников .
Определения большинства терминов и сокращений, используемых в коде, вы можете найти в глоссарии. Если вы не можете найти то, что ищете, смело открывайте проблему.
Пошаговое руководство — хорошая отправная точка для знакомства с Hyrise.
Вы можете установить зависимости самостоятельно или использовать скрипт install_dependencies.sh
( рекомендуется ), который устанавливает все перечисленные в нем зависимости и подмодули. Сценарий установки был протестирован под macOS Monterey (12.4) и Ubuntu 22.04.
См. «Зависимости» для получения подробного списка зависимостей, которые можно использовать с brew install
или apt-get install
, в зависимости от вашей платформы. В качестве компиляторов мы обычно используем последние версии clang и gcc (только для Linux). Убедитесь, что системный компилятор указывает на самую последнюю версию, или используйте cmake (см. ниже) соответственно. Более старые версии могут работать, но они не тестировались и не поддерживаются.
Вы можете построить Hyrise, используя Nix. Для этого сначала установите Nix в вашей текущей операционной системе. После этого выполните следующую команду в корне репозитория:
nix-shell resources/nix --pure
Вы попадете в оболочку со всеми установленными зависимостями. Теперь вы можете строить Хайрис как обычно. Обратите внимание, что рекомендуется использовать флаг --pure
, поскольку он позволяет избежать использования зависимостей от локальной системы.
Для получения дополнительной информации о Nix см. Пакеты Nix.
Если вы хотите создать среду разработки на основе Docker с использованием CLion, перейдите к нашему специальному руководству.
В противном случае, чтобы перенести все зависимости 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, что значительно сокращает время, необходимое для перекомпиляции. Это может сократить время перекомпиляции с нескольких минут до одной или меньше, особенно при переключении ветвей. С другой стороны, мы наблюдали случайные сбои сборки на нашем 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, например cmake -DCMAKE_BUILD_TYPE=Release
./scripts/lint.sh
(для кода базы данных используется cpplint Google. Кроме того, мы используем flake8 для проверки скриптов Python в каталоге /scripts.)
./scripts/format.sh
(для кода базы данных используется формат clang. Мы используем черный цвет для форматирования сценариев Python в каталоге /scripts.)
Вызов make hyriseTest
из каталога сборки собирает все доступные тесты. Бинарный файл можно выполнить с помощью ./<YourBuildDirectory>/hyriseTest
hyriseTest. Подмножества всех доступных тестов можно выбрать с помощью --gtest_filter=
.
./scripts/coverage.sh
выведет сводную информацию в командную строку и создаст подробные отчеты в формате HTML по адресу ./coverage/index.html.
Требуется clang на macOS и Linux.
cmake -DENABLE_ADDR_UB_LEAK_SANITIZATION=ON
будет генерировать файлы Makefile с параметрами AddressSanitizer, LeakSanitizer и Undefine Behavior. Скомпилируйте и запустите их как обычно — если будут обнаружены какие-либо проблемы, они будут выведены на консоль. Он завершится неудачей при первой обнаруженной ошибке и напечатает сводку. Чтобы преобразовать адреса в фактическое расположение исходного кода, убедитесь, что 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