Hyrise es un sistema de base de datos de investigación en memoria desarrollado por HPI desde 2009 y reescrito por completo en 2017. Nuestro objetivo es proporcionar una plataforma limpia y flexible para la investigación en el área de gestión de datos en memoria. Su arquitectura nos permite a nosotros, a nuestros estudiantes y a otros investigadores realizar experimentos en torno a nuevos conceptos de gestión de datos. Para permitir experimentos realistas, Hyrise presenta soporte integral de SQL y realiza potentes optimizaciones del plan de consultas. Los benchmarks más conocidos, como TPC-H o TPC-DS, se pueden ejecutar con un solo comando y sin ninguna preparación.
Este archivo Léame se centra en los aspectos técnicos del repositorio. Para obtener más información sobre nuestra investigación y una lista de publicaciones, visite la página del proyecto Hyrise.
Aún puede encontrar la versión anterior (archivada) de Hyrise en Github.
Al hacer referencia a esta versión de Hyrise, utilice la siguiente entrada 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 está desarrollado para Linux (preferiblemente la versión más actual de Ubuntu) y optimizado para ejecutarse en hardware de servidor. Admitimos Mac para facilitar el desarrollo local de Hyrise, pero no lo recomendamos para realizar evaluaciones comparativas.
Admitimos una serie de puntos de referencia listos para usar. Esto facilita la generación de cifras de rendimiento sin tener que configurar la generación de datos, cargar archivos CSV y buscar un ejecutor de consultas. Puede ejecutarlos utilizando los archivos binarios ./hyriseBenchmark*
.
Tenga en cuenta que los planes de consulta se generan en nuestra canalización de CI con posiblemente muchas etapas en paralelo y se pueden ejecutar diferentes ejecuciones de CI en diferentes máquinas. Los tiempos de ejecución informados no deben tomarse como cifras de rendimiento de referencia sólidas.
Punto de referencia | Notas |
---|---|
TPC-DS | Planes de consulta |
TPC-H | Planes de consulta |
Orden de unión | Planes de consulta |
Esquema de estrella | Planes de consulta |
JCC-H | Llame al binario hyriseBenchmarkTPCH con el indicador -j. |
TPC-C | En desarrollo, aún no se ha realizado una optimización adecuada |
Eche un vistazo a nuestras pautas para contribuyentes .
Puede encontrar definiciones de la mayoría de los términos y abreviaturas utilizadas en el código en el glosario. Si no puede encontrar algo que está buscando, no dude en abrir un problema.
La Guía paso a paso es un buen punto de partida para conocer Hyrise.
Puede instalar las dependencias usted mismo o utilizar el script install_dependencies.sh
( recomendado ) que instala todas las dependencias y submódulos enumerados allí. El script de instalación se probó en macOS Monterey (12.4) y Ubuntu 22.04.
Consulte dependencias para obtener una lista detallada de las dependencias que se pueden usar con brew install
o apt-get install
, según su plataforma. Como compiladores, generalmente utilizamos versiones recientes de clang y gcc (solo Linux). Asegúrese de que el compilador del sistema apunte a la versión más reciente o utilice cmake (ver más abajo) en consecuencia. Es posible que las versiones anteriores funcionen, pero no están probadas ni son compatibles.
Puedes construir Hyrise usando Nix. Para hacerlo, primero instale Nix en su sistema operativo actual. Luego, ejecute el siguiente comando en la raíz del repositorio:
nix-shell resources/nix --pure
Esto lo llevará a un shell con todas las dependencias instaladas. Ahora puedes construir Hyrise como de costumbre. Tenga en cuenta que se recomienda utilizar el indicador --pure
, ya que evita el uso de dependencias del sistema local.
Para obtener más información sobre Nix, consulte Paquetes Nix.
Si desea crear un entorno de desarrollo basado en Docker utilizando CLion, consulte nuestro tutorial dedicado.
De lo contrario, para obtener todas las dependencias de Hyrise en una imagen de Docker, ejecute
docker build -t hyrise .
Puede iniciar el contenedor a través de
docker run -it hyrise
Dentro del contenedor, puede verificar Hyrise y ejecutar ./install_dependencies.sh
para descargar los submódulos necesarios.
Se recomienda encarecidamente realizar compilaciones fuera del código fuente, es decir, crear un directorio separado para la compilación. Los nombres aconsejables para este directorio serían cmake-build-{debug,release}
, según el tipo de compilación. Dentro de este directorio llame cmake ..
para configurar la compilación. De forma predeterminada, utilizamos indicadores de compilación muy estrictos (más allá de -Wextra
, incluido -Werror
). Si utiliza uno de los entornos oficialmente compatibles, esto no debería ser un problema. Si simplemente desea probar Hyrise en un sistema diferente y tiene problemas, puede llamar cmake -DHYRISE_RELAXED_BUILD=On ..
, lo que deshabilitará estas comprobaciones estrictas. Las llamadas posteriores a CMake, por ejemplo, cuando no será necesario agregar archivos a la compilación, los Makefiles generados se encargarán de eso.
CMake utilizará de forma predeterminada el compilador predeterminado de su sistema. Para usar uno diferente, llame cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ..
en un directorio de compilación limpio. Consulte las dependencias para conocer las versiones del compilador compatibles.
A partir de cmake 3.16, puede usar -DCMAKE_UNITY_BUILD=On
para realizar compilaciones de Unity. Para una (re)compilación completa o cuando es necesario reconstruir varios archivos, estos suelen ser más rápidos, ya que se reduce el costo relativo de iniciar un proceso de compilación y cargar los encabezados más comunes. Sin embargo, esto sólo tiene sentido para compilaciones de depuración. Consulte nuestra publicación de blog sobre cómo reducir el tiempo de compilación para obtener más detalles.
Para el desarrollo, es posible que desee utilizar ccache, que reduce significativamente el tiempo necesario para las recompilaciones. Especialmente al cambiar de rama, esto puede reducir el tiempo de recompilación de varios minutos a uno o menos. En el lado negativo, hemos visto fallas de compilación aleatorias en nuestro servidor CI, por lo que ya no recomendamos ccache sino que simplemente lo incluimos como una opción. Para usar ccache, agregue -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
a su llamada cmake. Necesitará ajustar algunas configuraciones de ccache ya sea en sus variables de entorno o en su configuración de ccache para que ccache pueda manejar los encabezados precompilados. En nuestro servidor CI, esto funcionó para nosotros: CCACHE_SLOPPINESS=file_macro,pch_defines,time_macros CCACHE_DEPEND=1
.
Simplemente llame make -j*
, donde *
indica la cantidad de subprocesos a usar.
Normalmente se crean binarios de depuración. Para configurar un directorio de compilación para una versión de lanzamiento, asegúrese de que esté vacío y llame a CMake como cmake -DCMAKE_BUILD_TYPE=Release
./scripts/lint.sh
(cpplint de Google se usa para el código de la base de datos. Además, usamos flake8 para linting los scripts de Python en /scripts).
./scripts/format.sh
(el formato clang se usa para el código de la base de datos. Usamos negro para formatear los scripts de Python en /scripts).
Llamar make hyriseTest
desde el directorio de compilación genera todas las pruebas disponibles. El binario se puede ejecutar con ./<YourBuildDirectory>/hyriseTest
. Se pueden seleccionar subconjuntos de todas las pruebas disponibles mediante --gtest_filter=
.
./scripts/coverage.sh
imprimirá un resumen en la línea de comando y creará informes html detallados en ./coverage/index.html
Requiere sonido metálico en macOS y Linux.
cmake -DENABLE_ADDR_UB_LEAK_SANITIZATION=ON
generará Makefiles con las opciones AddressSanitizer, LeakSanitizer y Comportamiento no definido. Compílelos y ejecútelos normalmente; si se detecta algún problema, se imprimirán en la consola. Fallará en el primer error detectado e imprimirá un resumen. Para convertir direcciones a ubicaciones reales del código fuente, asegúrese de que llvm-symbolizer esté instalado (incluido en el paquete llvm) y esté disponible en $PATH
. Para especificar una ubicación personalizada para el simbolizador, establezca $ASAN_SYMBOLIZER_PATH
en la ruta del ejecutable. Esto parece funcionar de inmediato en macOS; si no, asegúrese de tener llvm instalado. El binario se puede ejecutar con LSAN_OPTIONS=suppressions=asan-ignore.txt ./<YourBuildDirectory>/hyriseTest
.
cmake -DENABLE_THREAD_SANITIZATION=ON
funcionará como se indica arriba pero con ThreadSanitizer. Algunos desinfectantes son mutuamente excluyentes, por eso utilizamos dos configuraciones para ello.
Al intentar optimizar el tiempo dedicado a la construcción del proyecto, suele ser útil tener una idea de cuánto tiempo se dedica y dónde. scripts/compile_time.sh
ayuda con eso. Obtenga instrucciones de uso ejecutándolo sin ningún argumento.
Contacto: [email protected]