Hyrise adalah sistem database penelitian dalam memori yang telah dikembangkan oleh HPI sejak tahun 2009 dan telah ditulis ulang seluruhnya pada tahun 2017. Tujuan kami adalah menyediakan platform yang bersih dan fleksibel untuk penelitian di bidang pengelolaan data dalam memori. Arsitekturnya memungkinkan kami, siswa kami, dan peneliti lain untuk melakukan eksperimen seputar konsep pengelolaan data baru. Untuk memungkinkan eksperimen yang realistis, Hyrise menghadirkan dukungan SQL yang komprehensif dan melakukan pengoptimalan rencana kueri yang kuat. Tolok ukur terkenal, seperti TPC-H atau TPC-DS, dapat dijalankan dengan satu perintah dan tanpa persiapan apa pun.
File readme ini berfokus pada aspek teknis repositori. Untuk latar belakang penelitian kami lebih lanjut dan daftar publikasi, silakan kunjungi halaman proyek Hyrise.
Anda masih dapat menemukan Hyrise versi sebelumnya (yang diarsipkan) di Github.
Saat mereferensikan versi Hyrise ini, silakan gunakan entri bibtex berikut:
@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 dikembangkan untuk Linux (lebih disukai versi Ubuntu terbaru) dan dioptimalkan untuk dijalankan pada perangkat keras server. Kami mendukung Mac untuk memfasilitasi pengembangan lokal Hyrise, namun tidak merekomendasikannya untuk benchmarking.
Kami mendukung sejumlah tolok ukur yang siap pakai. Hal ini memudahkan pembuatan angka kinerja tanpa harus menyiapkan pembuatan data, memuat CSV, dan menemukan runner kueri. Anda dapat menjalankannya menggunakan biner ./hyriseBenchmark*
.
Perhatikan bahwa rencana kueri dibuat dalam alur CI kami dengan kemungkinan banyak tahapan secara paralel dan proses CI yang berbeda mungkin dijalankan pada mesin yang berbeda. Waktu proses yang dilaporkan tidak dapat dianggap sebagai angka kinerja tolok ukur yang solid.
Tolok ukur | Catatan |
---|---|
TPC-DS | Rencana Kueri |
TPC-H | Rencana Kueri |
Bergabunglah dengan Pesanan | Rencana Kueri |
Skema Bintang | Rencana Kueri |
JCC-H | Panggil biner hyriseBenchmarkTPCH dengan flag -j. |
TPC-C | Dalam pengembangan, belum dilakukan optimalisasi yang tepat |
Lihat pedoman kontributor kami .
Anda dapat menemukan definisi sebagian besar istilah dan singkatan yang digunakan dalam kode di glosarium. Jika Anda tidak dapat menemukan sesuatu yang Anda cari, silakan buka terbitan.
Panduan Langkah demi Langkah adalah titik awal yang baik untuk mengenal Hyrise.
Anda dapat menginstal dependensi Anda sendiri atau menggunakan skrip install_dependencies.sh
( disarankan ) yang menginstal semua dependensi dan submodul yang terdaftar di dalamnya. Skrip penginstalan diuji pada macOS Monterey (12.4) dan Ubuntu 22.04.
Lihat dependensi untuk daftar detail dependensi yang akan digunakan dengan brew install
atau apt-get install
, bergantung pada platform Anda. Sebagai kompiler, kami biasanya menggunakan clang dan gcc versi terbaru (khusus Linux). Harap pastikan bahwa kompiler sistem menunjuk ke versi terbaru atau gunakan cmake (lihat di bawah) yang sesuai. Versi yang lebih lama mungkin berfungsi, namun tidak diuji atau didukung.
Anda dapat membangun Hyrise menggunakan Nix. Untuk melakukannya, pertama-tama instal Nix di sistem operasi Anda saat ini. Setelah itu, jalankan perintah berikut di root repositori:
nix-shell resources/nix --pure
Ini akan memasukkan Anda ke dalam shell dengan semua dependensi terinstal. Anda sekarang dapat membangun Hyrise seperti biasa. Harap dicatat bahwa penggunaan flag --pure
disarankan karena menghindari penggunaan dependensi dari sistem lokal.
Untuk informasi lebih lanjut tentang Nix, lihat Paket Nix.
Jika Anda ingin membuat lingkungan pengembangan berbasis Docker menggunakan CLion, kunjungi tutorial khusus kami.
Jika tidak, untuk memasukkan semua dependensi Hyrise ke dalam image Docker, jalankan
docker build -t hyrise .
Anda dapat memulai penampung melalui
docker run -it hyrise
Di dalam container, Anda kemudian dapat checkout Hyrise dan menjalankan ./install_dependencies.sh
untuk mengunduh submodul yang diperlukan.
Sangat disarankan untuk melakukan build di luar sumber, yaitu membuat direktori terpisah untuk build tersebut. Nama yang disarankan untuk direktori ini adalah cmake-build-{debug,release}
, bergantung pada jenis build. Dalam direktori ini, panggil cmake ..
untuk mengonfigurasi build. Secara default, kami menggunakan flag compiler yang sangat ketat (di luar -Wextra
, termasuk -Werror
). Jika Anda menggunakan salah satu lingkungan yang didukung secara resmi, hal ini seharusnya tidak menjadi masalah. Jika Anda hanya ingin menguji Hyrise pada sistem lain dan mengalami masalah, Anda dapat memanggil cmake -DHYRISE_RELAXED_BUILD=On ..
, yang akan menonaktifkan pemeriksaan ketat ini. Panggilan selanjutnya ke CMake, misalnya, ketika menambahkan file ke build tidak diperlukan, Makefile yang dihasilkan akan menanganinya.
CMake akan menggunakan kompiler default sistem Anda secara default. Untuk menggunakan yang lain, panggil cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ..
dalam direktori build yang bersih. Lihat dependensi untuk versi kompiler yang didukung.
Dimulai dengan cmake 3.16, Anda dapat menggunakan -DCMAKE_UNITY_BUILD=On
untuk melakukan pembangunan kesatuan. Untuk pembangunan (ulang) yang lengkap atau ketika beberapa file harus dibangun kembali, ini biasanya lebih cepat, karena biaya relatif untuk memulai proses kompiler dan memuat header yang paling umum berkurang. Namun, ini hanya masuk akal untuk build debug. Lihat postingan blog kami tentang mengurangi waktu kompilasi untuk detailnya.
Untuk pengembangan, Anda mungkin ingin menggunakan ccache, yang mengurangi waktu yang diperlukan untuk kompilasi ulang secara signifikan. Terutama ketika berpindah cabang, hal ini dapat mengurangi waktu kompilasi ulang dari beberapa menit menjadi satu menit atau kurang. Pada sisi negatifnya, kami telah melihat kegagalan build acak pada server CI kami, itulah sebabnya kami tidak merekomendasikan ccache lagi tetapi hanya mencantumkannya sebagai opsi. Untuk menggunakan ccache, tambahkan -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
ke panggilan cmake Anda. Anda perlu menyesuaikan beberapa pengaturan ccache baik di variabel lingkungan atau di konfigurasi ccache Anda sehingga ccache dapat menangani header yang telah dikompilasi. Di server CI kami, ini berfungsi untuk kami: CCACHE_SLOPPINESS=file_macro,pch_defines,time_macros CCACHE_DEPEND=1
.
Cukup panggil make -j*
, di mana *
menunjukkan jumlah utas yang akan digunakan.
Biasanya biner debug dibuat. Untuk mengonfigurasi direktori build untuk build rilis, pastikan direktori tersebut kosong dan panggil CMake seperti cmake -DCMAKE_BUILD_TYPE=Release
./scripts/lint.sh
(cpplint Google digunakan untuk kode database. Selain itu, kami menggunakan flake8 untuk linting skrip Python di bawah /scripts.)
./scripts/format.sh
(format dentang digunakan untuk kode database. Kami menggunakan warna hitam untuk memformat skrip Python di bawah /scripts.)
Memanggil make hyriseTest
dari direktori build akan membangun semua pengujian yang tersedia. Biner dapat dieksekusi dengan ./<YourBuildDirectory>/hyriseTest
. Subkumpulan dari semua pengujian yang tersedia dapat dipilih melalui --gtest_filter=
.
./scripts/coverage.sh
akan mencetak ringkasan ke baris perintah dan membuat laporan html terperinci di ./coverage/index.html
Memerlukan dentang di macOS dan Linux.
cmake -DENABLE_ADDR_UB_LEAK_SANITIZATION=ON
akan menghasilkan Makefile dengan opsi AddressSanitizer, LeakSanitizer, dan Unfine Behavior. Kompilasi dan jalankan seperti biasa - jika ada masalah yang terdeteksi, masalah tersebut akan dicetak ke konsol. Ini akan gagal pada kesalahan pertama yang terdeteksi dan akan mencetak ringkasan. Untuk mengonversi alamat ke lokasi kode sumber sebenarnya, pastikan llvm-symbolizer diinstal (termasuk dalam paket llvm) dan tersedia di $PATH
. Untuk menentukan lokasi khusus untuk simbol, setel $ASAN_SYMBOLIZER_PATH
ke jalur eksekusi. Ini tampaknya berhasil di macOS - jika tidak, pastikan llvm sudah diinstal. Biner dapat dieksekusi dengan LSAN_OPTIONS=suppressions=asan-ignore.txt ./<YourBuildDirectory>/hyriseTest
.
cmake -DENABLE_THREAD_SANITIZATION=ON
akan berfungsi seperti di atas tetapi dengan ThreadSanitizer. Beberapa pembersih bersifat eksklusif, itulah sebabnya kami menggunakan dua konfigurasi untuk ini.
Saat mencoba mengoptimalkan waktu yang dihabiskan untuk membangun proyek, seringkali berguna jika mengetahui berapa banyak waktu yang dihabiskan di mana. scripts/compile_time.sh
membantu dalam hal itu. Dapatkan instruksi penggunaan dengan menjalankannya tanpa argumen apa pun.
Kontak: nama depan.nama [email protected]