Skip to content

Conversation

@Centril
Copy link
Contributor

@Centril Centril commented Nov 9, 2023

Description of Changes

I noticed that delete_by_col_eq is mostly called by delete_by_field which has debug_assert!(count <= 1);.
This suggests that we do an unnecessary allocation in most cases.
We can get rid of that by using a SmallVec<[RowId; 1]> so that in the count = 1 case, we don't need to allocate.

API and ABI breaking changes

None.

Expected complexity level and risk

1

@kulakowski
Copy link
Contributor

benchmarks please

@github-actions
Copy link
Contributor

github-actions bot commented Nov 9, 2023

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 💿 - 441.4±1.58ns - -
sqlite 🧠 - 441.4±1.28ns - -
stdb_module 💿 17.3±0.83µs 17.6±0.76µs - -
stdb_module 🧠 20.1±1.48µs 17.6±1.17µs - -
stdb_raw 💿 727.9±2.48ns 722.5±0.83ns - -
stdb_raw 🧠 722.5±5.44ns 719.3±1.22ns - -

Single-row insertions

db on disk schema index type load new latency old latency new throughput old throughput
sqlite 💿 location multi_index 0 - 14.6±0.10µs - 66.8 Ktx/sec
sqlite 💿 location multi_index 1000 - 15.9±0.12µs - 61.6 Ktx/sec
sqlite 💿 location non_unique 0 - 7.3±0.05µs - 134.4 Ktx/sec
sqlite 💿 location non_unique 1000 - 7.1±0.05µs - 138.3 Ktx/sec
sqlite 💿 location unique 0 - 7.3±0.04µs - 133.8 Ktx/sec
sqlite 💿 location unique 1000 - 7.2±0.05µs - 136.2 Ktx/sec
sqlite 💿 person multi_index 0 - 14.8±0.81µs - 66.1 Ktx/sec
sqlite 💿 person multi_index 1000 - 18.8±27.58µs - 51.9 Ktx/sec
sqlite 💿 person non_unique 0 - 7.5±0.96µs - 129.9 Ktx/sec
sqlite 💿 person non_unique 1000 - 7.3±0.04µs - 134.6 Ktx/sec
sqlite 💿 person unique 0 - 7.5±0.91µs - 130.6 Ktx/sec
sqlite 💿 person unique 1000 - 7.3±0.09µs - 133.8 Ktx/sec
sqlite 🧠 location multi_index 0 - 4.0±0.02µs - 241.4 Ktx/sec
sqlite 🧠 location multi_index 1000 - 5.2±0.02µs - 188.1 Ktx/sec
sqlite 🧠 location non_unique 0 - 1890.5±4.81ns - 516.6 Ktx/sec
sqlite 🧠 location non_unique 1000 - 1945.4±10.80ns - 502.0 Ktx/sec
sqlite 🧠 location unique 0 - 1871.3±5.73ns - 521.9 Ktx/sec
sqlite 🧠 location unique 1000 - 1977.0±32.42ns - 493.9 Ktx/sec
sqlite 🧠 person multi_index 0 - 3.7±0.01µs - 264.3 Ktx/sec
sqlite 🧠 person multi_index 1000 - 5.4±0.02µs - 181.4 Ktx/sec
sqlite 🧠 person non_unique 0 - 1968.0±4.27ns - 496.2 Ktx/sec
sqlite 🧠 person non_unique 1000 - 2.0±0.01µs - 479.1 Ktx/sec
sqlite 🧠 person unique 0 - 1950.5±6.50ns - 500.7 Ktx/sec
sqlite 🧠 person unique 1000 - 2.0±0.01µs - 476.8 Ktx/sec
stdb_module 💿 location multi_index 0 61.6±40.09µs 57.5±4.14µs 15.8 Ktx/sec 17.0 Ktx/sec
stdb_module 💿 location multi_index 1000 304.8±12.24µs 124.7±3.23µs 3.2 Ktx/sec 7.8 Ktx/sec
stdb_module 💿 location non_unique 0 49.0±4.86µs 43.8±3.97µs 19.9 Ktx/sec 22.3 Ktx/sec
stdb_module 💿 location non_unique 1000 269.6±16.16µs 150.3±5.38µs 3.6 Ktx/sec 6.5 Ktx/sec
stdb_module 💿 location unique 0 50.3±4.30µs 52.6±5.06µs 19.4 Ktx/sec 18.6 Ktx/sec
stdb_module 💿 location unique 1000 265.6±21.39µs 153.4±77.20µs 3.7 Ktx/sec 6.4 Ktx/sec
stdb_module 💿 person multi_index 0 63.3±8.12µs 66.4±3.65µs 15.4 Ktx/sec 14.7 Ktx/sec
stdb_module 💿 person multi_index 1000 197.4±12.52µs 148.4±19.87µs 4.9 Ktx/sec 6.6 Ktx/sec
stdb_module 💿 person non_unique 0 52.6±5.27µs 54.0±4.75µs 18.6 Ktx/sec 18.1 Ktx/sec
stdb_module 💿 person non_unique 1000 193.8±40.06µs 197.8±7.68µs 5.0 Ktx/sec 4.9 Ktx/sec
stdb_module 💿 person unique 0 55.7±4.58µs 57.7±6.02µs 17.5 Ktx/sec 16.9 Ktx/sec
stdb_module 💿 person unique 1000 129.3±71.55µs 190.6±70.97µs 7.6 Ktx/sec 5.1 Ktx/sec
stdb_module 🧠 location multi_index 0 39.8±3.84µs 38.6±3.88µs 24.5 Ktx/sec 25.3 Ktx/sec
stdb_module 🧠 location multi_index 1000 119.7±29.50µs 234.0±28.40µs 8.2 Ktx/sec 4.2 Ktx/sec
stdb_module 🧠 location non_unique 0 33.9±4.46µs 30.0±2.79µs 28.8 Ktx/sec 32.5 Ktx/sec
stdb_module 🧠 location non_unique 1000 182.7±6.29µs 124.3±8.18µs 5.3 Ktx/sec 7.9 Ktx/sec
stdb_module 🧠 location unique 0 35.9±3.67µs 35.3±2.89µs 27.2 Ktx/sec 27.7 Ktx/sec
stdb_module 🧠 location unique 1000 190.6±6.89µs 136.5±6.24µs 5.1 Ktx/sec 7.2 Ktx/sec
stdb_module 🧠 person multi_index 0 45.5±5.03µs 44.9±4.46µs 21.5 Ktx/sec 21.7 Ktx/sec
stdb_module 🧠 person multi_index 1000 254.8±1.77µs 288.8±3.46µs 3.8 Ktx/sec 3.4 Ktx/sec
stdb_module 🧠 person non_unique 0 33.9±3.20µs 34.5±4.04µs 28.8 Ktx/sec 28.3 Ktx/sec
stdb_module 🧠 person non_unique 1000 173.4±9.32µs 141.5±27.12µs 5.6 Ktx/sec 6.9 Ktx/sec
stdb_module 🧠 person unique 0 43.2±4.43µs 36.6±3.53µs 22.6 Ktx/sec 26.6 Ktx/sec
stdb_module 🧠 person unique 1000 93.9±3.46µs 236.7±15.95µs 10.4 Ktx/sec 4.1 Ktx/sec
stdb_raw 💿 location multi_index 0 7.3±0.02µs 7.3±0.03µs 134.3 Ktx/sec 134.3 Ktx/sec
stdb_raw 💿 location multi_index 1000 320.4±3104.13µs 64.9±385.59µs 3.0 Ktx/sec 15.0 Ktx/sec
stdb_raw 💿 location non_unique 0 4.8±0.02µs 4.8±0.02µs 202.1 Ktx/sec 205.3 Ktx/sec
stdb_raw 💿 location non_unique 1000 18.8±124.87µs 18.4±121.22µs 51.9 Ktx/sec 53.0 Ktx/sec
stdb_raw 💿 location unique 0 6.2±0.42µs 6.1±0.02µs 156.8 Ktx/sec 159.8 Ktx/sec
stdb_raw 💿 location unique 1000 8.6±0.14µs 29.3±207.89µs 114.1 Ktx/sec 33.3 Ktx/sec
stdb_raw 💿 person multi_index 0 10.9±0.03µs 10.9±0.02µs 89.2 Ktx/sec 89.6 Ktx/sec
stdb_raw 💿 person multi_index 1000 16.4±21.32µs 55.4±413.07µs 59.4 Ktx/sec 17.6 Ktx/sec
stdb_raw 💿 person non_unique 0 5.4±0.01µs 5.3±0.04µs 182.0 Ktx/sec 183.0 Ktx/sec
stdb_raw 💿 person non_unique 1000 7.2±0.19µs 7.1±0.24µs 136.2 Ktx/sec 138.4 Ktx/sec
stdb_raw 💿 person unique 0 7.8±0.02µs 7.7±0.02µs 126.0 Ktx/sec 126.8 Ktx/sec
stdb_raw 💿 person unique 1000 10.5±0.15µs 37.9±276.83µs 93.4 Ktx/sec 25.7 Ktx/sec
stdb_raw 🧠 location multi_index 0 4.2±0.01µs 4.2±0.01µs 231.2 Ktx/sec 232.4 Ktx/sec
stdb_raw 🧠 location multi_index 1000 5.8±0.06µs 5.9±0.06µs 168.1 Ktx/sec 166.4 Ktx/sec
stdb_raw 🧠 location non_unique 0 1923.3±3.67ns 1936.6±3.70ns 507.8 Ktx/sec 504.3 Ktx/sec
stdb_raw 🧠 location non_unique 1000 2.4±0.01µs 2.4±0.01µs 405.0 Ktx/sec 405.1 Ktx/sec
stdb_raw 🧠 location unique 0 3.2±0.01µs 3.2±0.01µs 303.4 Ktx/sec 305.0 Ktx/sec
stdb_raw 🧠 location unique 1000 4.3±0.03µs 4.3±0.04µs 225.7 Ktx/sec 225.0 Ktx/sec
stdb_raw 🧠 person multi_index 0 7.8±0.01µs 7.9±0.02µs 124.8 Ktx/sec 123.7 Ktx/sec
stdb_raw 🧠 person multi_index 1000 10.0±0.11µs 10.0±0.05µs 97.3 Ktx/sec 98.0 Ktx/sec
stdb_raw 🧠 person non_unique 0 2.5±0.00µs 2.5±0.00µs 392.7 Ktx/sec 391.1 Ktx/sec
stdb_raw 🧠 person non_unique 1000 3.2±0.02µs 3.3±0.03µs 302.8 Ktx/sec 299.2 Ktx/sec
stdb_raw 🧠 person unique 0 4.7±0.02µs 4.8±0.01µs 208.1 Ktx/sec 204.4 Ktx/sec
stdb_raw 🧠 person unique 1000 6.1±0.04µs 6.2±0.03µs 159.6 Ktx/sec 158.1 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 - 133.1±3.53µs - 7.3 Ktx/sec
sqlite 💿 location multi_index 1000 100 - 204.0±1.89µs - 4.8 Ktx/sec
sqlite 💿 location non_unique 0 100 - 52.7±1.18µs - 18.5 Ktx/sec
sqlite 💿 location non_unique 1000 100 - 54.9±0.41µs - 17.8 Ktx/sec
sqlite 💿 location unique 0 100 - 52.7±0.85µs - 18.5 Ktx/sec
sqlite 💿 location unique 1000 100 - 58.4±9.65µs - 16.7 Ktx/sec
sqlite 💿 person multi_index 0 100 - 117.8±0.34µs - 8.3 Ktx/sec
sqlite 💿 person multi_index 1000 100 - 232.8±0.58µs - 4.2 Ktx/sec
sqlite 💿 person non_unique 0 100 - 48.9±2.05µs - 20.0 Ktx/sec
sqlite 💿 person non_unique 1000 100 - 60.2±0.21µs - 16.2 Ktx/sec
sqlite 💿 person unique 0 100 - 50.5±1.80µs - 19.3 Ktx/sec
sqlite 💿 person unique 1000 100 - 55.8±0.32µs - 17.5 Ktx/sec
sqlite 🧠 location multi_index 0 100 - 120.4±0.28µs - 8.1 Ktx/sec
sqlite 🧠 location multi_index 1000 100 - 171.3±0.52µs - 5.7 Ktx/sec
sqlite 🧠 location non_unique 0 100 - 45.3±0.41µs - 21.6 Ktx/sec
sqlite 🧠 location non_unique 1000 100 - 46.0±0.42µs - 21.2 Ktx/sec
sqlite 🧠 location unique 0 100 - 46.3±0.41µs - 21.1 Ktx/sec
sqlite 🧠 location unique 1000 100 - 49.8±0.34µs - 19.6 Ktx/sec
sqlite 🧠 person multi_index 0 100 - 106.3±0.23µs - 9.2 Ktx/sec
sqlite 🧠 person multi_index 1000 100 - 189.3±0.32µs - 5.2 Ktx/sec
sqlite 🧠 person non_unique 0 100 - 42.9±0.30µs - 22.8 Ktx/sec
sqlite 🧠 person non_unique 1000 100 - 46.0±0.47µs - 21.2 Ktx/sec
sqlite 🧠 person unique 0 100 - 45.2±0.24µs - 21.6 Ktx/sec
sqlite 🧠 person unique 1000 100 - 48.2±0.39µs - 20.3 Ktx/sec
stdb_module 💿 location multi_index 0 100 793.4±146.56µs 1017.5±1.91µs 1260 tx/sec 982 tx/sec
stdb_module 💿 location multi_index 1000 100 1318.9±13.44µs 1312.0±11.00µs 758 tx/sec 762 tx/sec
stdb_module 💿 location non_unique 0 100 602.3±78.20µs 621.7±10.68µs 1660 tx/sec 1608 tx/sec
stdb_module 💿 location non_unique 1000 100 768.5±100.76µs 772.3±76.68µs 1301 tx/sec 1294 tx/sec
stdb_module 💿 location unique 0 100 602.5±4.55µs 779.1±217.96µs 1659 tx/sec 1283 tx/sec
stdb_module 💿 location unique 1000 100 826.6±109.32µs 771.1±29.47µs 1209 tx/sec 1296 tx/sec
stdb_module 💿 person multi_index 0 100 1090.2±7.24µs 971.9±98.65µs 917 tx/sec 1028 tx/sec
stdb_module 💿 person multi_index 1000 100 1169.1±6.06µs 1121.7±3.98µs 855 tx/sec 891 tx/sec
stdb_module 💿 person non_unique 0 100 715.2±80.65µs 631.9±6.21µs 1398 tx/sec 1582 tx/sec
stdb_module 💿 person non_unique 1000 100 716.0±97.24µs 516.1±16.90µs 1396 tx/sec 1937 tx/sec
stdb_module 💿 person unique 0 100 790.3±80.89µs 748.5±3.23µs 1265 tx/sec 1335 tx/sec
stdb_module 💿 person unique 1000 100 943.3±1040.41µs 757.6±46.17µs 1060 tx/sec 1319 tx/sec
stdb_module 🧠 location multi_index 0 100 780.7±8.72µs 634.6±107.50µs 1280 tx/sec 1575 tx/sec
stdb_module 🧠 location multi_index 1000 100 665.0±34.73µs 704.1±60.99µs 1503 tx/sec 1420 tx/sec
stdb_module 🧠 location non_unique 0 100 384.5±4.42µs 398.7±9.94µs 2.5 Ktx/sec 2.4 Ktx/sec
stdb_module 🧠 location non_unique 1000 100 456.9±7.13µs 485.2±9.24µs 2.1 Ktx/sec 2.0 Ktx/sec
stdb_module 🧠 location unique 0 100 505.6±97.20µs 502.0±55.24µs 1977 tx/sec 1991 tx/sec
stdb_module 🧠 location unique 1000 100 500.3±3.11µs 691.8±89.95µs 1998 tx/sec 1445 tx/sec
stdb_module 🧠 person multi_index 0 100 932.6±2.98µs 878.6±2.31µs 1072 tx/sec 1138 tx/sec
stdb_module 🧠 person multi_index 1000 100 976.7±18.05µs 1138.6±50.26µs 1023 tx/sec 878 tx/sec
stdb_module 🧠 person non_unique 0 100 436.2±31.78µs 441.3±82.55µs 2.2 Ktx/sec 2.2 Ktx/sec
stdb_module 🧠 person non_unique 1000 100 546.2±53.05µs 658.4±2.47µs 1830 tx/sec 1518 tx/sec
stdb_module 🧠 person unique 0 100 639.8±10.13µs 580.6±2.90µs 1563 tx/sec 1722 tx/sec
stdb_module 🧠 person unique 1000 100 812.9±18.37µs 832.1±11.25µs 1230 tx/sec 1201 tx/sec
stdb_raw 💿 location multi_index 0 100 397.9±0.82µs 401.3±3.47µs 2.5 Ktx/sec 2.4 Ktx/sec
stdb_raw 💿 location multi_index 1000 100 421.0±1.28µs 454.1±302.11µs 2.3 Ktx/sec 2.2 Ktx/sec
stdb_raw 💿 location non_unique 0 100 172.1±0.32µs 171.0±0.21µs 5.7 Ktx/sec 5.7 Ktx/sec
stdb_raw 💿 location non_unique 1000 100 188.8±137.99µs 173.6±1.08µs 5.2 Ktx/sec 5.6 Ktx/sec
stdb_raw 💿 location unique 0 100 297.7±19.00µs 295.8±2.91µs 3.3 Ktx/sec 3.3 Ktx/sec
stdb_raw 💿 location unique 1000 100 335.5±224.94µs 336.8±226.34µs 2.9 Ktx/sec 2.9 Ktx/sec
stdb_raw 💿 person multi_index 0 100 717.8±20.68µs 723.5±16.17µs 1393 tx/sec 1382 tx/sec
stdb_raw 💿 person multi_index 1000 100 783.9±374.52µs 750.0±2.39µs 1275 tx/sec 1333 tx/sec
stdb_raw 💿 person non_unique 0 100 229.9±15.16µs 230.5±0.15µs 4.2 Ktx/sec 4.2 Ktx/sec
stdb_raw 💿 person non_unique 1000 100 230.6±0.46µs 233.8±0.63µs 4.2 Ktx/sec 4.2 Ktx/sec
stdb_raw 💿 person unique 0 100 434.0±0.38µs 447.2±78.75µs 2.2 Ktx/sec 2.2 Ktx/sec
stdb_raw 💿 person unique 1000 100 452.9±1.62µs 457.6±0.84µs 2.2 Ktx/sec 2.1 Ktx/sec
stdb_raw 🧠 location multi_index 0 100 299.7±0.65µs 300.8±1.18µs 3.3 Ktx/sec 3.2 Ktx/sec
stdb_raw 🧠 location multi_index 1000 100 322.1±0.33µs 321.8±1.48µs 3.0 Ktx/sec 3.0 Ktx/sec
stdb_raw 🧠 location non_unique 0 100 75.3±0.17µs 75.6±0.29µs 13.0 Ktx/sec 12.9 Ktx/sec
stdb_raw 🧠 location non_unique 1000 100 76.2±0.26µs 76.8±0.23µs 12.8 Ktx/sec 12.7 Ktx/sec
stdb_raw 🧠 location unique 0 100 198.4±0.65µs 198.9±0.35µs 4.9 Ktx/sec 4.9 Ktx/sec
stdb_raw 🧠 location unique 1000 100 214.7±0.33µs 217.3±0.35µs 4.5 Ktx/sec 4.5 Ktx/sec
stdb_raw 🧠 person multi_index 0 100 614.4±0.39µs 620.4±0.62µs 1627 tx/sec 1611 tx/sec
stdb_raw 🧠 person multi_index 1000 100 641.1±0.42µs 648.2±0.90µs 1559 tx/sec 1542 tx/sec
stdb_raw 🧠 person non_unique 0 100 126.5±0.19µs 130.1±0.38µs 7.7 Ktx/sec 7.5 Ktx/sec
stdb_raw 🧠 person non_unique 1000 100 129.3±0.46µs 132.3±0.16µs 7.6 Ktx/sec 7.4 Ktx/sec
stdb_raw 🧠 person unique 0 100 332.5±1.03µs 338.7±0.42µs 2.9 Ktx/sec 2.9 Ktx/sec
stdb_raw 🧠 person unique 1000 100 349.5±0.42µs 358.1±0.66µs 2.8 Ktx/sec 2.7 Ktx/sec

