Home

Awesome

rtree benchmark

A comprehensive understanding of the rtree's performance need a comprehensive benchmark.

Dave Moten provides us an awesome pure-java implementation of rtree, which supports multiple split strategies (e.g. quadratic and R*-tree huristics) and features (e.g. STR bulk loading and Flatbuffers backed structure). This project is created to present a comprehensive performance evaluation on the various rtree types.

Note: this is an on-going work, helps or suggests are very appreciated.

How to run

The project is based on jmh, and is supported to be used as the official guide recommends:

$ mvn clean install
$ java -jar target/microbenchmarks.jar

Important note: since currently this benchmark runs on a snapshot version of rtree (to test the feature of STR bulk loading), you may need to pull the latest code from master branch of the rtree project and build and deploy the snapshot maven library to your local environment.

Results

We conduct the experiments on a desktop server with:

The experiments are conducted on two datasets:

The benchmarked rtree types are:

We test the performane of several operations on each type of rtree against various maxChildren parameter. TODO: we should test the performance against dataset size.

The results are plotted with plot.py and are presented as below.

Note: since the creation time of indexes span a large range, we use a logarithmic scale for the y axis.

Greek1k
<img src="results/createIndex_Greek.png?raw=true" /><img src="results/createIndex_1k.png?raw=true" />
<img src="results/insertOne_Greek.png?raw=true" /><img src="results/insertOne_1k.png?raw=true" />
<img src="results/insertBatch_Greek.png?raw=true" /><img src="results/insertBatch_1k.png?raw=true" />
<img src="results/deleteOne_Greek.png?raw=true" /><img src="results/deleteOne_1k.png?raw=true" />
<img src="results/deleteBatch_Greek.png?raw=true" /><img src="results/deleteBatch_1k.png?raw=true" />
<img src="results/searchOne_Greek.png?raw=true" /><img src="results/searchOne_1k.png?raw=true" />
<img src="results/searchOneBackpressure_Greek.png?raw=true" /><img src="results/searchOneBackpressure_1k.png?raw=true" />
<img src="results/searchNearest_Greek.png?raw=true" /><img src="results/searchNearest_1k.png?raw=true" />

Full results are presented in rtreebm.txt.

Analysis

Creation
Insertion
Deletion
Range Search
Nearest Search