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 ที่แตกต่างกันอาจถูกดำเนินการบนเครื่องที่แตกต่างกัน รันไทม์ที่รายงานไม่ถือเป็นตัวเลขประสิทธิภาพการวัดประสิทธิภาพที่ชัดเจน
เกณฑ์มาตรฐาน | หมายเหตุ |
---|---|
ทีพีซี-ดีเอส | แผนแบบสอบถาม |
ทีพีซี-เอช | แผนแบบสอบถาม |
เข้าร่วมสั่งซื้อ | แผนแบบสอบถาม |
สตาร์สคีมา | แผนแบบสอบถาม |
เจซีซี-เอช | เรียกไบนารี 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
สิ่งนี้จะนำคุณเข้าสู่เชลล์โดยติดตั้งการขึ้นต่อกันทั้งหมด ตอนนี้คุณสามารถสร้าง Hyrise ได้ตามปกติ โปรดทราบว่าแนะนำให้ใช้แฟล็ก --pure
เนื่องจากจะหลีกเลี่ยงการพึ่งพาจากระบบโลคัล
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ Nix โปรดดู Nix Package
หากคุณต้องการสร้างสภาพแวดล้อมการพัฒนาบน 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 ครั้งต่อไป เช่น เมื่อไม่จำเป็นต้องเพิ่มไฟล์ลงในบิลด์ Makefiles ที่สร้างขึ้นจะดูแลเรื่องนั้น
CMake จะใช้ค่าเริ่มต้นเป็นคอมไพเลอร์เริ่มต้นของระบบของคุณ หากต้องการใช้อันอื่น ให้เรียก cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ..
ในไดเร็กทอรี build ใหม่ทั้งหมด ดูการขึ้นต่อกันสำหรับเวอร์ชันคอมไพเลอร์ที่รองรับ
เริ่มต้นจาก 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*
โดยที่ *
หมายถึงจำนวนเธรดที่จะใช้
โดยปกติแล้ว ไบนารีดีบักจะถูกสร้างขึ้น ในการกำหนดค่าไดเร็กทอรี build สำหรับ build release ตรวจสอบให้แน่ใจว่าว่างเปล่าและเรียก CMake เช่น cmake -DCMAKE_BUILD_TYPE=Release
./scripts/lint.sh
(cpplint ของ Google ใช้สำหรับโค้ดฐานข้อมูล นอกจากนี้ เรายังใช้ flake8 สำหรับการ Linting สคริปต์ Python ภายใต้ /scripts)
./scripts/format.sh
(รูปแบบเสียงดังกราวใช้สำหรับรหัสฐานข้อมูล เราใช้ สีดำ ในการจัดรูปแบบสคริปต์ Python ภายใต้ /scripts)
การเรียก make hyriseTest
จากไดเร็กทอรี build จะสร้างการทดสอบที่มีอยู่ทั้งหมด ไบนารีสามารถดำเนินการได้ด้วย ./<YourBuildDirectory>/hyriseTest
/hyriseTest สามารถเลือกชุดย่อยของการทดสอบที่มีอยู่ทั้งหมดได้ทาง --gtest_filter=
./scripts/coverage.sh
จะพิมพ์สรุปไปยังบรรทัดคำสั่งและสร้างรายงาน html โดยละเอียดที่ ./coverage/index.html
ต้องใช้เสียงดังกราวบน macOS และ Linux
cmake -DENABLE_ADDR_UB_LEAK_SANITIZATION=ON
จะสร้าง Makefiles ด้วยตัวเลือก AddressSanitizer, LeakSanitizer และ Unknown 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
ช่วยในเรื่องนั้น รับคำแนะนำการใช้งานโดยเรียกใช้โดยไม่มีข้อโต้แย้งใดๆ
ติดต่อ: [email protected]