This is the testbed used for experimental evaluation as presented in the paper "Dynamic Indexing Through Learned Indices with Worst-case Guarantees". It contains scripts to generate synthetic data, summary statistics, as well as perform evaluations of performance in dynamic scenarios. Included is also a rudimentary tool to replicate plots as shown in the paper, as well as parse OSM data.
The bench contains various compile-time options to control parameters such as the
EPSILON=xsets the value of epsilon to xMODEL={0,1}determines the used index. SettingMODEL=0uses the dynamic PGM, otherwise our index is usedOPT={true,false}settingOPT=trueuses slanted line segments, whereasfalseuses vertical.NOSTORE={true,false}controls if the index should also provide a storage structure for queries,
To manually run tests, simply run a binary with the following program arguments, and supply the data through standard in:
RUN X Y Zruns the dynamic update scenario with X operations, query ratio Y and insertion ratio (of the remaining operations) Z.ADV Xruns the adversarial dynamic scenario with X query operations following deletionsCOUNT Xruns linecounting, reporting the number of segments every X insertions.
We provide a number of scripts to automate things. Each is located in, and should be executed from, the repository root.
By default the tests run on every .data file found in the data/ folder, saving output to files in the out/ folder.
./build_bench.shcompiles and builds the various versions of learned indices, storing the resulting binaries in/bin../run.shruns the dynamic scenarios as described in the paper../linecount.shruns the summary statistics test.
We provide a very rudimentary tool for generating plots. The Python program output_parser.py can be used to reproduce our plots by running cat outputfile | python3 output_parser.py. The type of plot is determined by the filetype of the outputfile (.linecountfor linecounts, .run for dynamic tests).