README.org
#+TITLE: map_sets
[[https://travis-ci.org/k32/map_sets.svg?branch=master]]
It's a drop-in replacement of OTP =sets= module based on maps. It's
much faster and simpler, as it makes heavy use of =maps= module's
BIFs.
=sets= interface and sematics are fully preserved, so it should be
sufficient to just use replace =sets= with =map_sets= in your codebase
via sed.
* Benchmarks
A few unscientific crude benchamarks:
#+BEGIN_SRC txt
Operating System: Linux
CPU Information: Intel(R) Core(TM) i5-4460 CPU @ 3.20GHz
Number of Available Cores: 4
Available memory: 7.74 GB
Elixir 1.7.4
Erlang 20.3.8.9
Benchmark suite executing with the following configuration:
warmup: 2 s
time: 10 s
memory time: 2 s
parallel: 1
inputs: none specified
Estimated total run time: 28 s
Benchmarking map_sets empty intersection...
Benchmarking sets empty intersection...
Name ips average deviation median 99th %
map_sets empty intersection 1.10 K 0.91 ms ±21.91% 0.84 ms 1.16 ms
sets empty intersection 0.62 K 1.62 ms ±3.55% 1.62 ms 1.74 ms
Comparison:
map_sets empty intersection 1.10 K
sets empty intersection 0.62 K - 1.79x slower
Memory usage statistics:
Name Memory usage
map_sets empty intersection 0.109 KB
sets empty intersection 173.25 KB - 1584.00x memory usage
Name ips average deviation median 99th %
sets intersection 573.98 1.74 ms ±6.34% 1.72 ms 2.15 ms
map_sets intersection 464.68 2.15 ms ±26.53% 2.15 ms 4.20 ms
Comparison:
sets intersection 573.98
map_sets intersection 464.68 - 1.24x slower
Memory usage statistics:
Name Memory usage
sets intersection 0.25 MB
map_sets intersection 1.18 MB - 4.80x memory usage
Name ips average deviation median 99th %
map_sets union 2.93 K 0.34 ms ±24.78% 0.29 ms 0.50 ms
sets union 0.23 K 4.26 ms ±10.48% 4.14 ms 5.74 ms
Comparison:
map_sets union 2.93 K
sets union 0.23 K - 12.47x slower
Memory usage statistics:
Name Memory usage
map_sets union 0.150 MB
sets union 15.00 MB - 100.30x memory usage
#+END_SRC
- [[file:benchmark/intersection.csv][intersection]]
- [[file:benchmark/empty%20intersection.csv][intersection (disjoint sets)]]
- [[file:benchmark/union.csv][union]]