Skip to content

Commit

Permalink
DataRef: borrow for great perf (#434)
Browse files Browse the repository at this point in the history
* DataRef: borrow for great perf

* address review comments

* Optimize `drop_table`, `rename_table`, `delete_by_col_eq`, and `clear_table` (#436)

* optimize delete, drop, rename

* address review comments

* even less cloning

* more refactoring
  • Loading branch information
Centril authored Oct 19, 2023
1 parent cba518d commit c8f9a29
Show file tree
Hide file tree
Showing 10 changed files with 346 additions and 370 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -64,12 +64,12 @@ pub struct BTreeIndexRangeIter<'a> {
range_iter: btree_set::Range<'a, IndexKey>,
}

impl Iterator for BTreeIndexRangeIter<'_> {
type Item = RowId;
impl<'a> Iterator for BTreeIndexRangeIter<'a> {
type Item = &'a RowId;

#[tracing::instrument(skip_all)]
fn next(&mut self) -> Option<Self::Item> {
self.range_iter.next().map(|key| key.row_id)
self.range_iter.next().map(|key| &key.row_id)
}
}

Expand Down
Loading

1 comment on commit c8f9a29

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark results

Benchmark Report

Legend:

  • load: number of rows pre-loaded into the database
  • count: number of rows touched by the transaction
  • index types:
    • unique: a single index on the id column
    • non_unique: no indexes
    • multi_index: non-unique index on every column
  • schemas:
    • person(id: u32, name: String, age: u64)
    • location(id: u32, x: u64, y: u64)

All throughputs are single-threaded.

Empty transaction

db on disk new latency old latency new throughput old throughput
sqlite 💿 449.1±2.60ns 469.7±3.74ns - -
sqlite 🧠 444.8±3.54ns 453.8±2.50ns - -
stdb_module 💿 15.5±0.29µs 15.6±0.49µs - -
stdb_module 🧠 16.1±0.45µs 15.9±0.44µs - -
stdb_raw 💿 98.2±0.53ns 103.4±0.10ns - -
stdb_raw 🧠 98.4±0.10ns 103.5±0.07ns - -

Single-row insertions

db on disk schema index type load new latency old latency new throughput old throughput
sqlite 💿 location multi_index 0 14.7±0.05µs 14.6±0.02µs 66.5 Ktx/sec 66.8 Ktx/sec
sqlite 💿 location multi_index 1000 15.9±0.20µs 15.9±0.17µs 61.3 Ktx/sec 61.4 Ktx/sec
sqlite 💿 location non_unique 0 7.3±0.28µs 7.4±0.33µs 133.3 Ktx/sec 132.6 Ktx/sec
sqlite 💿 location non_unique 1000 7.2±0.10µs 7.2±0.04µs 135.5 Ktx/sec 136.1 Ktx/sec
sqlite 💿 location unique 0 7.2±0.03µs 7.3±0.04µs 134.9 Ktx/sec 133.6 Ktx/sec
sqlite 💿 location unique 1000 7.3±0.03µs 7.3±0.09µs 133.3 Ktx/sec 133.9 Ktx/sec
sqlite 💿 person multi_index 0 14.5±0.03µs 14.6±0.02µs 67.4 Ktx/sec 67.1 Ktx/sec
sqlite 💿 person multi_index 1000 16.3±0.10µs 16.3±0.10µs 60.1 Ktx/sec 59.9 Ktx/sec
sqlite 💿 person non_unique 0 7.4±0.04µs 7.4±0.28µs 131.8 Ktx/sec 132.3 Ktx/sec
sqlite 💿 person non_unique 1000 7.5±0.04µs 7.5±0.05µs 130.8 Ktx/sec 130.9 Ktx/sec
sqlite 💿 person unique 0 7.4±0.37µs 7.5±0.94µs 132.4 Ktx/sec 131.0 Ktx/sec
sqlite 💿 person unique 1000 7.4±0.04µs 7.5±0.05µs 131.8 Ktx/sec 130.5 Ktx/sec
sqlite 🧠 location multi_index 0 4.2±0.01µs 4.2±0.01µs 231.4 Ktx/sec 232.6 Ktx/sec
sqlite 🧠 location multi_index 1000 5.5±0.07µs 5.5±0.04µs 177.4 Ktx/sec 178.7 Ktx/sec
sqlite 🧠 location non_unique 0 1945.7±6.71ns 1930.9±19.26ns 501.9 Ktx/sec 505.8 Ktx/sec
sqlite 🧠 location non_unique 1000 1976.6±10.25ns 2.0±0.01µs 494.1 Ktx/sec 482.4 Ktx/sec
sqlite 🧠 location unique 0 1906.8±9.48ns 1911.9±17.44ns 512.1 Ktx/sec 510.8 Ktx/sec
sqlite 🧠 location unique 1000 2.0±0.01µs 2.0±0.01µs 481.1 Ktx/sec 477.1 Ktx/sec
sqlite 🧠 person multi_index 0 4.1±0.01µs 4.1±0.01µs 239.0 Ktx/sec 239.2 Ktx/sec
sqlite 🧠 person multi_index 1000 5.6±0.02µs 5.8±0.03µs 172.9 Ktx/sec 167.5 Ktx/sec
sqlite 🧠 person non_unique 0 2.0±0.01µs 2.0±0.01µs 484.9 Ktx/sec 486.0 Ktx/sec
sqlite 🧠 person non_unique 1000 2.1±0.02µs 2.1±0.01µs 462.2 Ktx/sec 456.7 Ktx/sec
sqlite 🧠 person unique 0 1988.2±3.93ns 1982.3±5.25ns 491.2 Ktx/sec 492.7 Ktx/sec
sqlite 🧠 person unique 1000 2.2±0.01µs 2.2±0.02µs 453.3 Ktx/sec 449.4 Ktx/sec
stdb_module 💿 location multi_index 0 36.2±4.11µs 40.4±4.50µs 27.0 Ktx/sec 24.2 Ktx/sec
stdb_module 💿 location multi_index 1000 444.5±28.15µs 287.7±6.06µs 2.2 Ktx/sec 3.4 Ktx/sec
stdb_module 💿 location non_unique 0 35.1±3.86µs 36.3±6.13µs 27.9 Ktx/sec 26.9 Ktx/sec
stdb_module 💿 location non_unique 1000 188.5±48.49µs 252.6±38.90µs 5.2 Ktx/sec 3.9 Ktx/sec
stdb_module 💿 location unique 0 37.4±4.62µs 35.8±3.81µs 26.1 Ktx/sec 27.3 Ktx/sec
stdb_module 💿 location unique 1000 241.0±7.91µs 190.0±72.45µs 4.1 Ktx/sec 5.1 Ktx/sec
stdb_module 💿 person multi_index 0 46.5±7.55µs 51.2±4.80µs 21.0 Ktx/sec 19.1 Ktx/sec
stdb_module 💿 person multi_index 1000 275.9±36.62µs 590.5±28.79µs 3.5 Ktx/sec 1693 tx/sec
stdb_module 💿 person non_unique 0 36.2±4.33µs 38.6±4.11µs 26.9 Ktx/sec 25.3 Ktx/sec
stdb_module 💿 person non_unique 1000 245.9±18.00µs 302.2±67.07µs 4.0 Ktx/sec 3.2 Ktx/sec
stdb_module 💿 person unique 0 42.4±6.78µs 42.8±4.52µs 23.0 Ktx/sec 22.8 Ktx/sec
stdb_module 💿 person unique 1000 205.4±58.10µs 343.1±13.50µs 4.8 Ktx/sec 2.8 Ktx/sec
stdb_module 🧠 location multi_index 0 30.4±1.85µs 31.2±3.17µs 32.2 Ktx/sec 31.3 Ktx/sec
stdb_module 🧠 location multi_index 1000 392.4±17.02µs 237.9±63.06µs 2.5 Ktx/sec 4.1 Ktx/sec
stdb_module 🧠 location non_unique 0 26.6±2.18µs 26.0±1.87µs 36.7 Ktx/sec 37.5 Ktx/sec
stdb_module 🧠 location non_unique 1000 213.6±3.54µs 183.4±27.56µs 4.6 Ktx/sec 5.3 Ktx/sec
stdb_module 🧠 location unique 0 29.5±1.83µs 29.4±2.80µs 33.1 Ktx/sec 33.2 Ktx/sec
stdb_module 🧠 location unique 1000 168.7±24.05µs 181.4±2.54µs 5.8 Ktx/sec 5.4 Ktx/sec
stdb_module 🧠 person multi_index 0 37.9±4.16µs 37.1±3.67µs 25.7 Ktx/sec 26.3 Ktx/sec
stdb_module 🧠 person multi_index 1000 495.3±157.34µs 651.9±46.57µs 2019 tx/sec 1533 tx/sec
stdb_module 🧠 person non_unique 0 26.9±1.31µs 26.7±1.78µs 36.3 Ktx/sec 36.6 Ktx/sec
stdb_module 🧠 person non_unique 1000 233.4±41.21µs 332.3±56.01µs 4.2 Ktx/sec 2.9 Ktx/sec
stdb_module 🧠 person unique 0 32.8±3.34µs 32.3±3.80µs 29.8 Ktx/sec 30.2 Ktx/sec
stdb_module 🧠 person unique 1000 164.4±88.73µs 463.0±23.14µs 5.9 Ktx/sec 2.1 Ktx/sec
stdb_raw 💿 location multi_index 0 5.3±0.03µs 5.4±0.01µs 183.2 Ktx/sec 180.8 Ktx/sec
stdb_raw 💿 location multi_index 1000 31.6±0.33µs 46.9±153.99µs 30.9 Ktx/sec 20.8 Ktx/sec
stdb_raw 💿 location non_unique 0 3.6±0.18µs 3.6±0.02µs 274.2 Ktx/sec 271.3 Ktx/sec
stdb_raw 💿 location non_unique 1000 27.3±41.39µs 29.2±73.48µs 35.7 Ktx/sec 33.5 Ktx/sec
stdb_raw 💿 location unique 0 4.4±0.02µs 4.4±0.01µs 224.3 Ktx/sec 222.5 Ktx/sec
stdb_raw 💿 location unique 1000 38.9±124.27µs 26.4±0.18µs 25.1 Ktx/sec 37.1 Ktx/sec
stdb_raw 💿 person multi_index 0 9.0±0.01µs 9.1±0.02µs 108.1 Ktx/sec 107.7 Ktx/sec
stdb_raw 💿 person multi_index 1000 59.5±355.64µs 59.7±351.23µs 16.4 Ktx/sec 16.4 Ktx/sec
stdb_raw 💿 person non_unique 0 4.1±0.01µs 4.2±0.05µs 236.2 Ktx/sec 231.0 Ktx/sec
stdb_raw 💿 person non_unique 1000 19.6±70.79µs 13.0±0.13µs 49.7 Ktx/sec 74.9 Ktx/sec
stdb_raw 💿 person unique 0 6.0±0.02µs 5.9±0.02µs 162.8 Ktx/sec 164.2 Ktx/sec
stdb_raw 💿 person unique 1000 42.7±208.16µs 45.7±234.62µs 22.9 Ktx/sec 21.4 Ktx/sec
stdb_raw 🧠 location multi_index 0 4.1±0.01µs 4.2±0.02µs 237.9 Ktx/sec 231.1 Ktx/sec
stdb_raw 🧠 location multi_index 1000 24.8±0.77µs 25.4±0.68µs 39.3 Ktx/sec 38.4 Ktx/sec
stdb_raw 🧠 location non_unique 0 2.3±0.01µs 2.5±0.00µs 425.7 Ktx/sec 385.4 Ktx/sec
stdb_raw 🧠 location non_unique 1000 16.3±0.06µs 15.9±0.04µs 60.0 Ktx/sec 61.4 Ktx/sec
stdb_raw 🧠 location unique 0 3.0±0.01µs 3.1±0.01µs 322.2 Ktx/sec 317.1 Ktx/sec
stdb_raw 🧠 location unique 1000 20.7±0.14µs 20.5±0.11µs 47.2 Ktx/sec 47.6 Ktx/sec
stdb_raw 🧠 person multi_index 0 7.6±0.01µs 7.9±0.01µs 128.3 Ktx/sec 122.8 Ktx/sec
stdb_raw 🧠 person multi_index 1000 19.6±0.89µs 19.4±1.05µs 49.9 Ktx/sec 50.5 Ktx/sec
stdb_raw 🧠 person non_unique 0 2.8±0.00µs 2.9±0.01µs 345.5 Ktx/sec 342.3 Ktx/sec
stdb_raw 🧠 person non_unique 1000 10.0±0.12µs 9.6±0.17µs 98.1 Ktx/sec 101.4 Ktx/sec
stdb_raw 🧠 person unique 0 4.6±0.01µs 4.6±0.01µs 210.4 Ktx/sec 212.4 Ktx/sec
stdb_raw 🧠 person unique 1000 15.5±0.26µs 15.2±0.34µs 63.1 Ktx/sec 64.4 Ktx/sec

Multi-row insertions

db on disk schema index type load count new latency old latency new throughput old throughput
sqlite 💿 location multi_index 0 100 131.7±3.85µs 135.5±7.61µs 7.4 Ktx/sec 7.2 Ktx/sec
sqlite 💿 location multi_index 1000 100 204.5±1.32µs 207.0±1.23µs 4.8 Ktx/sec 4.7 Ktx/sec
sqlite 💿 location non_unique 0 100 50.6±1.08µs 52.0±1.91µs 19.3 Ktx/sec 18.8 Ktx/sec
sqlite 💿 location non_unique 1000 100 52.2±0.34µs 55.2±0.44µs 18.7 Ktx/sec 17.7 Ktx/sec
sqlite 💿 location unique 0 100 52.7±0.42µs 53.5±1.12µs 18.5 Ktx/sec 18.2 Ktx/sec
sqlite 💿 location unique 1000 100 56.6±0.35µs 58.3±0.33µs 17.2 Ktx/sec 16.8 Ktx/sec
sqlite 💿 person multi_index 0 100 119.8±7.68µs 123.1±1.13µs 8.1 Ktx/sec 7.9 Ktx/sec
sqlite 💿 person multi_index 1000 100 235.6±22.59µs 239.5±2.81µs 4.1 Ktx/sec 4.1 Ktx/sec
sqlite 💿 person non_unique 0 100 50.8±0.29µs 51.8±1.31µs 19.2 Ktx/sec 18.8 Ktx/sec
sqlite 💿 person non_unique 1000 100 62.8±0.45µs 63.9±0.41µs 15.5 Ktx/sec 15.3 Ktx/sec
sqlite 💿 person unique 0 100 53.7±1.30µs 52.3±1.80µs 18.2 Ktx/sec 18.7 Ktx/sec
sqlite 💿 person unique 1000 100 58.5±0.33µs 58.3±0.42µs 16.7 Ktx/sec 16.8 Ktx/sec
sqlite 🧠 location multi_index 0 100 118.5±0.45µs 121.7±0.32µs 8.2 Ktx/sec 8.0 Ktx/sec
sqlite 🧠 location multi_index 1000 100 169.9±0.32µs 175.3±0.36µs 5.7 Ktx/sec 5.6 Ktx/sec
sqlite 🧠 location non_unique 0 100 44.2±0.40µs 44.5±0.34µs 22.1 Ktx/sec 21.9 Ktx/sec
sqlite 🧠 location non_unique 1000 100 45.9±0.33µs 46.1±0.33µs 21.3 Ktx/sec 21.2 Ktx/sec
sqlite 🧠 location unique 0 100 46.6±0.17µs 46.1±0.53µs 20.9 Ktx/sec 21.2 Ktx/sec
sqlite 🧠 location unique 1000 100 49.8±0.37µs 50.1±0.40µs 19.6 Ktx/sec 19.5 Ktx/sec
sqlite 🧠 person multi_index 0 100 108.5±0.30µs 112.5±0.49µs 9.0 Ktx/sec 8.7 Ktx/sec
sqlite 🧠 person multi_index 1000 100 191.3±0.38µs 194.6±0.42µs 5.1 Ktx/sec 5.0 Ktx/sec
sqlite 🧠 person non_unique 0 100 44.4±0.27µs 45.2±0.33µs 22.0 Ktx/sec 21.6 Ktx/sec
sqlite 🧠 person non_unique 1000 100 48.2±0.19µs 48.9±0.35µs 20.3 Ktx/sec 20.0 Ktx/sec
sqlite 🧠 person unique 0 100 46.6±0.21µs 45.2±0.60µs 21.0 Ktx/sec 21.6 Ktx/sec
sqlite 🧠 person unique 1000 100 50.2±0.29µs 49.7±0.24µs 19.5 Ktx/sec 19.6 Ktx/sec
stdb_module 💿 location multi_index 0 100 704.2±83.98µs 806.2±40.29µs 1419 tx/sec 1240 tx/sec
stdb_module 💿 location multi_index 1000 100 744.8±116.15µs 1133.3±85.36µs 1342 tx/sec 882 tx/sec
stdb_module 💿 location non_unique 0 100 430.3±62.86µs 453.8±66.50µs 2.3 Ktx/sec 2.2 Ktx/sec
stdb_module 💿 location non_unique 1000 100 687.7±8.19µs 823.0±152.34µs 1454 tx/sec 1215 tx/sec
stdb_module 💿 location unique 0 100 552.1±86.84µs 639.3±6.34µs 1811 tx/sec 1564 tx/sec
stdb_module 💿 location unique 1000 100 821.6±71.98µs 825.9±76.26µs 1217 tx/sec 1210 tx/sec
stdb_module 💿 person multi_index 0 100 1067.6±176.95µs 1462.3±3.37µs 936 tx/sec 683 tx/sec
stdb_module 💿 person multi_index 1000 100 1512.4±36.89µs 1563.2±18.49µs 661 tx/sec 639 tx/sec
stdb_module 💿 person non_unique 0 100 683.1±7.51µs 600.3±16.29µs 1463 tx/sec 1665 tx/sec
stdb_module 💿 person non_unique 1000 100 725.8±56.57µs 901.0±56.15µs 1377 tx/sec 1109 tx/sec
stdb_module 💿 person unique 0 100 960.8±1.80µs 873.0±80.21µs 1040 tx/sec 1145 tx/sec
stdb_module 💿 person unique 1000 100 860.2±10.57µs 1043.4±76.49µs 1162 tx/sec 958 tx/sec
stdb_module 🧠 location multi_index 0 100 485.0±1.30µs 705.0±33.81µs 2.0 Ktx/sec 1418 tx/sec
stdb_module 🧠 location multi_index 1000 100 771.3±82.45µs 896.0±16.78µs 1296 tx/sec 1116 tx/sec
stdb_module 🧠 location non_unique 0 100 408.4±4.29µs 378.1±1.03µs 2.4 Ktx/sec 2.6 Ktx/sec
stdb_module 🧠 location non_unique 1000 100 558.9±5.12µs 568.7±11.00µs 1789 tx/sec 1758 tx/sec
stdb_module 🧠 location unique 0 100 558.6±4.29µs 562.6±17.67µs 1790 tx/sec 1777 tx/sec
stdb_module 🧠 location unique 1000 100 666.4±40.50µs 739.6±17.46µs 1500 tx/sec 1352 tx/sec
stdb_module 🧠 person multi_index 0 100 854.5±13.17µs 1362.2±16.23µs 1170 tx/sec 734 tx/sec
stdb_module 🧠 person multi_index 1000 100 1368.1±165.89µs 2.1±0.02ms 730 tx/sec 484 tx/sec
stdb_module 🧠 person non_unique 0 100 453.5±92.76µs 561.9±13.58µs 2.2 Ktx/sec 1779 tx/sec
stdb_module 🧠 person non_unique 1000 100 849.5±42.03µs 872.9±23.82µs 1177 tx/sec 1145 tx/sec
stdb_module 🧠 person unique 0 100 532.3±2.66µs 879.9±14.52µs 1878 tx/sec 1136 tx/sec
stdb_module 🧠 person unique 1000 100 991.1±7.32µs 1215.8±70.55µs 1008 tx/sec 822 tx/sec
stdb_raw 💿 location multi_index 0 100 303.1±2.70µs 302.8±0.57µs 3.2 Ktx/sec 3.2 Ktx/sec
stdb_raw 💿 location multi_index 1000 100 348.8±1.36µs 369.5±207.71µs 2.8 Ktx/sec 2.6 Ktx/sec
stdb_raw 💿 location non_unique 0 100 135.8±0.39µs 136.6±0.73µs 7.2 Ktx/sec 7.1 Ktx/sec
stdb_raw 💿 location non_unique 1000 100 149.3±0.98µs 151.3±1.41µs 6.5 Ktx/sec 6.5 Ktx/sec
stdb_raw 💿 location unique 0 100 210.9±5.29µs 210.2±0.25µs 4.6 Ktx/sec 4.6 Ktx/sec
stdb_raw 💿 location unique 1000 100 246.9±1.07µs 249.3±1.31µs 4.0 Ktx/sec 3.9 Ktx/sec
stdb_raw 💿 person multi_index 0 100 649.1±25.05µs 635.1±1.48µs 1540 tx/sec 1574 tx/sec
stdb_raw 💿 person multi_index 1000 100 737.5±342.96µs 697.1±1.77µs 1355 tx/sec 1434 tx/sec
stdb_raw 💿 person non_unique 0 100 190.9±1.02µs 191.9±0.39µs 5.1 Ktx/sec 5.1 Ktx/sec
stdb_raw 💿 person non_unique 1000 100 206.0±0.68µs 205.4±0.54µs 4.7 Ktx/sec 4.8 Ktx/sec
stdb_raw 💿 person unique 0 100 355.2±16.58µs 355.3±0.41µs 2.7 Ktx/sec 2.7 Ktx/sec
stdb_raw 💿 person unique 1000 100 382.4±0.92µs 404.3±183.76µs 2.6 Ktx/sec 2.4 Ktx/sec
stdb_raw 🧠 location multi_index 0 100 301.5±0.29µs 303.2±0.29µs 3.2 Ktx/sec 3.2 Ktx/sec
stdb_raw 🧠 location multi_index 1000 100 341.0±0.58µs 340.6±0.55µs 2.9 Ktx/sec 2.9 Ktx/sec
stdb_raw 🧠 location non_unique 0 100 128.3±0.07µs 130.3±0.07µs 7.6 Ktx/sec 7.5 Ktx/sec
stdb_raw 🧠 location non_unique 1000 100 146.0±0.46µs 148.4±0.97µs 6.7 Ktx/sec 6.6 Ktx/sec
stdb_raw 🧠 location unique 0 100 204.9±0.29µs 207.4±0.17µs 4.8 Ktx/sec 4.7 Ktx/sec
stdb_raw 🧠 location unique 1000 100 239.3±0.65µs 241.7±0.42µs 4.1 Ktx/sec 4.0 Ktx/sec
stdb_raw 🧠 person multi_index 0 100 639.2±0.83µs 640.9±0.47µs 1564 tx/sec 1560 tx/sec
stdb_raw 🧠 person multi_index 1000 100 690.3±1.50µs 690.9±1.39µs 1448 tx/sec 1447 tx/sec
stdb_raw 🧠 person non_unique 0 100 188.5±0.16µs 188.8±0.16µs 5.2 Ktx/sec 5.2 Ktx/sec
stdb_raw 🧠 person non_unique 1000 100 200.1±0.25µs 199.5±0.35µs 4.9 Ktx/sec 4.9 Ktx/sec
stdb_raw 🧠 person unique 0 100 354.2±0.32µs 355.2±0.32µs 2.8 Ktx/sec 2.7 Ktx/sec
stdb_raw 🧠 person unique 1000 100 379.6±0.99µs 381.1±1.03µs 2.6 Ktx/sec 2.6 Ktx/sec

Full table iterate

db on disk schema index type new latency old latency new throughput old throughput
sqlite 💿 location unique 9.0±0.13µs 9.3±0.08µs 108.8 Ktx/sec 104.9 Ktx/sec
sqlite 💿 person unique 9.3±0.11µs 9.8±0.09µs 105.6 Ktx/sec 99.6 Ktx/sec
sqlite 🧠 location unique 7.6±0.14µs 8.1±0.05µs 128.8 Ktx/sec 120.1 Ktx/sec
sqlite 🧠 person unique 8.1±0.15µs 8.5±0.10µs 120.1 Ktx/sec 114.5 Ktx/sec
stdb_module 💿 location unique 33.8±2.15µs 42.7±2.92µs 28.9 Ktx/sec 22.9 Ktx/sec
stdb_module 💿 person unique 43.5±6.24µs 56.6±9.53µs 22.5 Ktx/sec 17.3 Ktx/sec
stdb_module 🧠 location unique 31.8±2.60µs 44.8±3.30µs 30.7 Ktx/sec 21.8 Ktx/sec
stdb_module 🧠 person unique 48.6±4.94µs 62.1±5.48µs 20.1 Ktx/sec 15.7 Ktx/sec
stdb_raw 💿 location unique 3.4±0.02µs 10.2±0.01µs 287.0 Ktx/sec 95.8 Ktx/sec
stdb_raw 💿 person unique 3.4±0.03µs 11.4±0.02µs 286.8 Ktx/sec 85.3 Ktx/sec
stdb_raw 🧠 location unique 3.4±0.01µs 10.2±0.04µs 287.4 Ktx/sec 95.3 Ktx/sec
stdb_raw 🧠 person unique 3.4±0.01µs 11.4±0.02µs 287.0 Ktx/sec 85.4 Ktx/sec

Find unique key

db on disk key type load new latency old latency new throughput old throughput
sqlite 💿 u32 1000 2.4±0.01µs 2.4±0.01µs 403.1 Ktx/sec 408.1 Ktx/sec
sqlite 🧠 u32 1000 1210.2±5.34ns 1187.8±7.05ns 807.0 Ktx/sec 822.2 Ktx/sec
stdb_module 💿 u32 1000 17.6±0.64µs 17.8±0.66µs 55.5 Ktx/sec 55.0 Ktx/sec
stdb_module 🧠 u32 1000 17.8±0.26µs 19.2±1.73µs 54.8 Ktx/sec 50.7 Ktx/sec
stdb_raw 💿 u32 1000 362.1±0.99ns 456.5±1.40ns 2.6 Mtx/sec 2.1 Mtx/sec
stdb_raw 🧠 u32 1000 361.1±0.66ns 453.1±0.30ns 2.6 Mtx/sec 2.1 Mtx/sec

Filter

db on disk key type index strategy load count new latency old latency new throughput old throughput
sqlite 💿 string indexed 1000 10 5.7±0.03µs 5.8±0.01µs 170.2 Ktx/sec 169.4 Ktx/sec
sqlite 💿 string non_indexed 1000 10 49.4±0.64µs 53.5±0.54µs 19.8 Ktx/sec 18.3 Ktx/sec
sqlite 💿 u64 indexed 1000 10 5.6±0.02µs 5.5±0.04µs 175.4 Ktx/sec 177.3 Ktx/sec
sqlite 💿 u64 non_indexed 1000 10 33.1±0.19µs 35.2±0.31µs 29.5 Ktx/sec 27.8 Ktx/sec
sqlite 🧠 string indexed 1000 10 4.3±0.02µs 4.3±0.01µs 227.0 Ktx/sec 227.6 Ktx/sec
sqlite 🧠 string non_indexed 1000 10 48.1±0.42µs 50.2±0.90µs 20.3 Ktx/sec 19.5 Ktx/sec
sqlite 🧠 u64 indexed 1000 10 4.1±0.01µs 4.1±0.02µs 236.6 Ktx/sec 239.6 Ktx/sec
sqlite 🧠 u64 non_indexed 1000 10 31.9±0.24µs 34.0±0.34µs 30.7 Ktx/sec 28.7 Ktx/sec
stdb_module 💿 string indexed 1000 10 22.3±1.67µs 25.0±2.54µs 43.7 Ktx/sec 39.1 Ktx/sec
stdb_module 💿 string non_indexed 1000 10 105.4±1.34µs 203.8±2.90µs 9.3 Ktx/sec 4.8 Ktx/sec
stdb_module 💿 u64 indexed 1000 10 19.7±1.25µs 20.3±0.79µs 49.5 Ktx/sec 48.2 Ktx/sec
stdb_module 💿 u64 non_indexed 1000 10 107.8±19.06µs 160.9±4.35µs 9.1 Ktx/sec 6.1 Ktx/sec
stdb_module 🧠 string indexed 1000 10 22.3±1.13µs 23.3±1.32µs 43.9 Ktx/sec 41.8 Ktx/sec
stdb_module 🧠 string non_indexed 1000 10 104.4±4.24µs 203.7±7.99µs 9.4 Ktx/sec 4.8 Ktx/sec
stdb_module 🧠 u64 indexed 1000 10 19.6±0.79µs 20.4±0.86µs 49.9 Ktx/sec 47.8 Ktx/sec
stdb_module 🧠 u64 non_indexed 1000 10 100.2±15.67µs 158.4±2.49µs 9.7 Ktx/sec 6.2 Ktx/sec
stdb_raw 💿 string indexed 1000 10 1225.0±2.24ns 2.2±0.00µs 797.2 Ktx/sec 448.0 Ktx/sec
stdb_raw 💿 string non_indexed 1000 10 79.1±0.14µs 177.8±0.52µs 12.3 Ktx/sec 5.5 Ktx/sec
stdb_raw 💿 u64 indexed 1000 10 1062.8±1.34ns 1864.9±3.10ns 918.9 Ktx/sec 523.7 Ktx/sec
stdb_raw 💿 u64 non_indexed 1000 10 63.1±1.21µs 139.7±0.27µs 15.5 Ktx/sec 7.0 Ktx/sec
stdb_raw 🧠 string indexed 1000 10 1234.0±3.86ns 2.2±0.00µs 791.4 Ktx/sec 451.5 Ktx/sec
stdb_raw 🧠 string non_indexed 1000 10 79.8±0.27µs 178.6±0.54µs 12.2 Ktx/sec 5.5 Ktx/sec
stdb_raw 🧠 u64 indexed 1000 10 1063.1±1.30ns 1873.8±3.21ns 918.6 Ktx/sec 521.2 Ktx/sec
stdb_raw 🧠 u64 non_indexed 1000 10 62.9±0.17µs 139.7±0.40µs 15.5 Ktx/sec 7.0 Ktx/sec

Serialize

schema format count new latency old latency new throughput old throughput
location bsatn 100 1664.0±37.95ns 1769.4±28.03ns 57.3 Mtx/sec 53.9 Mtx/sec
location json 100 3.5±0.04µs 3.4±0.03µs 27.1 Mtx/sec 28.3 Mtx/sec
location product_value 100 2.4±0.01µs 2.4±0.05µs 39.4 Mtx/sec 39.8 Mtx/sec
person bsatn 100 2.3±0.01µs 2.4±0.04µs 41.7 Mtx/sec 39.1 Mtx/sec
person json 100 5.3±0.05µs 5.3±0.05µs 18.0 Mtx/sec 18.1 Mtx/sec
person product_value 100 1662.0±3.04ns 1638.6±12.02ns 57.4 Mtx/sec 58.2 Mtx/sec

Module: invoke with large arguments

arg size new latency old latency new throughput old throughput
64KiB 80.3±6.73µs 72.8±8.60µs - -

Module: print bulk

line count new latency old latency new throughput old throughput
1 20.2±0.81µs 20.3±1.56µs - -
100 207.2±5.64µs 199.6±2.08µs - -
1000 1862.4±83.28µs 1881.8±185.57µs - -

Remaining benchmarks

name new latency old latency new throughput old throughput

Please sign in to comment.