b92f0ec227108cc1379370a08823f1c3e72c464b
feature | weaselab | fdb |
---|---|---|
based on | node-copying treap | node-copying treap |
bytes per node (worst-case) | 64 + kv len + 1* | 96 + kv len |
cheaper iteration* | ❌ | ✅ |
efficient bulk queries | ✅ | ❌ |
entries per set (worst-case) | 1 | 3 |
memory-usage (rough) | 40% | 100% |
node gc | mark-and-sweep | reference-counting |
pointer size | 32-bit | 64-bit |
purge strategy | scan | search |
read from foreign thread | ✅ | ❌ |
recursion-free | ✅ | ❌ |
returns node memory to OS | ✅ | ❌ |
searches per point clear | 1 | 5 |
searches per range clear | 2 | 5 |
searches per set (worst-case) | 1 | 4 |
* Part of a set of tradeoffs that enable 1 entry per set worst-case
benchmarks
weaselab
ns/op | op/s | err% | total | benchmark |
---|---|---|---|---|
1,537.31 | 650,485.22 | 2.0% | 0.21 | monotonically increasing |
1.25 | 798,963,102.97 | 0.1% | 0.01 | *iter |
38.71 | 25,831,420.46 | 3.2% | 0.01 | ++iter |
37.31 | 26,801,664.98 | 0.3% | 0.01 | --iter |
133.17 | 7,508,978.37 | 2.8% | 0.02 | begin |
129.51 | 7,721,547.35 | 0.4% | 0.02 | begin (firstGeq) |
54.40 | 18,381,173.00 | 1.2% | 0.01 | end |
245.34 | 4,075,961.09 | 1.1% | 0.01 | bulkFirstGeq |
fdb
ns/op | op/s | err% | total | benchmark |
---|---|---|---|---|
2,244.65 | 445,503.99 | 1.3% | 0.29 | monotonically increasing |
2.06 | 486,311,738.92 | 0.3% | 0.01 | *iter |
12.53 | 79,826,977.13 | 0.4% | 0.01 | ++iter |
8.86 | 112,927,293.80 | 1.3% | 0.01 | --iter |
89.27 | 11,201,505.02 | 0.7% | 0.01 | begin |
144.38 | 6,926,060.07 | 2.9% | 0.02 | begin (firstGeq) |
71.84 | 13,920,283.88 | 0.4% | 0.01 | end |
412.10 | 2,426,597.75 | 0.2% | 0.01 | bulkFirstGeq |
Description
Languages
C++
93.5%
CMake
5.7%
C
0.6%
Shell
0.2%