From 1efc7878057347a2b99e885ecc5e02b9571768d3 Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Tue, 20 Feb 2024 13:13:48 -0800 Subject: [PATCH] Add README.md --- README.md | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..920cbd0 --- /dev/null +++ b/README.md @@ -0,0 +1,70 @@ +A data structure for optimistic concurrency control on ranges of bitwise-lexicographically-ordered keys. + +Intended to replace FoundationDB's skip list. + +# FoundationDB's benchmark + +## Skip list + +``` +New conflict set: 4.189 sec + 0.298 Mtransactions/sec + 1.194 Mkeys/sec +Detect only: 3.990 sec + 0.313 Mtransactions/sec + 1.253 Mkeys/sec +Skiplist only: 2.849 sec + 0.439 Mtransactions/sec + 1.755 Mkeys/sec +Performance counters: + Build: 0.0913 + Add: 0.0998 + Detect: 3.99 + D.Sort: 0.808 + D.Combine: 0.0309 + D.CheckRead: 1.67 + D.CheckIntraBatch: 0.0305 + D.MergeWrite: 1.18 + D.RemoveBefore: 0.265 +``` + +## Radix tree (this implementation) + +``` +New conflict set: 2.965 sec + 0.422 Mtransactions/sec + 1.686 Mkeys/sec +Detect only: 2.761 sec + 0.453 Mtransactions/sec + 1.811 Mkeys/sec +Skiplist only: 1.580 sec + 0.791 Mtransactions/sec + 3.165 Mkeys/sec +Performance counters: + Build: 0.0902 + Add: 0.107 + Detect: 2.76 + D.Sort: 0.809 + D.Combine: 0.0309 + D.CheckRead: 0.658 + D.CheckIntraBatch: 0.0294 + D.MergeWrite: 0.921 + D.RemoveBefore: 0.305 +``` + +# Our benchmark + +| ns/op | op/s | err% | total | benchmark +|--------------------:|--------------------:|--------:|----------:|:---------- +| 263.10 | 3,800,889.33 | 1.6% | 0.64 | `skip list (point reads)` +| 256.36 | 3,900,800.96 | 1.7% | 0.61 | `skip list (prefix reads)` +| 526.95 | 1,897,714.85 | 1.6% | 1.23 | `skip list (range reads)` +| 546.54 | 1,829,676.97 | 0.5% | 1.31 | `skip list (point writes)` +| 539.23 | 1,854,511.73 | 0.5% | 1.29 | `skip list (prefix writes)` +| 266.68 | 3,749,799.99 | 0.6% | 0.65 | `skip list (range writes)` +| 18.31 | 54,612,706.60 | 0.4% | 0.04 | `radix tree (point reads)` +| 48.78 | 20,498,870.77 | 0.2% | 0.12 | `radix tree (prefix reads)` +| 347.16 | 2,880,474.86 | 0.9% | 0.83 | `radix tree (range reads)` +| 34.80 | 28,734,706.67 | 3.6% | 0.09 | `radix tree (point writes)` +| 70.34 | 14,216,970.16 | 1.4% | 0.17 | `radix tree (prefix writes)` +| 82.41 | 12,134,555.86 | 1.0% | 0.20 | `radix tree (range writes)`