* refactor: Update docs, remove unused field
* refactor: rename partition -> chunk
* feat: Introduce new partition, which is a holder for Chunks
* refactor: Remove use of wal from mutable database
* refactor: cleanups, remove last direct use of chunks
* fix: delete old benchmarks
* fix: clippy sacrifice
* docs: tidy up comments
* refactor: remove unused error types
* chore: remove commented out tests
This moves the HTTP API over to Routerify, which has the basic route parsing logic that will enable the API design for IOx.
I had a little trouble with the error handling in Routerify so I ended up creating a macro for constructing error responses in the HTTP API. I'm not sure what I think of this pattern so I'm interested in what others think. Another option would be to have two functions for each API endpoint. One which is x_handler with a Routerify function signature. Then another which is just x that has the Result<Response<Body>, ApplicationError> return type, which would make using the ? operator work in those functions. That would eliminate the need for the return_err macro.
I'm happy to refactor to that if people prefer it.
This commit adds an optimised `read_group` path for dealing with queries
where fewer than five columns are being grouped. In these cases we can
improve performance by packing the encoded ids for each column we are
grouping on into a single `u128` value. This then becomes the group key
that is used as the group key in the hash map.
When grouping by four or fewer columns, perforamnce improves by 40-70%.
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_20_columns_2_rows_500000
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_20_columns_2_rows_500000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_20_columns_2_rows_500000: Collecting 100 samples in estimated 5.6090 s (600 iterations)
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_20_columns_2_rows_500000: Analyzing
segment_read_group_all_time_vary_cardinality/cardinality_20_columns_2_rows_500000
time: [9.2663 ms 9.2869 ms 9.3068 ms]
thrpt: [2.1490 Kelem/s 2.1536 Kelem/s 2.1584 Kelem/s]
change:
time: [-43.972% -43.809% -43.651%] (p = 0.00 < 0.05)
thrpt: [+77.465% +77.963% +78.483%]
Performance has improved.
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_200_columns_2_rows_500000
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_200_columns_2_rows_500000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_200_columns_2_rows_500000: Collecting 100 samples in estimated 5.7914 s (600 iterations)
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_200_columns_2_rows_500000: Analyzing
segment_read_group_all_time_vary_cardinality/cardinality_200_columns_2_rows_500000
time: [9.4963 ms 9.5255 ms 9.5584 ms]
thrpt: [20.924 Kelem/s 20.996 Kelem/s 21.061 Kelem/s]
change:
time: [-42.611% -42.417% -42.210%] (p = 0.00 < 0.05)
thrpt: [+73.041% +73.663% +74.249%]
Performance has improved.
Found 3 outliers among 100 measurements (3.00%)
3 (3.00%) high severe
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_2000_columns_2_rows_500000
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_2000_columns_2_rows_500000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_2000_columns_2_rows_500000: Collecting 100 samples in estimated 5.0613 s (500 iterations)
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_2000_columns_2_rows_500000: Analyzing
segment_read_group_all_time_vary_cardinality/cardinality_2000_columns_2_rows_500000
time: [9.9595 ms 9.9860 ms 10.013 ms]
thrpt: [199.75 Kelem/s 200.28 Kelem/s 200.81 Kelem/s]
change:
time: [-43.450% -43.159% -42.881%] (p = 0.00 < 0.05)
thrpt: [+75.074% +75.928% +76.833%]
Performance has improved.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_20000_columns_3_rows_500000
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_20000_columns_3_rows_500000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_20000_columns_3_rows_500000: Collecting 100 samples in estimated 6.0549 s (400 iterations)
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_20000_columns_3_rows_500000: Analyzing
segment_read_group_all_time_vary_cardinality/cardinality_20000_columns_3_rows_500000
time: [15.100 ms 15.167 ms 15.240 ms]
thrpt: [1.3123 Melem/s 1.3186 Melem/s 1.3245 Melem/s]
change:
time: [-35.221% -34.961% -34.637%] (p = 0.00 < 0.05)
thrpt: [+52.992% +53.754% +54.370%]
Performance has improved.
Found 13 outliers among 100 measurements (13.00%)
10 (10.00%) high mild
3 (3.00%) high severe
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_2_rows_500000
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_2_rows_500000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_2_rows_500000: Collecting 100 samples in estimated 5.5845 s (400 iterations)
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_2_rows_500000: Analyzing
segment_read_group_all_time_vary_columns/cardinality_20000_columns_2_rows_500000
time: [13.893 ms 13.967 ms 14.047 ms]
thrpt: [1.4238 Melem/s 1.4320 Melem/s 1.4396 Melem/s]
change:
time: [-38.414% -38.035% -37.656%] (p = 0.00 < 0.05)
thrpt: [+60.401% +61.382% +62.375%]
Performance has improved.
Found 5 outliers among 100 measurements (5.00%)
3 (3.00%) high mild
2 (2.00%) high severe
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_3_rows_500000
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_3_rows_500000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_3_rows_500000: Collecting 100 samples in estimated 6.2989 s (400 iterations)
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_3_rows_500000: Analyzing
segment_read_group_all_time_vary_columns/cardinality_20000_columns_3_rows_500000
time: [15.569 ms 15.632 ms 15.702 ms]
thrpt: [1.2737 Melem/s 1.2794 Melem/s 1.2846 Melem/s]
change:
time: [-34.404% -34.108% -33.802%] (p = 0.00 < 0.05)
thrpt: [+51.061% +51.763% +52.448%]
Performance has improved.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high severe
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_4_rows_500000
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_4_rows_500000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_4_rows_500000: Collecting 100 samples in estimated 6.5689 s (400 iterations)
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_4_rows_500000: Analyzing
segment_read_group_all_time_vary_columns/cardinality_20000_columns_4_rows_500000
time: [16.630 ms 16.683 ms 16.739 ms]
thrpt: [1.1948 Melem/s 1.1988 Melem/s 1.2026 Melem/s]
change:
time: [-34.769% -34.463% -34.173%] (p = 0.00 < 0.05)
thrpt: [+51.914% +52.586% +53.301%]
Performance has improved.
Found 3 outliers among 100 measurements (3.00%)
3 (3.00%) high mild
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_250000
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_250000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_250000: Collecting 100 samples in estimated 5.7865 s (600 iterations)
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_250000: Analyzing
segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_250000
time: [9.6025 ms 9.6197 ms 9.6363 ms]
thrpt: [2.0755 Melem/s 2.0791 Melem/s 2.0828 Melem/s]
change:
time: [-33.373% -33.249% -33.128%] (p = 0.00 < 0.05)
thrpt: [+49.540% +49.811% +50.089%]
Performance has improved.
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_500000
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_500000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_500000: Collecting 100 samples in estimated 5.6980 s (400 iterations)
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_500000: Analyzing
segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_500000
time: [14.364 ms 14.812 ms 15.502 ms]
thrpt: [1.2901 Melem/s 1.3502 Melem/s 1.3924 Melem/s]
change:
time: [-38.419% -36.424% -33.583%] (p = 0.00 < 0.05)
thrpt: [+50.564% +57.293% +62.388%]
Performance has improved.
Found 4 outliers among 100 measurements (4.00%)
1 (1.00%) high mild
3 (3.00%) high severe
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_750000
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_750000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_750000: Collecting 100 samples in estimated 6.2573 s (300 iterations)
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_750000: Analyzing
segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_750000
time: [20.850 ms 20.904 ms 20.958 ms]
thrpt: [954.30 Kelem/s 956.77 Kelem/s 959.23 Kelem/s]
change:
time: [-32.472% -32.262% -32.044%] (p = 0.00 < 0.05)
thrpt: [+47.154% +47.627% +48.088%]
Performance has improved.
Found 4 outliers among 100 measurements (4.00%)
1 (1.00%) low mild
3 (3.00%) high mild
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_1000000
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_1000000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_1000000: Collecting 100 samples in estimated 5.1162 s (200 iterations)
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_1000000: Analyzing
segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_1000000
time: [25.505 ms 25.580 ms 25.654 ms]
thrpt: [779.61 Kelem/s 781.86 Kelem/s 784.15 Kelem/s]
change:
time: [-35.201% -34.993% -34.775%] (p = 0.00 < 0.05)
thrpt: [+53.316% +53.829% +54.323%]
Performance has improved.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) low mild
Moves the server ID value outside of the mutex-wrapped `Config` type and
into the `Server` struct, synchronising threads using an atomic instead.
This prevents any calls to `require_id()` from having to contend for a
read lock on the config mutex while maintaining lineraisaion of ID
values - all threads see the change as soon as it is set.
On x86 this synchronisation is actually completely "free" - memory
accesses are totally ordered, so this turns into a compile fence to
prevent LLVM changing program order at compile time with no runtime
overhead at all.
Previously the ID value was wrote as part of the config, but this is no
longer the case. It should be easy to add back in, but it appears to be
redundant as the ID is required to construct the path to the config when
loading in the first place.
* chore: Connect server crate to http routes and server command
This updates the http_routes and main server to use the Server crate. This is the first step in a larger effort to start hooking up the initial IOx API and get things running end to end with in-memory database, WAL buffer, and object storage.
For the time being, this disables the previous disk based WAL. Or rather, it uses the WriteBufferDb without it. That means that this IOx server has no persistence until later. Because of this, the restart in the end-to-end was removed.
Later PRs will add the WAL buffer and restart logic that loads from object store. We can opt to bring the local disk based WAL back later, but it will likely require some refactoring to work with how the WAL Buffer will operate.
This commit refactors `read_group` such that it only needs to support
encoded group key types for dictionary columns (which are encoded with
`u32` values). This simplifies the code and removes a rather clunky
`u32` -> `i64` conversion.
`read_group` does not support grouping by time (i64`) or other numeric
columns.
This commit swaps out the std library `HashMap` for the implementation
provided by the `hashbrown` crate. Not only does this allow us to use
the raw entry API, but it increases performance through the use of a
faster non-crytographically safe hashing function. We do not need an
expensive hash function for this code path.
Benchmark improvements are roughly 20-40%.
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_20_columns_2_rows_500000
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_20_columns_2_rows_500000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_20_columns_2_rows_500000: Collecting 100 samples in estimated 6.5961 s (400 iterations)
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_20_columns_2_rows_500000: Analyzing
segment_read_group_all_time_vary_cardinality/cardinality_20_columns_2_rows_500000
time: [16.502 ms 16.527 ms 16.558 ms]
thrpt: [1.2079 Kelem/s 1.2101 Kelem/s 1.2120 Kelem/s]
change:
time: [-40.808% -40.616% -40.428%] (p = 0.00 < 0.05)
thrpt: [+67.863% +68.394% +68.942%]
Performance has improved.
Found 8 outliers among 100 measurements (8.00%)
4 (4.00%) high mild
4 (4.00%) high severe
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_200_columns_2_rows_500000
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_200_columns_2_rows_500000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_200_columns_2_rows_500000: Collecting 100 samples in estimated 5.0698 s (300 iterations)
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_200_columns_2_rows_500000: Analyzing
segment_read_group_all_time_vary_cardinality/cardinality_200_columns_2_rows_500000
time: [16.531 ms 16.542 ms 16.555 ms]
thrpt: [12.081 Kelem/s 12.090 Kelem/s 12.099 Kelem/s]
change:
time: [-43.304% -43.047% -42.810%] (p = 0.00 < 0.05)
thrpt: [+74.856% +75.582% +76.378%]
Performance has improved.
Found 8 outliers among 100 measurements (8.00%)
5 (5.00%) high mild
3 (3.00%) high severe
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_2000_columns_2_rows_500000
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_2000_columns_2_rows_500000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_2000_columns_2_rows_500000: Collecting 100 samples in estimated 5.2590 s (300 iterations)
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_2000_columns_2_rows_500000: Analyzing
segment_read_group_all_time_vary_cardinality/cardinality_2000_columns_2_rows_500000
time: [17.497 ms 17.568 ms 17.648 ms]
thrpt: [113.33 Kelem/s 113.84 Kelem/s 114.30 Kelem/s]
change:
time: [-38.468% -38.188% -37.880%] (p = 0.00 < 0.05)
thrpt: [+60.978% +61.782% +62.518%]
Performance has improved.
Found 12 outliers among 100 measurements (12.00%)
12 (12.00%) high severe
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_20000_columns_3_rows_500000
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_20000_columns_3_rows_500000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_20000_columns_3_rows_500000: Collecting 100 samples in estimated 7.0471 s (300 iterations)
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_20000_columns_3_rows_500000: Analyzing
segment_read_group_all_time_vary_cardinality/cardinality_20000_columns_3_rows_500000
time: [23.305 ms 23.320 ms 23.336 ms]
thrpt: [857.05 Kelem/s 857.64 Kelem/s 858.20 Kelem/s]
change:
time: [-35.933% -35.778% -35.648%] (p = 0.00 < 0.05)
thrpt: [+55.396% +55.711% +56.087%]
Performance has improved.
Found 3 outliers among 100 measurements (3.00%)
3 (3.00%) high mild
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_2_rows_500000
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_2_rows_500000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_2_rows_500000: Collecting 100 samples in estimated 6.8058 s (300 iterations)
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_2_rows_500000: Analyzing
segment_read_group_all_time_vary_columns/cardinality_20000_columns_2_rows_500000
time: [22.475 ms 22.540 ms 22.622 ms]
thrpt: [884.10 Kelem/s 887.31 Kelem/s 889.87 Kelem/s]
change:
time: [-34.249% -34.051% -33.768%] (p = 0.00 < 0.05)
thrpt: [+50.984% +51.633% +52.089%]
Performance has improved.
Found 11 outliers among 100 measurements (11.00%)
2 (2.00%) high mild
9 (9.00%) high severe
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_3_rows_500000
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_3_rows_500000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_3_rows_500000: Collecting 100 samples in estimated 7.0631 s (300 iterations)
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_3_rows_500000: Analyzing
segment_read_group_all_time_vary_columns/cardinality_20000_columns_3_rows_500000
time: [23.683 ms 23.724 ms 23.779 ms]
thrpt: [841.08 Kelem/s 843.02 Kelem/s 844.49 Kelem/s]
change:
time: [-34.575% -34.419% -34.241%] (p = 0.00 < 0.05)
thrpt: [+52.070% +52.482% +52.847%]
Performance has improved.
Found 9 outliers among 100 measurements (9.00%)
6 (6.00%) high mild
3 (3.00%) high severe
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_4_rows_500000
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_4_rows_500000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_4_rows_500000: Collecting 100 samples in estimated 5.1007 s (200 iterations)
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_4_rows_500000: Analyzing
segment_read_group_all_time_vary_columns/cardinality_20000_columns_4_rows_500000
time: [25.379 ms 25.456 ms 25.545 ms]
thrpt: [782.93 Kelem/s 785.67 Kelem/s 788.06 Kelem/s]
change:
time: [-37.254% -36.988% -36.701%] (p = 0.00 < 0.05)
thrpt: [+57.981% +58.699% +59.373%]
Performance has improved.
Found 10 outliers among 100 measurements (10.00%)
2 (2.00%) high mild
8 (8.00%) high severe
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_250000
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_250000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_250000: Collecting 100 samples in estimated 5.7756 s (400 iterations)
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_250000: Analyzing
segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_250000
time: [14.404 ms 14.411 ms 14.419 ms]
thrpt: [1.3870 Melem/s 1.3878 Melem/s 1.3885 Melem/s]
change:
time: [-28.007% -27.893% -27.798%] (p = 0.00 < 0.05)
thrpt: [+38.500% +38.683% +38.903%]
Performance has improved.
Found 7 outliers among 100 measurements (7.00%)
3 (3.00%) high mild
4 (4.00%) high severe
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_500000
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_500000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_500000: Collecting 100 samples in estimated 6.9256 s (300 iterations)
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_500000: Analyzing
segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_500000
time: [23.191 ms 23.299 ms 23.419 ms]
thrpt: [854.02 Kelem/s 858.42 Kelem/s 862.40 Kelem/s]
change:
time: [-32.647% -32.302% -31.912%] (p = 0.00 < 0.05)
thrpt: [+46.868% +47.715% +48.471%]
Performance has improved.
Found 11 outliers among 100 measurements (11.00%)
11 (11.00%) high severe
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_750000
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_750000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_750000: Collecting 100 samples in estimated 6.1544 s (200 iterations)
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_750000: Analyzing
segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_750000
time: [30.813 ms 30.859 ms 30.916 ms]
thrpt: [646.92 Kelem/s 648.10 Kelem/s 649.07 Kelem/s]
change:
time: [-37.155% -36.779% -36.436%] (p = 0.00 < 0.05)
thrpt: [+57.322% +58.174% +59.121%]
Performance has improved.
Found 12 outliers among 100 measurements (12.00%)
5 (5.00%) high mild
7 (7.00%) high severe
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_1000000
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_1000000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_1000000: Collecting 100 samples in estimated 7.8548 s (200 iterations)
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_1000000: Analyzing
segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_1000000
time: [39.303 ms 39.349 ms 39.405 ms]
thrpt: [507.55 Kelem/s 508.27 Kelem/s 508.86 Kelem/s]
change:
time: [-36.857% -36.699% -36.576%] (p = 0.00 < 0.05)
thrpt: [+57.669% +57.975% +58.371%]
Performance has improved.
Found 14 outliers among 100 measurements (14.00%)
8 (8.00%) high mild
6 (6.00%) high severe
Benchmark changes are below. In summary, for large maps (lots of group
keys) or for large segments (many rows to check the group keys of), a
`HashMap` provides a significant advantage over a `BTreMap`.
Naturually this is likely down to the need to maintain a sorted
representation in `BTreeMap`.
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_20_columns_2_rows_500000
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_20_columns_2_rows_500000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_20_columns_2_rows_500000: Collecting 100 samples in estimated 5.5199 s (200 iterations)
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_20_columns_2_rows_500000: Analyzing
segment_read_group_all_time_vary_cardinality/cardinality_20_columns_2_rows_500000
time: [27.761 ms 27.831 ms 27.914 ms]
thrpt: [716.48 elem/s 718.62 elem/s 720.43 elem/s]
change:
time: [+24.636% +25.140% +25.591%] (p = 0.00 < 0.05)
thrpt: [-20.376% -20.089% -19.766%]
Performance has regressed.
Found 3 outliers among 100 measurements (3.00%)
3 (3.00%) high severe
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_200_columns_2_rows_500000
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_200_columns_2_rows_500000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_200_columns_2_rows_500000: Collecting 100 samples in estimated 5.7696 s (200 iterations)
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_200_columns_2_rows_500000: Analyzing
segment_read_group_all_time_vary_cardinality/cardinality_200_columns_2_rows_500000
time: [28.927 ms 29.045 ms 29.176 ms]
thrpt: [6.8550 Kelem/s 6.8858 Kelem/s 6.9141 Kelem/s]
change:
time: [-18.275% -17.911% -17.546%] (p = 0.00 < 0.05)
thrpt: [+21.280% +21.819% +22.362%]
Performance has improved.
Found 16 outliers among 100 measurements (16.00%)
1 (1.00%) high mild
15 (15.00%) high severe
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_2000_columns_2_rows_500000
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_2000_columns_2_rows_500000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_2000_columns_2_rows_500000: Collecting 100 samples in estimated 5.7383 s (200 iterations)
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_2000_columns_2_rows_500000: Analyzing
segment_read_group_all_time_vary_cardinality/cardinality_2000_columns_2_rows_500000
time: [28.373 ms 28.422 ms 28.483 ms]
thrpt: [70.218 Kelem/s 70.368 Kelem/s 70.490 Kelem/s]
change:
time: [-43.553% -43.451% -43.324%] (p = 0.00 < 0.05)
thrpt: [+76.442% +76.839% +77.158%]
Performance has improved.
Found 10 outliers among 100 measurements (10.00%)
2 (2.00%) high mild
8 (8.00%) high severe
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_20000_columns_3_rows_500000
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_20000_columns_3_rows_500000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_20000_columns_3_rows_500000: Collecting 100 samples in estimated 7.4085 s (200 iterations)
Benchmarking segment_read_group_all_time_vary_cardinality/cardinality_20000_columns_3_rows_500000: Analyzing
segment_read_group_all_time_vary_cardinality/cardinality_20000_columns_3_rows_500000
time: [36.243 ms 36.312 ms 36.396 ms]
thrpt: [549.50 Kelem/s 550.79 Kelem/s 551.84 Kelem/s]
change:
time: [-55.005% -54.889% -54.761%] (p = 0.00 < 0.05)
thrpt: [+121.05% +121.67% +122.24%]
Performance has improved.
Found 18 outliers among 100 measurements (18.00%)
12 (12.00%) high mild
6 (6.00%) high severe
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_2_rows_500000
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_2_rows_500000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_2_rows_500000: Collecting 100 samples in estimated 6.9060 s (200 iterations)
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_2_rows_500000: Analyzing
segment_read_group_all_time_vary_columns/cardinality_20000_columns_2_rows_500000
time: [34.158 ms 34.178 ms 34.200 ms]
thrpt: [584.79 Kelem/s 585.17 Kelem/s 585.51 Kelem/s]
change:
time: [-54.179% -54.026% -53.895%] (p = 0.00 < 0.05)
thrpt: [+116.90% +117.51% +118.24%]
Performance has improved.
Found 11 outliers among 100 measurements (11.00%)
5 (5.00%) high mild
6 (6.00%) high severe
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_3_rows_500000
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_3_rows_500000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_3_rows_500000: Collecting 100 samples in estimated 7.3211 s (200 iterations)
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_3_rows_500000: Analyzing
segment_read_group_all_time_vary_columns/cardinality_20000_columns_3_rows_500000
time: [36.129 ms 36.175 ms 36.234 ms]
thrpt: [551.97 Kelem/s 552.87 Kelem/s 553.58 Kelem/s]
change:
time: [-57.655% -56.955% -56.451%] (p = 0.00 < 0.05)
thrpt: [+129.63% +132.32% +136.15%]
Performance has improved.
Found 9 outliers among 100 measurements (9.00%)
1 (1.00%) high mild
8 (8.00%) high severe
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_4_rows_500000
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_4_rows_500000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_4_rows_500000: Collecting 100 samples in estimated 8.0395 s (200 iterations)
Benchmarking segment_read_group_all_time_vary_columns/cardinality_20000_columns_4_rows_500000: Analyzing
segment_read_group_all_time_vary_columns/cardinality_20000_columns_4_rows_500000
time: [40.291 ms 40.398 ms 40.526 ms]
thrpt: [493.51 Kelem/s 495.07 Kelem/s 496.38 Kelem/s]
change:
time: [-59.068% -58.943% -58.812%] (p = 0.00 < 0.05)
thrpt: [+142.79% +143.57% +144.31%]
Performance has improved.
Found 11 outliers among 100 measurements (11.00%)
3 (3.00%) high mild
8 (8.00%) high severe
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_250000
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_250000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_250000: Collecting 100 samples in estimated 6.0187 s (300 iterations)
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_250000: Analyzing
segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_250000
time: [19.963 ms 19.986 ms 20.016 ms]
thrpt: [999.18 Kelem/s 1.0007 Melem/s 1.0019 Melem/s]
change:
time: [-53.554% -52.764% -52.162%] (p = 0.00 < 0.05)
thrpt: [+109.04% +111.70% +115.30%]
Performance has improved.
Found 7 outliers among 100 measurements (7.00%)
1 (1.00%) high mild
6 (6.00%) high severe
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_500000
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_500000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_500000: Collecting 100 samples in estimated 6.8805 s (200 iterations)
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_500000: Analyzing
segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_500000
time: [34.356 ms 34.415 ms 34.491 ms]
thrpt: [579.86 Kelem/s 581.14 Kelem/s 582.13 Kelem/s]
change:
time: [-53.993% -53.870% -53.740%] (p = 0.00 < 0.05)
thrpt: [+116.17% +116.78% +117.36%]
Performance has improved.
Found 8 outliers among 100 measurements (8.00%)
1 (1.00%) high mild
7 (7.00%) high severe
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_750000
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_750000: Warming up for 3.0000 s
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_750000: Collecting 100 samples in estimated 9.6729 s (200 iterations)
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_750000: Analyzing
segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_750000
time: [48.565 ms 48.811 ms 49.100 ms]
thrpt: [407.33 Kelem/s 409.74 Kelem/s 411.82 Kelem/s]
change:
time: [-54.391% -54.170% -53.892%] (p = 0.00 < 0.05)
thrpt: [+116.88% +118.20% +119.26%]
Performance has improved.
Found 14 outliers among 100 measurements (14.00%)
1 (1.00%) low mild
2 (2.00%) high mild
11 (11.00%) high severe
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_1000000
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_1000000: Warming up for 3.0000 s
Warning: Unable to complete 100 samples in 5.0s. You may wish to increase target time to 6.2s, or reduce sample count to 80.
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_1000000: Collecting 100 samples in estimated 6.2144 s (100 iterations)
Benchmarking segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_1000000: Analyzing
segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_1000000
time: [62.069 ms 62.162 ms 62.299 ms]
thrpt: [321.03 Kelem/s 321.74 Kelem/s 322.22 Kelem/s]
change:
time: [-55.681% -55.537% -55.397%] (p = 0.00 < 0.05)
thrpt: [+124.20% +124.91% +125.64%]
Performance has improved.
Found 11 outliers among 100 measurements (11.00%)
4 (4.00%) high mild
7 (7.00%) high severe
This commit provides functionality on top of the `GroupKey` type (a
vector of materialised values), which allows them to be comparable by
implementing `Ord`.
Then, using the `permutation` crate, it is possible sort all rows in a
result set based on the group keys, which will be useful for testing.
This commit adds some initial benchmarks for the general read_group
approach using a hashing strategy. Benchmarks are as follows:
segment_read_group_all_time_vary_cardinality/cardinality_20_columns_2_rows_500000
time: [23.335 ms 23.363 ms 23.397 ms]
thrpt: [854.82 elem/s 856.07 elem/s 857.07
elem/s]
Found 8 outliers among 100 measurements (8.00%)
4 (4.00%) high mild
4 (4.00%) high severe
segment_read_group_all_time_vary_cardinality/cardinality_200_columns_2_rows_500000
time: [34.266 ms 34.301 ms 34.346 ms]
thrpt: [5.8231 Kelem/s 5.8307 Kelem/s 5.8367
Kelem/s]
Found 13 outliers among 100 measurements (13.00%)
5 (5.00%) high mild
8 (8.00%) high severe
segment_read_group_all_time_vary_cardinality/cardinality_2000_columns_2_rows_500000
time: [48.788 ms 48.996 ms 49.238 ms]
thrpt: [40.619 Kelem/s 40.820 Kelem/s 40.993
Kelem/s]
Found 11 outliers among 100 measurements (11.00%)
3 (3.00%) high mild
8 (8.00%) high severe
Benchmarking
segment_read_group_all_time_vary_cardinality/cardinality_20000_columns_3_rows_500000:
Warming up for 3.0000 s
Warning: Unable to complete 100 samples in 5.0s. You may wish to
increase target time to 8.2s, or reduce sample count to 60.
segment_read_group_all_time_vary_cardinality/cardinality_20000_columns_3_rows_500000
time: [80.133 ms 80.201 ms 80.287 ms]
thrpt: [249.11 Kelem/s 249.37 Kelem/s 249.58
Kelem/s]
Found 3 outliers among 100 measurements (3.00%)
1 (1.00%) high mild
2 (2.00%) high severe
Benchmarking
segment_read_group_all_time_vary_columns/cardinality_20000_columns_2_rows_500000:
Warming up for 3.0000 s
Warning: Unable to complete 100 samples in 5.0s. You may wish to
increase target time to 7.4s, or reduce sample count to 60.
segment_read_group_all_time_vary_columns/cardinality_20000_columns_2_rows_500000
time: [73.692 ms 73.951 ms 74.245 ms]
thrpt: [269.38 Kelem/s 270.45 Kelem/s 271.40
Kelem/s]
Found 13 outliers among 100 measurements (13.00%)
13 (13.00%) high severe
Benchmarking
segment_read_group_all_time_vary_columns/cardinality_20000_columns_3_rows_500000:
Warming up for 3.0000 s
Warning: Unable to complete 100 samples in 5.0s. You may wish to
increase target time to 8.1s, or reduce sample count to 60.
segment_read_group_all_time_vary_columns/cardinality_20000_columns_3_rows_500000
time: [79.837 ms 79.934 ms 80.079 ms]
thrpt: [249.75 Kelem/s 250.21 Kelem/s 250.51
Kelem/s]
Found 7 outliers among 100 measurements (7.00%)
5 (5.00%) high mild
2 (2.00%) high severe
Benchmarking
segment_read_group_all_time_vary_columns/cardinality_20000_columns_4_rows_500000:
Warming up for 3.0000 s
Warning: Unable to complete 100 samples in 5.0s. You may wish to
increase target time to 9.7s, or reduce sample count to 50.
segment_read_group_all_time_vary_columns/cardinality_20000_columns_4_rows_500000
time: [95.415 ms 95.549 ms 95.707 ms]
thrpt: [208.97 Kelem/s 209.32 Kelem/s 209.61
Kelem/s]
Found 15 outliers among 100 measurements (15.00%)
7 (7.00%) high mild
8 (8.00%) high severe
segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_250000
time: [38.897 ms 39.045 ms 39.227 ms]
thrpt: [509.86 Kelem/s 512.22 Kelem/s 514.18
Kelem/s]
Found 13 outliers among 100 measurements (13.00%)
4 (4.00%) high mild
9 (9.00%) high severe
Benchmarking
segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_500000:
Warming up for 3.0000 s
Warning: Unable to complete 100 samples in 5.0s. You may wish to
increase target time to 7.2s, or reduce sample count to 60.
segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_500000
time: [71.965 ms 72.190 ms 72.445 ms]
thrpt: [276.07 Kelem/s 277.04 Kelem/s 277.91
Kelem/s]
Found 21 outliers among 100 measurements (21.00%)
4 (4.00%) low mild
3 (3.00%) high mild
14 (14.00%) high severe
Benchmarking
segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_750000:
Warming up for 3.0000 s
Warning: Unable to complete 100 samples in 5.0s. You may wish to
increase target time to 10.7s, or reduce sample count to 40.
segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_750000
time: [106.48 ms 106.58 ms 106.70 ms]
thrpt: [187.43 Kelem/s 187.65 Kelem/s 187.82
Kelem/s]
Found 4 outliers among 100 measurements (4.00%)
2 (2.00%) high mild
2 (2.00%) high severe
Benchmarking
segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_1000000:
Warming up for 3.0000 s
Warning: Unable to complete 100 samples in 5.0s. You may wish to
increase target time to 14.0s, or reduce sample count to 30.
segment_read_group_all_time_vary_rows/cardinality_20000_columns_2_rows_1000000
time: [140.02 ms 140.14 ms 140.29 ms]
thrpt: [142.57 Kelem/s 142.71 Kelem/s 142.84
Kelem/s]
Found 4 outliers among 100 measurements (4.00%)
4 (4.00%) high severe
segment_read_group_pre_computed_groups_vary_cardinality/cardinality_2_columns_1_rows_500000
time: [51.734 us 52.123 us 52.560 us]
thrpt: [38.051 Kelem/s 38.371 Kelem/s 38.659
Kelem/s]
Found 18 outliers among 100 measurements (18.00%)
3 (3.00%) high mild
15 (15.00%) high severe
segment_read_group_pre_computed_groups_vary_cardinality/cardinality_20_columns_2_rows_500000
time: [50.546 us 50.642 us 50.785 us]
thrpt: [393.82 Kelem/s 394.93 Kelem/s 395.68
Kelem/s]
Found 8 outliers among 100 measurements (8.00%)
3 (3.00%) low mild
2 (2.00%) high mild
3 (3.00%) high severe
segment_read_group_pre_computed_groups_vary_cardinality/cardinality_200_columns_2_rows_500000
time: [267.47 us 270.23 us 273.10 us]
thrpt: [732.33 Kelem/s 740.12 Kelem/s 747.75
Kelem/s]
segment_read_group_pre_computed_groups_vary_cardinality/cardinality_2000_columns_2_rows_500000
time: [14.961 ms 15.033 ms 15.113 ms]
thrpt: [132.33 Kelem/s 133.04 Kelem/s 133.68
Kelem/s]
Found 11 outliers among 100 measurements (11.00%)
3 (3.00%) high mild
8 (8.00%) high severe
segment_read_group_pre_computed_groups_vary_columns/cardinality_200_columns_1_rows_500000
time: [84.825 us 84.938 us 85.083 us]
thrpt: [2.3506 Melem/s 2.3546 Melem/s 2.3578
Melem/s]
Found 14 outliers among 100 measurements (14.00%)
7 (7.00%) high mild
7 (7.00%) high severe
segment_read_group_pre_computed_groups_vary_columns/cardinality_200_columns_2_rows_500000
time: [258.81 us 259.33 us 260.05 us]
thrpt: [769.08 Kelem/s 771.22 Kelem/s 772.77
Kelem/s]
Found 14 outliers among 100 measurements (14.00%)
2 (2.00%) high mild
12 (12.00%) high severe
Benchmarking
segment_read_group_pre_computed_groups_vary_columns/cardinality_200_columns_3_rows_500000:
Warming up for 3.0000 s
Warning: Unable to complete 100 samples in 5.0s. You may wish to
increase target time to 6.1s, enable flat sampling, or reduce sample
count to 60.
segment_read_group_pre_computed_groups_vary_columns/cardinality_200_columns_3_rows_500000
time: [1.1971 ms 1.2020 ms 1.2079 ms]
thrpt: [165.58 Kelem/s 166.39 Kelem/s 167.07
Kelem/s]
Found 13 outliers among 100 measurements (13.00%)
3 (3.00%) high mild
10 (10.00%) high severe
segment_read_group_pre_computed_groups_vary_rows/cardinality_200_columns_2_rows_250000
time: [252.42 us 252.58 us 252.75 us]
thrpt: [791.31 Kelem/s 791.84 Kelem/s 792.32
Kelem/s]
Found 10 outliers among 100 measurements (10.00%)
2 (2.00%) high mild
8 (8.00%) high severe
segment_read_group_pre_computed_groups_vary_rows/cardinality_200_columns_2_rows_500000
time: [271.68 us 272.46 us 273.59 us]
thrpt: [731.01 Kelem/s 734.04 Kelem/s 736.15
Kelem/s]
Found 8 outliers among 100 measurements (8.00%)
8 (8.00%) high severe
segment_read_group_pre_computed_groups_vary_rows/cardinality_200_columns_2_rows_750000
time: [293.17 us 293.42 us 293.65 us]
thrpt: [681.09 Kelem/s 681.63 Kelem/s 682.20
Kelem/s]
Found 9 outliers among 100 measurements (9.00%)
1 (1.00%) low mild
4 (4.00%) high mild
4 (4.00%) high severe
segment_read_group_pre_computed_groups_vary_rows/cardinality_200_columns_2_rows_1000000
time: [306.48 us 307.11 us 307.95 us]
thrpt: [649.45 Kelem/s 651.22 Kelem/s 652.57
Kelem/s]
Found 5 outliers among 100 measurements (5.00%)
3 (3.00%) high mild
2 (2.00%) high severe