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 |