2024-08-22 22:31:36 -07:00
2024-03-06 21:22:30 -08:00
2024-08-22 16:52:33 -07:00
2024-08-21 14:00:00 -07:00
2024-08-05 12:20:38 -07:00
2024-04-04 16:29:26 -07:00
2024-07-19 11:24:01 -07:00
2024-08-20 16:58:39 -07:00
2024-08-21 14:00:00 -07:00
2024-08-21 14:00:00 -07:00
2024-02-20 13:22:22 -08:00
2024-01-30 10:39:43 -08:00
2024-08-20 12:03:27 -07:00
2024-07-12 13:22:02 -07:00
2024-08-22 22:31:36 -07:00

A data structure for optimistic concurrency control on ranges of bitwise-lexicographically-ordered keys.

Intended as an alternative to FoundationDB's skip list.

Hardware for all benchmarks is an AMD Ryzen 9 7900 with (2x32GB) 5600MT/s CL28-34-34-89 1.35V RAM

Microbenchmark

Skip list

ns/op op/s err% ins/op cyc/op IPC bra/op miss% total benchmark
172.03 5,812,791.77 0.4% 3,130.62 879.00 3.562 509.23 0.0% 0.01 point reads
167.44 5,972,130.71 0.2% 3,065.14 862.27 3.555 494.30 0.0% 0.01 prefix reads
238.77 4,188,130.84 0.9% 3,589.93 1,259.30 2.851 637.12 0.0% 0.01 range reads
424.01 2,358,426.70 0.2% 5,620.05 2,242.35 2.506 854.80 1.7% 0.01 point writes
418.45 2,389,780.56 0.4% 5,525.07 2,211.05 2.499 831.71 1.7% 0.01 prefix writes
254.87 3,923,568.88 2.6% 3,187.01 1,366.50 2.332 529.11 2.7% 0.02 range writes
675.96 1,479,374.50 3.3% 7,735.41 3,468.60 2.230 1,386.02 1.8% 0.01 monotonic increasing point writes
137,986.20 7,247.10 0.6% 789,752.33 699,462.00 1.129 144,824.14 0.0% 0.01 worst case for radix tree
21.63 46,231,564.03 1.0% 448.00 107.14 4.181 84.00 0.0% 0.01 create and destroy

Radix tree (this implementation)

ns/op op/s err% ins/op cyc/op IPC bra/op miss% total benchmark
11.18 89,455,125.34 0.6% 185.37 57.08 3.248 41.51 0.4% 0.01 point reads
14.53 68,800,688.89 0.4% 282.41 74.80 3.776 55.06 0.3% 0.01 prefix reads
36.54 27,367,576.87 0.2% 798.06 188.90 4.225 141.69 0.2% 0.01 range reads
16.69 59,912,106.02 0.6% 314.57 86.29 3.645 39.84 0.4% 0.01 point writes
30.09 33,235,744.07 0.5% 591.33 155.92 3.793 82.69 0.2% 0.01 prefix writes
35.77 27,956,388.03 1.4% 682.25 187.63 3.636 96.12 0.1% 0.01 range writes
74.04 13,505,408.41 2.7% 1,448.95 392.10 3.695 260.53 0.1% 0.01 monotonic increasing point writes
330,984.50 3,021.29 1.9% 3,994,153.50 1,667,309.00 2.396 806,019.50 0.0% 0.01 worst case for radix tree
92.46 10,814,961.65 0.5% 1,800.00 463.41 3.884 297.00 0.0% 0.01 create and destroy

"Real data" test

Point queries only, best of three runs. Gc ratio is the ratio of time spent doing garbage collection to time spent adding writes or doing garbage collection. Lower is better.

skip list

Check: 4.47891 seconds, 364.05 MB/s, Add: 4.55599 seconds, 123.058 MB/s, Gc ratio: 37.1145%

radix tree

Check: 0.953012 seconds, 1710.94 MB/s, Add: 1.30025 seconds, 431.188 MB/s, Gc ratio: 43.9816%, Peak idle memory: 2.28375e+06

hash table

(The hash table implementation doesn't work on range queries, and its purpose is to provide an idea of how fast point queries can be)

Check: 0.804094 seconds, 2027.81 MB/s, Add: 0.652952 seconds, 858.645 MB/s, Gc ratio: 35.3885%
Description
A data structure for optimistic concurrency control on ranges of bitwise-lexicographically-ordered keys.
Readme 25 MiB
v0.0.13 Latest
2024-08-26 21:24:21 +00:00
Languages
C++ 82.9%
TeX 8.1%
CMake 4.8%
Python 2.7%
Shell 0.9%
Other 0.6%