{"id":13629775,"url":"https://github.com/hyrise/hyrise","last_synced_at":"2025-04-17T09:36:37.050Z","repository":{"id":37271101,"uuid":"87414843","full_name":"hyrise/hyrise","owner":"hyrise","description":"Hyrise is a research in-memory database.","archived":false,"fork":false,"pushed_at":"2024-05-22T14:10:09.000Z","size":120521,"stargazers_count":775,"open_issues_count":77,"forks_count":152,"subscribers_count":37,"default_branch":"master","last_synced_at":"2024-05-22T15:05:20.381Z","etag":null,"topics":["column-store","cpp","database","in-memory-database","sql"],"latest_commit_sha":null,"homepage":"https://hpi.de/plattner/projects/hyrise.html","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hyrise.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-04-06T10:03:31.000Z","updated_at":"2024-05-28T03:24:39.948Z","dependencies_parsed_at":"2024-02-27T08:00:45.955Z","dependency_job_id":"9638e4f6-562b-465e-b024-5eb54cd5e47d","html_url":"https://github.com/hyrise/hyrise","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyrise%2Fhyrise","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyrise%2Fhyrise/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyrise%2Fhyrise/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyrise%2Fhyrise/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hyrise","download_url":"https://codeload.github.com/hyrise/hyrise/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223751518,"owners_count":17196654,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["column-store","cpp","database","in-memory-database","sql"],"created_at":"2024-08-01T22:01:18.925Z","updated_at":"2025-04-17T09:36:37.038Z","avatar_url":"https://github.com/hyrise.png","language":"C++","funding_links":[],"categories":["C++","Databases","Misc"],"sub_categories":["Academic","BBedit"],"readme":"[![Build Status](https://hyrise-ci.epic-hpi.de/buildStatus/icon?job=Hyrise/hyrise/master)](https://hyrise-ci.epic-hpi.de/blue/organizations/jenkins/hyrise%2Fhyrise/activity/)\n[![Coverage Status](https://hyrise-ci.epic-hpi.de/job/hyrise/job/hyrise/job/master/lastStableBuild/artifact/coverage_badge.svg)](https://hyrise-ci.epic-hpi.de/job/Hyrise/job/hyrise/job/master/lastStableBuild/Llvm-cov_5fReport/)\n[![CodeFactor](https://www.codefactor.io/repository/github/hyrise/hyrise/badge)](https://www.codefactor.io/repository/github/hyrise/hyrise)\n\n# Welcome to Hyrise\n\nHyrise is a research in-memory database system that has been developed [by HPI since 2009](https://www.vldb.org/pvldb/vol4/p105-grund.pdf) and has been entirely [rewritten in 2017](https://openproceedings.org/2019/conf/edbt/EDBT19_paper_152.pdf). Our goal is to provide a clean and flexible platform for research in the area of in-memory data management. Its architecture allows us, our students, and other researchers to conduct experiments around new data management concepts. To enable realistic experiments, Hyrise features comprehensive SQL support and performs powerful query plan optimizations. Well-known benchmarks, such as TPC-H or TPC-DS, can be executed with a single command and without any preparation.\n\nThis readme file focuses on the technical aspects of the repository. For more background on our research and for a list of publications, please visit the [Hyrise project page](https://hpi.de/plattner/projects/hyrise.html).\n\nYou can still find the (archived) previous version of Hyrise on [Github](https://github.com/hyrise/hyrise-v1).\n\n## Citation\n\nWhen referencing this version of Hyrise, please use the following bibtex entry:\n\u003cdetails\u003e\u003csummary\u003e(click to expand)\u003c/summary\u003e\n  \n```bibtex\n@inproceedings{DBLP:conf/edbt/DreselerK0KUP19,\n  author    = {Markus Dreseler and\n               Jan Kossmann and\n               Martin Boissier and\n               Stefan Klauck and\n               Matthias Uflacker and\n               Hasso Plattner},\n  editor    = {Melanie Herschel and\n               Helena Galhardas and\n               Berthold Reinwald and\n               Irini Fundulaki and\n               Carsten Binnig and\n               Zoi Kaoudi},\n  title     = {Hyrise Re-engineered: An Extensible Database System for Research in\n               Relational In-Memory Data Management},\n  booktitle = {Advances in Database Technology - 22nd International Conference on\n               Extending Database Technology, {EDBT} 2019, Lisbon, Portugal, March\n               26-29, 2019},\n  pages     = {313--324},\n  publisher = {OpenProceedings.org},\n  year      = {2019},\n  url       = {https://doi.org/10.5441/002/edbt.2019.28},\n  doi       = {10.5441/002/edbt.2019.28},\n  timestamp = {Mon, 18 Mar 2019 16:09:00 +0100},\n  biburl    = {https://dblp.org/rec/conf/edbt/DreselerK0KUP19.bib},\n  bibsource = {dblp computer science bibliography, https://dblp.org}\n}\n```\n\u003c/details\u003e\n\n## Supported Systems\nHyrise is developed for Linux (preferrably the most current Ubuntu version) and optimized to run on server hardware. We support Mac to facilitate the local development of Hyrise, but do not recommend it for benchmarking.\n\n## Supported Benchmarks\nWe support a number of benchmarks out of the box. This makes it easy to generate performance numbers without having to set up the data generation, loading CSVs, and finding a query runner. You can run them using the `./hyriseBenchmark*` binaries.\n\nNote that the query plans are generated in our CI pipeline with possibly many stages in parallel and different CI runs\nmight be executed on different machines. Reported runtimes are not to be taken as solid benchmark performance numbers.\n\n| Benchmark   | Notes                                                                                                                    |\n| ----------- | ------------------------------------------------------------------------------------------------------------------------ |\n| TPC-DS      | [Query Plans](https://hyrise-ci.epic-hpi.de/job/hyrise/job/hyrise/job/master/lastStableBuild/artifact/query_plans/tpcds) |\n| TPC-H       | [Query Plans](https://hyrise-ci.epic-hpi.de/job/hyrise/job/hyrise/job/master/lastStableBuild/artifact/query_plans/tpch)  |\n| Join Order  | [Query Plans](https://hyrise-ci.epic-hpi.de/job/hyrise/job/hyrise/job/master/lastStableBuild/artifact/query_plans/job)   |\n| Star Schema | [Query Plans](https://hyrise-ci.epic-hpi.de/job/hyrise/job/hyrise/job/master/lastStableBuild/artifact/query_plans/ssb)   |\n| JCC-H       | Call the hyriseBenchmarkTPCH binary with the -j flag.                                                                    |\n| TPC-C       | In development, no proper optimization done yet                                                                          |\n\n# Getting started\n\n*Have a look at our [contributor guidelines](CONTRIBUTING.md)*.\n\nYou can find definitions of most of the terms and abbreviations used in the code in the [glossary](GLOSSARY.md). If you cannot find something that you are looking for, feel free to open an issue.\n\nThe [Step by Step Guide](https://github.com/hyrise/hyrise/wiki/Step-by-Step-Guide) is a good starting point to get to know Hyrise.\n\n## Native Setup\nYou can install the dependencies on your own or use the `install_dependencies.sh` script (**recommended**) which installs all of the therein listed dependencies and submodules.\nThe install script was tested under macOS Monterey (12.4) and Ubuntu 22.04.\n\nSee [dependencies](DEPENDENCIES.md) for a detailed list of dependencies to use with `brew install` or `apt-get install`, depending on your platform. As compilers, we generally use recent versions of clang and gcc (Linux only). Please make sure that the system compiler points to the most recent version or use cmake (see below) accordingly.\nOlder versions may work, but are neither tested nor supported.\n\n## Nix Setup\nYou can build Hyrise using Nix. To do so, first [install Nix](https://nixos.wiki/wiki/Nix_Installation_Guide) on your current operating system. Afterward, run the following command in the root of the repository:\n\n```bash\nnix-shell resources/nix --pure\n```\n\nThis will drop you into a shell with all dependencies installed. You can now build Hyrise as usual. Please note that using the `--pure` flag is recommended as it avoids using dependencies from the local system.\n\nFor more information on Nix, see [Nix Packages](./resources/nix/README.md).\n\n## Setup using Docker\nIf you want to create a Docker-based development environment using CLion, head over to our [dedicated tutorial](https://github.com/hyrise/hyrise/wiki/Use-Docker-with-CLion). \n\nOtherwise, to get all dependencies of Hyrise into a Docker image, run\n```\ndocker build -t hyrise .\n```\n\nYou can start the container via\n```\ndocker run -it hyrise\n```\n\nInside the container, you can then checkout Hyrise and run `./install_dependencies.sh` to download the required submodules.\n\n## Building and Tooling\nIt is highly recommended to perform out-of-source builds, i.e., creating a separate directory for the build.\nAdvisable names for this directory would be `cmake-build-{debug,release}`, depending on the build type.\nWithin this directory call `cmake ..` to configure the build.\nBy default, we use very strict compiler flags (beyond `-Wextra`, including `-Werror`). If you use one of the officially supported environments, this should not be an issue. If you simply want to test Hyrise on a different system and run into issues, you can call `cmake -DHYRISE_RELAXED_BUILD=On ..`, which will disable these strict checks.\nSubsequent calls to CMake, e.g., when adding files to the build will not be necessary, the generated Makefiles will take care of that.\n\n### Compiler choice\nCMake will default to your system's default compiler.\nTo use a different one, call `cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ..` in a clean build directory. See [dependencies](DEPENDENCIES.md) for supported compiler versions.\n\n### Unity Builds\nStarting with cmake 3.16, you can use `-DCMAKE_UNITY_BUILD=On` to perform unity builds. For a complete (re-)build or when multiple files have to be rebuilt, these are usually faster, as the relative cost of starting a compiler process and loading the most common headers is reduced. However, this only makes sense for debug builds. See our [blog post](https://medium.com/hyrise/reducing-hyrises-build-time-8523135aed72) on reducing the compilation time for details.\n\n### ccache\nFor development, you may want to use [ccache](https://ccache.samba.org/), which reduces the time needed for recompiles significantly. Especially when switching branches, this can reduce the time to recompile from several minutes to one or less. On the downside, we have seen random build failures on our CI server, which is why we do not recommend ccache anymore but merely list it as an option. To use ccache, add `-DCMAKE_CXX_COMPILER_LAUNCHER=ccache` to your cmake call. You will need to [adjust some ccache settings](https://ccache.dev/manual/latest.html#_precompiled_headers) either in your environment variables or in your [ccache config](https://ccache.dev/manual/latest.html#_configuration) so that ccache can handle the precompiled headers. On our CI server, this worked for us: `CCACHE_SLOPPINESS=file_macro,pch_defines,time_macros CCACHE_DEPEND=1`.\n\n### Build\nSimply call `make -j*`, where `*` denotes the number of threads to use.\n\nUsually debug binaries are created.\nTo configure a build directory for a release build make sure it is empty and call CMake like `cmake -DCMAKE_BUILD_TYPE=Release`\n\n### Lint\n`./scripts/lint.sh` (Google's cpplint is used for the database code. In addition, we use _flake8_ for linting the Python scripts under /scripts.)\n\n### Format\n`./scripts/format.sh` (clang-format is used for the database code. We use _black_ for formatting the Python scripts under /scripts.)\n\n### Test\nCalling `make hyriseTest` from the build directory builds all available tests.\nThe binary can be executed with `./\u003cYourBuildDirectory\u003e/hyriseTest`.\nSubsets of all available tests can be selected via `--gtest_filter=`.\n\n### Coverage\n`./scripts/coverage.sh` will print a summary to the command line and create detailed html reports at ./coverage/index.html\n\n*Requires clang on macOS and Linux.*\n\n### Address/UndefinedBehavior Sanitizers\n`cmake -DENABLE_ADDR_UB_LEAK_SANITIZATION=ON` will generate Makefiles with AddressSanitizer, LeakSanitizer, and Undefined Behavior options.\nCompile and run them as normal - if any issues are detected, they will be printed to the console.\nIt will fail on the first detected error and will print a summary.\nTo convert addresses to actual source code locations, make sure llvm-symbolizer is installed (included in the llvm package) and is available in `$PATH`.\nTo specify a custom location for the symbolizer, set `$ASAN_SYMBOLIZER_PATH` to the path of the executable.\nThis seems to work out of the box on macOS - if not, make sure to have llvm installed.\nThe binary can be executed with `LSAN_OPTIONS=suppressions=asan-ignore.txt ./\u003cYourBuildDirectory\u003e/hyriseTest`.\n\n`cmake -DENABLE_THREAD_SANITIZATION=ON` will work as above but with the ThreadSanitizer.\nSome sanitizers are mutually exclusive, which is why we use two configurations for this.\n\n### Compile Times\nWhen trying to optimize the time spent building the project, it is often helpful to have an idea how much time is spent where.\n`scripts/compile_time.sh` helps with that. Get usage instructions by running it without any arguments.\n\n## Maintainers\n- Martin Boissier\n- Daniel Lindner\n- Marcel Weisgut\n\nContact: firstname.lastname@hpi.de\n\n## Maintainers Emeriti\n- Markus Dreseler\n- Stefan Halfpap\n- Jan    Kossmann\n\n## Contributors\n-   Yannick   Bäumer\n-   Lawrence  Benson\n-   Jasper    Blum\n-   Lukas     Budach\n-   Timo      Djürken\n-   Alexander Dubrawski\n-   Fabian    Dumke\n-   Leonard   Geier\n-   Richard   Ebeling\n-   Fabian    Engel\n-   Ben-Noah  Engelhaupt\n-   Moritz    Eyssen\n-   Martin    Fischer\n-   Christian Flach\n-   Pedro     Flemming\n-   Mathias   Flüggen\n-   Johannes  Frohnhofen\n-   Pascal    Führlich\n-   Carl      Gödecken\n-   Jan-Eric  Hellenberg\n-   Adrian    Holfter\n-   Theresa   Hradilak\n-   Ben       Hurdelhey\n-   Sven      Ihde\n-   Ivan      Illic\n-   Jonathan  Janetzki\n-   Michael   Janke\n-   Max       Jendruk\n-   Tobias    Jordan\n-   David     Justen\n-   Youri     Kaminsky\n-   Marvin    Keller\n-   Mirko     Krause\n-   Eva       Krebs\n-   Henok     Lachmann\n-   Sven      Lehmann\n-   Till      Lehmann\n-   Tom       Lichtenstein\n-   Alexander Löser\n-   Jan       Mattfeld\n-   Arne      Mayer\n-   Dominik   Meier\n-   Julian    Menzler\n-   Torben    Meyer\n-   Leander   Neiß\n-   Vincent   Rahn\n-   Hendrik   Rätz\n-   Robert    Richter\n-   Niklas    Riekenbrauck\n-   Alexander Riese\n-   Marc      Rosenau\n-   Johannes  Schneider\n-   David     Schumann\n-   Simon     Siegert\n-   Arthur    Silber\n-   Furkan    Simsek\n-   Toni      Stachewicz\n-   Daniel    Stolpe\n-   Jonathan  Striebel\n-   Nils      Thamm\n-   Hendrik   Tjabben\n-   Justin    Trautmann\n-   Carsten   Walther\n-   Robert    Weeke \n-   Leo       Wendt\n-   Lukas     Wenzel\n-   Fabian    Wiebe\n-   Tim       Zimmermann\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhyrise%2Fhyrise","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhyrise%2Fhyrise","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhyrise%2Fhyrise/lists"}