Hyrise é um sistema de banco de dados de pesquisa em memória desenvolvido pela HPI desde 2009 e totalmente reescrito em 2017. Nosso objetivo é fornecer uma plataforma limpa e flexível para pesquisas na área de gerenciamento de dados em memória. Sua arquitetura permite que nós, nossos alunos e outros pesquisadores conduzamos experimentos em torno de novos conceitos de gerenciamento de dados. Para permitir experimentos realistas, o Hyrise oferece suporte SQL abrangente e realiza otimizações poderosas do plano de consulta. Benchmarks conhecidos, como TPC-H ou TPC-DS, podem ser executados com um único comando e sem qualquer preparação.
Este arquivo leia-me concentra-se nos aspectos técnicos do repositório. Para obter mais informações sobre nossa pesquisa e obter uma lista de publicações, visite a página do projeto Hyrise.
Você ainda pode encontrar a versão anterior (arquivada) do Hyrise no Github.
Ao fazer referência a esta versão do Hyrise, use a seguinte 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 é desenvolvido para Linux (de preferência a versão mais atual do Ubuntu) e otimizado para rodar em hardware de servidor. Apoiamos o Mac para facilitar o desenvolvimento local do Hyrise, mas não o recomendamos para benchmarking.
Oferecemos suporte a vários benchmarks prontos para uso. Isso facilita a geração de números de desempenho sem a necessidade de configurar a geração de dados, carregar CSVs e encontrar um executor de consulta. Você pode executá-los usando os binários ./hyriseBenchmark*
.
Observe que os planos de consulta são gerados em nosso pipeline de CI com possivelmente muitos estágios em paralelo e diferentes execuções de CI podem ser executadas em máquinas diferentes. Os tempos de execução relatados não devem ser considerados números sólidos de desempenho de referência.
Referência | Notas |
---|---|
TPC-DS | Planos de consulta |
TPC-H | Planos de consulta |
Junte-se ao pedido | Planos de consulta |
Esquema Estrela | Planos de consulta |
JCC-H | Chame o binário hyriseBenchmarkTPCH com o sinalizador -j. |
TPC-C | Em desenvolvimento, nenhuma otimização adequada foi feita ainda |
Dê uma olhada em nossas diretrizes para contribuidores .
Você pode encontrar definições da maioria dos termos e abreviações usadas no código no glossário. Se você não conseguir encontrar o que procura, sinta-se à vontade para abrir uma edição.
O Guia Passo a Passo é um bom ponto de partida para conhecer Hyrise.
Você pode instalar as dependências por conta própria ou usar o script install_dependencies.sh
( recomendado ) que instala todas as dependências e submódulos listados nele. O script de instalação foi testado no macOS Monterey (12.4) e no Ubuntu 22.04.
Consulte as dependências para obter uma lista detalhada de dependências para usar com brew install
ou apt-get install
, dependendo da sua plataforma. Como compiladores, geralmente usamos versões recentes do clang e do gcc (somente Linux). Certifique-se de que o compilador do sistema aponte para a versão mais recente ou use cmake (veja abaixo) de acordo. Versões mais antigas podem funcionar, mas não são testadas nem suportadas.
Você pode construir Hyrise usando Nix. Para fazer isso, primeiro instale o Nix em seu sistema operacional atual. Depois, execute o seguinte comando na raiz do repositório:
nix-shell resources/nix --pure
Isso o colocará em um shell com todas as dependências instaladas. Agora você pode construir o Hyrise normalmente. Observe que o uso do sinalizador --pure
é recomendado, pois evita o uso de dependências do sistema local.
Para obter mais informações sobre Nix, consulte Pacotes Nix.
Se você deseja criar um ambiente de desenvolvimento baseado em Docker usando CLion, acesse nosso tutorial dedicado.
Caso contrário, para obter todas as dependências do Hyrise em uma imagem Docker, execute
docker build -t hyrise .
Você pode iniciar o contêiner via
docker run -it hyrise
Dentro do contêiner, você pode fazer check-out do Hyrise e executar ./install_dependencies.sh
para baixar os submódulos necessários.
É altamente recomendado realizar compilações fora do código-fonte, ou seja, criar um diretório separado para a compilação. Nomes aconselháveis para este diretório seriam cmake-build-{debug,release}
, dependendo do tipo de compilação. Dentro deste diretório chame cmake ..
para configurar a compilação. Por padrão, usamos sinalizadores de compilador muito rígidos (além de -Wextra
, incluindo -Werror
). Se você usar um dos ambientes com suporte oficial, isso não deverá ser um problema. Se você simplesmente deseja testar o Hyrise em um sistema diferente e encontrar problemas, você pode chamar cmake -DHYRISE_RELAXED_BUILD=On ..
, o que desabilitará essas verificações rigorosas. Chamadas subsequentes ao CMake, por exemplo, ao adicionar arquivos ao build não serão necessárias, os Makefiles gerados cuidarão disso.
O CMake usará como padrão o compilador padrão do seu sistema. Para usar um diferente, chame cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ..
em um diretório de construção limpo. Consulte as dependências para ver as versões do compilador suportadas.
A partir do cmake 3.16, você pode usar -DCMAKE_UNITY_BUILD=On
para realizar compilações de unidade. Para uma (re)construção completa ou quando vários arquivos precisam ser reconstruídos, isso geralmente é mais rápido, pois o custo relativo de iniciar um processo de compilador e carregar os cabeçalhos mais comuns é reduzido. No entanto, isso só faz sentido para compilações de depuração. Veja nossa postagem no blog sobre como reduzir o tempo de compilação para obter detalhes.
Para desenvolvimento, você pode querer usar o ccache, o que reduz significativamente o tempo necessário para recompilações. Especialmente ao trocar de ramificação, isso pode reduzir o tempo de recompilação de vários minutos para um ou menos. Por outro lado, vimos falhas aleatórias de compilação em nosso servidor de CI, e é por isso que não recomendamos mais o ccache, apenas o listamos como uma opção. Para usar o ccache, adicione -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
à sua chamada cmake. Você precisará ajustar algumas configurações do ccache nas variáveis de ambiente ou na configuração do ccache para que o ccache possa lidar com os cabeçalhos pré-compilados. Em nosso servidor CI, isso funcionou para nós: CCACHE_SLOPPINESS=file_macro,pch_defines,time_macros CCACHE_DEPEND=1
.
Basta chamar make -j*
, onde *
indica o número de threads a serem usados.
Normalmente são criados binários de depuração. Para configurar um diretório de compilação para uma compilação de lançamento, certifique-se de que esteja vazio e chame o CMake como cmake -DCMAKE_BUILD_TYPE=Release
./scripts/lint.sh
(o cpplint do Google é usado para o código do banco de dados. Além disso, usamos flake8 para lintar os scripts Python em /scripts.)
./scripts/format.sh
(clang-format é usado para o código do banco de dados. Usamos preto para formatar os scripts Python em /scripts.)
Chamar make hyriseTest
do diretório de construção cria todos os testes disponíveis. O binário pode ser executado com ./<YourBuildDirectory>/hyriseTest
. Subconjuntos de todos os testes disponíveis podem ser selecionados via --gtest_filter=
.
./scripts/coverage.sh
imprimirá um resumo na linha de comando e criará relatórios HTML detalhados em ./coverage/index.html
Requer clang no macOS e Linux.
cmake -DENABLE_ADDR_UB_LEAK_SANITIZATION=ON
irá gerar Makefiles com opções AddressSanitizer, LeakSanitizer e Comportamento indefinido. Compile e execute-os normalmente - se algum problema for detectado, eles serão impressos no console. Ele falhará no primeiro erro detectado e imprimirá um resumo. Para converter endereços em locais reais de código-fonte, certifique-se de que o llvm-symbolizer esteja instalado (incluído no pacote llvm) e esteja disponível em $PATH
. Para especificar um local personalizado para o simbolizador, defina $ASAN_SYMBOLIZER_PATH
como o caminho do executável. Isso parece funcionar imediatamente no macOS - caso contrário, certifique-se de ter o llvm instalado. O binário pode ser executado com LSAN_OPTIONS=suppressions=asan-ignore.txt ./<YourBuildDirectory>/hyriseTest
.
cmake -DENABLE_THREAD_SANITIZATION=ON
funcionará como acima, mas com o ThreadSanitizer. Alguns desinfetantes são mutuamente exclusivos, por isso utilizamos duas configurações para isso.
Ao tentar otimizar o tempo gasto na construção do projeto, muitas vezes é útil ter uma ideia de quanto tempo é gasto e onde. scripts/compile_time.sh
ajuda com isso. Obtenha instruções de uso executando-o sem argumentos.
Contato: [email protected]