Full table iterate

db on disk schema index type new latency old latency new throughput old throughput
sqlite 💿 location unique - 8.9±0.08µs - 109.6 Ktx/sec
sqlite 💿 person unique - 9.2±0.11µs - 106.2 Ktx/sec
sqlite 🧠 location unique - 7.7±0.11µs - 127.2 Ktx/sec
sqlite 🧠 person unique - 8.0±0.10µs - 122.4 Ktx/sec
stdb_module 💿 location unique 47.5±6.31µs 49.9±5.87µs 20.6 Ktx/sec 19.6 Ktx/sec
stdb_module 💿 person unique 56.6±9.71µs 60.1±8.80µs 17.2 Ktx/sec 16.2 Ktx/sec
stdb_module 🧠 location unique 52.6±5.65µs 47.8±5.37µs 18.6 Ktx/sec 20.4 Ktx/sec
stdb_module 🧠 person unique 60.8±10.68µs 59.5±10.79µs 16.1 Ktx/sec 16.4 Ktx/sec
stdb_raw 💿 location unique 9.4±0.03µs 8.9±0.00µs 103.9 Ktx/sec 109.8 Ktx/sec
stdb_raw 💿 person unique 9.4±0.01µs 8.9±0.03µs 104.0 Ktx/sec 109.7 Ktx/sec
stdb_raw 🧠 location unique 9.4±0.00µs 8.9±0.01µs 103.9 Ktx/sec 109.7 Ktx/sec
stdb_raw 🧠 person unique 9.4±0.01µs 8.9±0.09µs 104.1 Ktx/sec 109.6 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 - 412.1 Ktx/sec
sqlite 🧠 u32 1000 - 1156.4±6.34ns - 844.4 Ktx/sec
stdb_module 💿 u32 1000 25.1±2.05µs 24.1±1.48µs 38.9 Ktx/sec 40.5 Ktx/sec
stdb_module 🧠 u32 1000 27.6±2.25µs 25.3±2.06µs 35.3 Ktx/sec 38.6 Ktx/sec
stdb_raw 💿 u32 1000 1981.5±4.33ns 1906.0±5.54ns 492.8 Ktx/sec 512.4 Ktx/sec
stdb_raw 🧠 u32 1000 1976.4±3.92ns 1902.2±2.36ns 494.1 Ktx/sec 513.4 Ktx/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.01µs - 172.7 Ktx/sec
sqlite 💿 string non_indexed 1000 10 - 49.3±0.36µs - 19.8 Ktx/sec
sqlite 💿 u64 indexed 1000 10 - 5.4±0.02µs - 179.8 Ktx/sec
sqlite 💿 u64 non_indexed 1000 10 - 33.2±0.14µs - 29.5 Ktx/sec
sqlite 🧠 string indexed 1000 10 - 4.2±0.01µs - 233.0 Ktx/sec
sqlite 🧠 string non_indexed 1000 10 - 48.1±0.33µs - 20.3 Ktx/sec
sqlite 🧠 u64 indexed 1000 10 - 4.0±0.02µs - 241.5 Ktx/sec
sqlite 🧠 u64 non_indexed 1000 10 - 32.0±0.28µs - 30.5 Ktx/sec
stdb_module 💿 string indexed 1000 10 36.7±3.40µs 35.8±1.82µs 26.6 Ktx/sec 27.3 Ktx/sec
stdb_module 💿 string non_indexed 1000 10 187.4±10.27µs 175.1±1.96µs 5.2 Ktx/sec 5.6 Ktx/sec
stdb_module 💿 u64 indexed 1000 10 34.6±2.58µs 33.4±2.57µs 28.2 Ktx/sec 29.3 Ktx/sec
stdb_module 💿 u64 non_indexed 1000 10 153.2±6.28µs 146.5±2.27µs 6.4 Ktx/sec 6.7 Ktx/sec
stdb_module 🧠 string indexed 1000 10 38.8±2.35µs 36.2±2.84µs 25.2 Ktx/sec 27.0 Ktx/sec
stdb_module 🧠 string non_indexed 1000 10 180.9±4.98µs 175.1±5.23µs 5.4 Ktx/sec 5.6 Ktx/sec
stdb_module 🧠 u64 indexed 1000 10 33.7±2.38µs 32.7±2.70µs 29.0 Ktx/sec 29.9 Ktx/sec
stdb_module 🧠 u64 non_indexed 1000 10 144.5±4.99µs 144.9±1.28µs 6.8 Ktx/sec 6.7 Ktx/sec
stdb_raw 💿 string indexed 1000 10 5.1±0.01µs 4.3±0.01µs 191.9 Ktx/sec 224.6 Ktx/sec
stdb_raw 💿 string non_indexed 1000 10 142.0±0.67µs 135.7±0.33µs 6.9 Ktx/sec 7.2 Ktx/sec
stdb_raw 💿 u64 indexed 1000 10 5.0±0.01µs 4.3±0.02µs 195.6 Ktx/sec 229.7 Ktx/sec
stdb_raw 💿 u64 non_indexed 1000 10 118.4±0.93µs 113.1±0.21µs 8.2 Ktx/sec 8.6 Ktx/sec
stdb_raw 🧠 string indexed 1000 10 5.1±0.01µs 4.4±0.01µs 192.8 Ktx/sec 223.7 Ktx/sec
stdb_raw 🧠 string non_indexed 1000 10 138.3±0.46µs 135.4±0.33µs 7.1 Ktx/sec 7.2 Ktx/sec
stdb_raw 🧠 u64 indexed 1000 10 5.0±0.01µs 4.2±0.05µs 196.8 Ktx/sec 230.1 Ktx/sec
stdb_raw 🧠 u64 non_indexed 1000 10 118.4±0.33µs 112.8±0.14µs 8.3 Ktx/sec 8.7 Ktx/sec

