2024-11-15 15:47:32 -08:00
2024-03-06 21:22:30 -08:00
2024-11-15 15:47:32 -08: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-11-15 13:05:11 -08:00
2024-02-20 13:22:22 -08:00
2024-01-30 10:39:43 -08:00
2024-08-30 16:06:43 -07:00
2024-09-09 20:10:55 -07:00
2024-11-10 21:47:26 -08:00
2024-11-15 13:12:47 -08:00
2024-11-12 17:50:27 -08: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.

Compiler is Ubuntu clang version 20.0.0 (++20241029082144+7544d3af0e28-1~exp1~20241029082307.506).

Microbenchmark

Skip list

ns/op op/s err% ins/op cyc/op IPC bra/op miss% total benchmark
159.65 6,263,576.52 1.6% 2,972.36 820.37 3.623 504.59 0.0% 0.01 point reads
156.32 6,397,320.65 0.7% 2,913.62 806.87 3.611 490.19 0.0% 0.01 prefix reads
229.18 4,363,293.65 1.2% 3,541.05 1,219.75 2.903 629.33 0.0% 0.01 range reads
363.37 2,752,026.30 0.3% 5,273.63 1,951.54 2.702 851.66 1.7% 0.01 point writes
364.99 2,739,787.02 0.3% 5,250.92 1,958.54 2.681 839.24 1.7% 0.01 prefix writes
242.26 4,127,796.58 2.9% 3,117.33 1,304.41 2.390 541.07 2.8% 0.02 range writes
562.48 1,777,855.27 0.8% 7,305.21 3,034.34 2.408 1,329.30 1.3% 0.01 monotonic increasing point writes
122,688.57 8,150.72 0.7% 798,766.00 666,842.00 1.198 144,584.50 0.1% 0.01 worst case for radix tree
41.71 23,976,459.34 1.7% 885.00 219.17 4.038 132.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
12.83 77,947,334.88 0.8% 247.13 63.80 3.873 32.64 0.6% 0.01 point reads
14.73 67,908,470.74 0.1% 299.99 73.66 4.073 42.50 0.5% 0.01 prefix reads
35.63 28,066,165.78 0.1% 782.70 178.49 4.385 106.65 0.2% 0.01 range reads
20.00 49,993,123.62 0.1% 376.83 100.50 3.749 50.05 0.5% 0.01 point writes
38.04 26,287,266.49 0.1% 665.86 191.21 3.482 100.41 0.4% 0.01 prefix writes
40.48 24,703,557.31 1.3% 732.80 204.36 3.586 111.26 0.2% 0.01 range writes
81.01 12,343,591.64 1.4% 1,551.57 409.23 3.791 292.66 0.1% 0.01 monotonic increasing point writes
315,672.00 3,167.85 1.7% 4,043,066.00 1,590,315.00 2.542 714,828.00 0.1% 0.01 worst case for radix tree
114.81 8,710,164.86 0.7% 2,178.00 578.69 3.764 345.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.39702 seconds, 370.83 MB/s, Add: 4.50025 seconds, 124.583 MB/s, Gc ratio: 29.1333%, Peak idle memory: 5.51852e+06

radix tree

Check: 0.975666 seconds, 1728.24 MB/s, Add: 1.19751 seconds, 480.444 MB/s, Gc ratio: 36.8478%, Peak idle memory: 2.39447e+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.84256 seconds, 1935.23 MB/s, Add: 0.697204 seconds, 804.146 MB/s, Gc ratio: 35.4091%
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%