Código-fonte para envio de artigo ICDE 2023: "Indexing for Near Sorted Data"
O repositório contém o código-fonte para implementações B+tree e SWARE. Na versão atual do código, ambas as implementações são genéricas, mas os arquivos de aplicação que testam essas estruturas de dados de índice suportam apenas tipos de dados inteiros. Além disso, os arquivos do aplicativo usam o mesmo valor para chave e valor de cada entrada. Extensões futuras do código suportarão tipos de dados maiores.
Ambas as estruturas de dados requerem uma alocação de buffer pool durante a execução do código, que pode ser estendido até a quantidade necessária, se necessário, para ser executado completamente na memória. A alocação do buffer pool é dada em termos de número de blocos, onde cada bloco tem 4 KB. Por exemplo, se você usar uma alocação de blocos de 1 milhão, estará alocando 1 milhão * 4 KB = 4 GB de memória para a estrutura de dados em árvore.
A árvore SA B+ também requer o número de entradas que seu buffer na memória pode conter durante a execução do programa, junto com o fator de preenchimento a ser mantido durante o carregamento em massa. Cada entrada é um par de valores-chave.
Use o gerador de dados de classificação deste repositório: https://github.com/BU-DiSC/bods para gerar chaves de ingestão (pode especificar o tamanho da carga = 0 para gerar apenas chaves). Conforme mencionado acima, os arquivos do aplicativo usam o mesmo valor para a chave e o valor de cada entrada (par K,V). Observe o caminho para a carga de trabalho gerada.
./ test_base_index < ingestion_workload_path > < output_file_name > < buffer_pool_allocation > < K > < L > < #. queries >
Por exemplo, você usaria:
./ test_base_index createdata_1000000 - elems_100000 - K_100000 - L_1seed1632764083 . dat sample . txt 1000000 100000 100000 200000
Aqui, estamos ingerindo uma carga de trabalho de 1 milhão de entradas/chaves com K=L=100.000. Estamos usando um cache de buffer pool para blocos de 1 milhão e executando consultas de 200.000 pontos. As latências de saída para ingestão e consultas pontuais são gravadas em "sample.txt".
./ test_satree < ingestion_workload_path > < output_file_name > < buffer_pool_allocation > < K > < L > < #. entries > < swareBuffer allocation > < fill factor % > < #. queries >
Por exemplo, você usaria:
/ test_satree createdata_1000000 - elems_10 - K_10 - L_1seed1632764083 . dat swaresample . txt 1000000 10 10 1000000 10000 95 200000
Aqui, estamos ingerindo uma carga de trabalho de 1 milhão de entradas/chaves com K=L=100.000 (10% do total de entradas). Estamos usando um cache de buffer pool para blocos de 1 milhão e executando consultas de 200.000 pontos. As latências de saída para ingestão e consultas pontuais são gravadas em "swaresample.txt". O buffer na memória armazenará 10.000 entradas (1% de 1 milhão) e mantemos um fator de preenchimento de 95%.