Código fuente para la presentación del artículo ICDE 2023: "Indexación de datos casi ordenados"
El repositorio contiene el código fuente para las implementaciones de B+tree y SWARE. En la versión actual del código, ambas implementaciones son genéricas, pero los archivos de aplicación que prueban estas estructuras de datos de índice solo admiten tipos de datos enteros. Además, los archivos de la aplicación utilizan el mismo valor tanto para la clave como para el valor de cada entrada. Las futuras extensiones del código admitirán tipos de datos más grandes.
Ambas estructuras de datos requieren una asignación de grupo de búfer mientras se ejecuta el código, que se puede ampliar a la cantidad requerida si es necesario para ejecutarse completamente en la memoria. La asignación del grupo de búfer se proporciona en términos de número de bloques, donde cada bloque tiene 4 KB. Por ejemplo, si utiliza una asignación de bloques de 1 M, entonces está asignando 1 M*4 KB = 4 GB de memoria para la estructura de datos del árbol.
El árbol SA B+ también requiere la cantidad de entradas que su búfer en memoria puede contener mientras se ejecuta el programa, junto con el factor de llenado que se debe mantener durante la carga masiva. Cada entrada es un par clave-valor.
Utilice el generador de datos de clasificación de este repositorio: https://github.com/BU-DiSC/bods para generar claves de ingesta (puede especificar tamaño de carga = 0 para generar solo claves). Como se mencionó anteriormente, los archivos de la aplicación usan el mismo valor tanto para la clave como para el valor de cada entrada (par K, V). Tenga en cuenta la ruta a la carga de trabajo generada.
./ test_base_index < ingestion_workload_path > < output_file_name > < buffer_pool_allocation > < K > < L > < #. queries >
Por ejemplo, usarías:
./ test_base_index createdata_1000000 - elems_100000 - K_100000 - L_1seed1632764083 . dat sample . txt 1000000 100000 100000 200000
Aquí, estamos ingiriendo una carga de trabajo de 1 millón de entradas/claves con K=L=100.000. Estamos utilizando un caché de grupo de búfer para bloques de 1 millón y estamos ejecutando consultas de 200.000 puntos. Las latencias de salida para las consultas puntuales y de ingesta se escriben en "sample.txt".
./ test_satree < ingestion_workload_path > < output_file_name > < buffer_pool_allocation > < K > < L > < #. entries > < swareBuffer allocation > < fill factor % > < #. queries >
Por ejemplo, usarías:
/ test_satree createdata_1000000 - elems_10 - K_10 - L_1seed1632764083 . dat swaresample . txt 1000000 10 10 1000000 10000 95 200000
Aquí, estamos ingiriendo una carga de trabajo de 1 millón de entradas/claves con K=L=100.000 (10% del total de entradas). Estamos utilizando un caché de grupo de búfer para bloques de 1 millón y estamos ejecutando consultas de 200.000 puntos. Las latencias de salida para las consultas puntuales y de ingesta se escriben en "swaresample.txt". El búfer en memoria contendrá 10 000 entradas (1 % de 1 millón) y mantenemos un factor de llenado del 95 %.