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]