Packages

Distributed Dynamic R-tree (DDRT) implementation for Elixir. It's mainly a R-tree. Why dynamic? Because it's optimized to do fast updates at the tree leafs spatial index. Why distributed? Well.. you can run the DDRT on different nodes and they will have the same r-tree data.

Retired package: Renamed - Package name was changed, look for 'ddrt' hex package to get it. https://hex.pm/packages/ddrt

Current section

Files

Jump to
dynamic_rtree README.md
Raw

README.md

[![CircleCI](https://circleci.com/gh/windfish-studio/rtree/tree/master.svg?style=svg)](https://circleci.com/gh/windfish-studio/rtree/tree/master)
![LICENSE](https://img.shields.io/hexpm/l/dynamic_rtree)
![VERSION](https://img.shields.io/hexpm/v/dynamic_rtree)
# DynamicRtree

 This is the API module of the elixir r-tree implementation where you can do the basic actions.

  ## Actions provided:
  ```elixir
      - insert/2
      - query/2
      - query/3
      - delete/2
      - update_leaf/3
      - execute/1
   ```

## Installation

The package can be installed
by adding `dynamic_rtree` to your list of dependencies in `mix.exs`:

```elixir
def deps do
  [
    {:dynamic_rtree, "~> 0.1.0"}
  ]
end
```
## Usage

Everything is well defined and pretty at [documentation](https://hexdocs.pm/dynamic_rtree/0.1.0/Drtree.html).

You can also find the hex package [here](https://hex.pm/packages/dynamic_rtree/0.1.0).

## Benchmarking

### Delete
```elixir
Operating System: macOS
CPU Information: Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz
Number of Available Cores: 4
Available memory: 8 GB
Elixir 1.9.0
Erlang 22.0.7

Benchmark suite executing with the following configuration:
warmup: 2 s
time: 5 s
memory time: 0 ns
parallel: 1
inputs: tree [1000], tree [10000], tree [100000]
Estimated total run time: 21 s

Benchmarking delete [random leaf] with input tree [1000]...
Benchmarking delete [random leaf] with input tree [10000]...
Benchmarking delete [random leaf] with input tree [100000]...

##### With input tree [1000] #####
Name                           ips        average  deviation         median         99th %
delete [random leaf]      102.55 K        9.75 μs    ±65.82%           9 μs       60.94 μs

##### With input tree [10000] #####
Name                           ips        average  deviation         median         99th %
delete [random leaf]       33.06 K       30.25 μs     ±3.91%          30 μs          32 μs

##### With input tree [100000] #####
Name                           ips        average  deviation         median         99th %
delete [random leaf]          40 K          25 μs    ±22.63%          25 μs          29 μs
```

### Update
```elixir
Operating System: macOS
CPU Information: Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz
Number of Available Cores: 4
Available memory: 8 GB
Elixir 1.9.0
Erlang 22.0.7

Benchmark suite executing with the following configuration:
warmup: 2 s
time: 10 s
memory time: 0 ns
parallel: 1
inputs: tree [1000], tree [10000], tree [100000]
Estimated total run time: 36 s

Benchmarking continuous update with input tree [1000]...
Benchmarking continuous update with input tree [10000]...
Benchmarking continuous update with input tree [100000]...

##### With input tree [1000] #####
Name                        ips        average  deviation         median         99th %
continuous update        115.17        8.68 ms    ±40.88%        7.45 ms       25.37 ms

##### With input tree [10000] #####
Name                        ips        average  deviation         median         99th %
continuous update         12.70       78.74 ms     ±7.45%       76.99 ms       91.57 ms

##### With input tree [100000] #####
Name                        ips        average  deviation         median         99th %
continuous update          0.93         1.08 s     ±7.94%         1.05 s         1.24 s
```
### Query
```elixir
Operating System: macOS
CPU Information: Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz
Number of Available Cores: 4
Available memory: 8 GB
Elixir 1.9.0
Erlang 22.0.7

Benchmark suite executing with the following configuration:
warmup: 2 s
time: 5 s
memory time: 0 ns
parallel: 1
inputs: 100x100 box query, 10x10 box query, 1x1 box query, world box query
Estimated total run time: 1.40 min

Benchmarking tree [1000 leafs] with input 100x100 box query...
Benchmarking tree [1000 leafs] with input 10x10 box query...
Benchmarking tree [1000 leafs] with input 1x1 box query...
Benchmarking tree [1000 leafs] with input world box query...
Benchmarking tree [10000 leafs] with input 100x100 box query...
Benchmarking tree [10000 leafs] with input 10x10 box query...
Benchmarking tree [10000 leafs] with input 1x1 box query...
Benchmarking tree [10000 leafs] with input world box query...
Benchmarking tree [100000 leafs] with input 100x100 box query...
Benchmarking tree [100000 leafs] with input 10x10 box query...
Benchmarking tree [100000 leafs] with input 1x1 box query...
Benchmarking tree [100000 leafs] with input world box query...

##### With input 100x100 box query #####
Name                          ips        average  deviation         median         99th %
tree [1000 leafs]         2786.01        0.36 ms    ±42.21%        0.31 ms        0.98 ms
tree [10000 leafs]         263.88        3.79 ms    ±71.01%        3.12 ms       14.39 ms
tree [100000 leafs]         27.65       36.16 ms    ±31.55%       31.64 ms      100.82 ms

Comparison: 
tree [1000 leafs]         2786.01
tree [10000 leafs]         263.88 - 10.56x slower +3.43 ms
tree [100000 leafs]         27.65 - 100.75x slower +35.80 ms

##### With input 10x10 box query #####
Name                          ips        average  deviation         median         99th %
tree [1000 leafs]          7.56 K      132.32 μs   ±268.69%         107 μs      367.48 μs
tree [10000 leafs]         1.52 K      658.95 μs   ±175.00%         500 μs     2302.66 μs
tree [100000 leafs]        0.27 K     3728.35 μs    ±24.95%        3482 μs     6102.92 μs

Comparison: 
tree [1000 leafs]          7.56 K
tree [10000 leafs]         1.52 K - 4.98x slower +526.63 μs
tree [100000 leafs]        0.27 K - 28.18x slower +3596.03 μs

##### With input 1x1 box query #####
Name                          ips        average  deviation         median         99th %
tree [1000 leafs]         11.80 K       84.77 μs   ±208.07%          67 μs         311 μs
tree [10000 leafs]         2.49 K      401.61 μs   ±138.07%         289 μs     1539.88 μs
tree [100000 leafs]        0.81 K     1237.44 μs    ±66.31%        1051 μs     3267.45 μs

Comparison: 
tree [1000 leafs]         11.80 K
tree [10000 leafs]         2.49 K - 4.74x slower +316.84 μs
tree [100000 leafs]        0.81 K - 14.60x slower +1152.67 μs

##### With input world box query #####
Name                          ips        average  deviation         median         99th %
tree [1000 leafs]         3048.78        0.33 ms    ±41.19%        0.29 ms        0.81 ms
tree [10000 leafs]         323.73        3.09 ms    ±14.12%        2.94 ms        4.90 ms
tree [100000 leafs]         15.93       62.79 ms     ±7.50%       62.05 ms       93.63 ms

Comparison: 
tree [1000 leafs]         3048.78
tree [10000 leafs]         323.73 - 9.42x slower +2.76 ms
tree [100000 leafs]         15.93 - 191.43x slower +62.46 ms

```

### Insert
```elixir
Operating System: macOS
CPU Information: Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz
Number of Available Cores: 4
Available memory: 8 GB
Elixir 1.9.0
Erlang 22.0.7

Benchmark suite executing with the following configuration:
warmup: 2 s
time: 5 s
memory time: 0 ns
parallel: 1
inputs: 1000 leafs, 10000 leafs, 100000 leafs
Estimated total run time: 42 s

Benchmarking tree [100000] with input 1000 leafs...
Benchmarking tree [100000] with input 10000 leafs...
Benchmarking tree [100000] with input 100000 leafs...
Benchmarking tree [empty] with input 1000 leafs...
Benchmarking tree [empty] with input 10000 leafs...
Benchmarking tree [empty] with input 100000 leafs...

##### With input 1000 leafs #####
Name                    ips        average  deviation         median         99th %
tree [empty]          33.16       30.16 ms    ±57.33%       27.06 ms      175.02 ms
tree [100000]          8.15      122.63 ms     ±0.00%      122.63 ms      122.63 ms

Comparison: 
tree [empty]          33.16
tree [100000]          8.15 - 4.07x slower +92.47 ms

##### With input 10000 leafs #####
Name                    ips        average  deviation         median         99th %
tree [empty]           2.44      410.03 ms    ±28.11%      363.34 ms      737.25 ms
tree [100000]          2.27      441.37 ms     ±0.00%      441.37 ms      441.37 ms

Comparison: 
tree [empty]           2.44
tree [100000]          2.27 - 1.08x slower +31.34 ms

##### With input 100000 leafs #####
Name                    ips        average  deviation         median         99th %
tree [empty]           0.22         4.56 s     ±7.30%         4.56 s         4.80 s
tree [100000]         0.158         6.35 s     ±0.00%         6.35 s         6.35 s

Comparison: 
tree [empty]           0.22
tree [100000]         0.158 - 1.39x slower +1.78 s
```