Este projeto contém o protótipo do sistema de banco de dados descrito em
Speedy Transactions in Multicore In-Memory Databases Stephen Tu, Wenting Zheng, Eddie Kohler, Barbara Liskov, Samuel Madden SOSP 2013. http://people.csail.mit.edu/stephentu/papers/silo.pdf
Este código é um trabalho contínuo em andamento.
Existem diversas opções para construir. MODE
é uma variável importante que rege o tipo de construção. O padrão é MODE=perf
, veja o Makefile para mais opções. DEBUG=1
aciona uma compilação de depuração (desativada por padrão). CHECK_INVARIANTS=1
ativa a verificação invariável. Existem dois alvos: o alvo padrão que constrói o conjunto de testes e dbtest
que constrói o conjunto de benchmarks. Exemplos:
MODE=perf DEBUG=1 CHECK_INVARIANTS=1 make -j MODE=perf make -j dbtest
Cada combinação diferente de MODE
, DEBUG
e CHECK_INVARIANTS
aciona um diretório de saída exclusivo; por exemplo, o primeiro comando acima é construído para out-perf.debug.check.masstree
.
O Silo agora usa Masstree por padrão como árvore de índice padrão. Para usar a árvore antiga, defina MASSTREE=0
.
Para executar os testes, basta invocar <outdir>/test
sem argumentos. Para executar o conjunto de benchmarks, invoque <outdir>/benchmarks/dbtest
. Por enquanto, procure em benchmarks/dbtest.cc
a documentação sobre os argumentos da linha de comando. Um exemplo de invocação para TPC-C é:
<outdir>/benchmarks/dbtest --verbose --bench tpcc --num-threads 28 --scale-factor 28 --runtime 30 --numa-memory 112G
Para reproduzir os gráficos do papel:
$ cd benchmarks $ python runner.py /unused-dir <results-file-prefix>
Se você definir DRYRUN=True
em runner.py
, poderá ver todos os comandos que seriam emitidos pelo script de benchmark.