Serialize

schema format count new latency old latency new throughput old throughput
location bsatn 100 1715.7±36.36ns 1758.1±34.87ns 55.6 Mtx/sec 54.2 Mtx/sec
location json 100 3.1±0.01µs 3.3±0.08µs 30.4 Mtx/sec 29.0 Mtx/sec
location product_value 100 609.1±30.91ns 572.6±0.79ns 156.6 Mtx/sec 166.6 Mtx/sec
person bsatn 100 2.9±0.01µs 2.5±0.04µs 32.8 Mtx/sec 37.8 Mtx/sec
person json 100 4.9±0.03µs 4.8±0.04µs 19.4 Mtx/sec 20.0 Mtx/sec
person product_value 100 1033.3±0.69ns 1027.5±0.85ns 92.3 Mtx/sec 92.8 Mtx/sec

Module: invoke with large arguments

arg size new latency old latency new throughput old throughput
64KiB 80.7±3.56µs 80.7±9.85µs - -

Module: print bulk

line count new latency old latency new throughput old throughput
1 23.8±1.61µs 23.1±1.14µs - -
100 205.9±3.56µs 198.0±3.21µs - -
1000 1889.2±430.39µs 1834.8±266.40µs - -

Remaining benchmarks

name new latency old latency new throughput old throughput

Copy link
Contributor

@gefjon gefjon left a comment

Choose a reason for hiding this comment

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

This looks reasonable, and I appreciate the comment explaining why SmallVec is useful here. We don't seem to have benchmarks for deletes, so I can't say whether this is a performance win or how much of one it is, but intuition says avoiding an allocation in the common path is a win.

@kulakowski
Copy link
Contributor

This looks reasonable, and I appreciate the comment explaining why SmallVec is useful here. We don't seem to have benchmarks for deletes, so I can't say whether this is a performance win or how much of one it is, but intuition says avoiding an allocation in the common path is a win.

I suspect as well but would like to include the "...at the expense of branches" in the train of thought.

Copy link
Contributor

@kulakowski kulakowski left a comment

Choose a reason for hiding this comment

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

just needs cargo fmt

@Centril Centril force-pushed the delete_by_col_eq-smallvec branch from 6e61261 to 0542027 Compare November 13, 2023 20:00
@Centril Centril enabled auto-merge (squash) November 13, 2023 20:01
@Centril Centril merged commit 48e299c into master Nov 13, 2023
@Centril Centril deleted the delete_by_col_eq-smallvec branch November 13, 2023 21:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants