richardstartin edited a comment on pull request #7454:
URL: https://github.com/apache/pinot/pull/7454#issuecomment-926172562
Here are some numbers for this change (run with JDK11 coretto). The
benchmark creates data of a given type and a given distribution, computes the
deciles of the data, and the queries for a range corresponding to the nth
decile. So `_decile=0` means querying for a range from the minimum value in the
segment to the largest value smaller than 90% of the segment. `_decile=5` means
start at the median and match 10% of rows.
For `INT`, `FLOAT`, and `LONG` query time is consistently faster, as is
index build time. Because of the lossless encoding used, `DOUBLE` is slower and
is comparable to the existing range index. Several things could be done about
this
1. Consider a lossy conversion, I don't like this approach and the decision
would need to be made before releasing this, otherwise lossy conversion would
require a new range index version for double columns
2. The data structure in `RoaringBitmap` could be made roughly 2x faster by
evaluating both ranges at once. Currently we pass over the `RangeBitmap` twice,
once for the upper bound, once for the lower bound, and then intersect them.
This could all be done in one pass in the future.
3. The data structure could be evolved to use another base for faster
queries for `DOUBLE` columns, at the expense of using more space. This would be
an easy migration if necessary since the serialisation format in
`RoaringBitmap` is forward compatible.
I recommend not doing anything about `DOUBLE` for now, and adopt this
format, on the basis that option 2 is available.
```
Benchmark (_dataType) (_decile) (_numDocs)
(_scenario) (_seed) Mode Cnt Score Error Units
BenchmarkRangeIndex.queryV1 INT 5 1000000
NORMAL(0,1) 42 avgt 5 6724.390 ± 341.587 us/op
BenchmarkRangeIndex.queryV1 INT 5 1000000
NORMAL(10000000,1000) 42 avgt 5 1679.114 ± 58.021 us/op
BenchmarkRangeIndex.queryV1 INT 5 1000000
EXP(0.0001) 42 avgt 5 1656.115 ± 92.468 us/op
BenchmarkRangeIndex.queryV1 INT 5 1000000
EXP(0.5) 42 avgt 5 2755.567 ± 178.396 us/op
BenchmarkRangeIndex.queryV1 INT 5 1000000
UNIFORM(0,100000000000) 42 avgt 5 1664.481 ± 25.965 us/op
BenchmarkRangeIndex.queryV1 INT 5 1000000
UNIFORM(100000000000, 100000000100) 42 avgt 5 1833.423 ±
65.662 us/op
BenchmarkRangeIndex.queryV1 INT 5 1000000
UNIFORM(0,100000000000) 42 avgt 5 1604.613 ± 36.730 us/op
BenchmarkRangeIndex.queryV1 INT 5 1000000
UNIFORM(100000000000, 100000000100) 42 avgt 5 1693.864 ±
11.346 us/op
BenchmarkRangeIndex.queryV1 LONG 5 1000000
NORMAL(0,1) 42 avgt 5 7325.071 ± 326.691 us/op
BenchmarkRangeIndex.queryV1 LONG 5 1000000
NORMAL(10000000,1000) 42 avgt 5 1638.851 ± 13.261 us/op
BenchmarkRangeIndex.queryV1 LONG 5 1000000
EXP(0.0001) 42 avgt 5 1655.873 ± 71.568 us/op
BenchmarkRangeIndex.queryV1 LONG 5 1000000
EXP(0.5) 42 avgt 5 2751.560 ± 264.398 us/op
BenchmarkRangeIndex.queryV1 LONG 5 1000000
UNIFORM(0,100000000000) 42 avgt 5 1729.673 ± 42.050 us/op
BenchmarkRangeIndex.queryV1 LONG 5 1000000
UNIFORM(100000000000, 100000000100) 42 avgt 5 1832.178 ±
25.334 us/op
BenchmarkRangeIndex.queryV1 LONG 5 1000000
UNIFORM(0,100000000000) 42 avgt 5 1630.938 ± 19.844 us/op
BenchmarkRangeIndex.queryV1 LONG 5 1000000
UNIFORM(100000000000, 100000000100) 42 avgt 5 1838.097 ±
22.097 us/op
BenchmarkRangeIndex.queryV1 FLOAT 5 1000000
NORMAL(0,1) 42 avgt 5 1671.051 ± 34.408 us/op
BenchmarkRangeIndex.queryV1 FLOAT 5 1000000
NORMAL(10000000,1000) 42 avgt 5 1660.597 ± 39.827 us/op
BenchmarkRangeIndex.queryV1 FLOAT 5 1000000
EXP(0.0001) 42 avgt 5 1748.752 ± 104.994 us/op
BenchmarkRangeIndex.queryV1 FLOAT 5 1000000
EXP(0.5) 42 avgt 5 1653.907 ± 32.989 us/op
BenchmarkRangeIndex.queryV1 FLOAT 5 1000000
UNIFORM(0,100000000000) 42 avgt 5 1742.404 ± 153.677 us/op
BenchmarkRangeIndex.queryV1 FLOAT 5 1000000
UNIFORM(100000000000, 100000000100) 42 avgt 5 8941.210 ±
362.685 us/op
BenchmarkRangeIndex.queryV1 FLOAT 5 1000000
UNIFORM(0,100000000000) 42 avgt 5 1694.232 ± 52.786 us/op
BenchmarkRangeIndex.queryV1 FLOAT 5 1000000
UNIFORM(100000000000, 100000000100) 42 avgt 5 8708.284 ±
203.975 us/op
BenchmarkRangeIndex.queryV1 DOUBLE 5 1000000
NORMAL(0,1) 42 avgt 5 1741.052 ± 31.400 us/op
BenchmarkRangeIndex.queryV1 DOUBLE 5 1000000
NORMAL(10000000,1000) 42 avgt 5 1806.929 ± 107.558 us/op
BenchmarkRangeIndex.queryV1 DOUBLE 5 1000000
EXP(0.0001) 42 avgt 5 1777.536 ± 72.958 us/op
BenchmarkRangeIndex.queryV1 DOUBLE 5 1000000
EXP(0.5) 42 avgt 5 1781.936 ± 16.409 us/op
BenchmarkRangeIndex.queryV1 DOUBLE 5 1000000
UNIFORM(0,100000000000) 42 avgt 5 1717.138 ± 21.024 us/op
BenchmarkRangeIndex.queryV1 DOUBLE 5 1000000
UNIFORM(100000000000, 100000000100) 42 avgt 5 1826.421 ±
113.665 us/op
BenchmarkRangeIndex.queryV1 DOUBLE 5 1000000
UNIFORM(0,100000000000) 42 avgt 5 1776.522 ± 46.617 us/op
BenchmarkRangeIndex.queryV1 DOUBLE 5 1000000
UNIFORM(100000000000, 100000000100) 42 avgt 5 1733.831 ±
22.657 us/op
BenchmarkRangeIndex.queryV2 INT 5 1000000
NORMAL(0,1) 42 avgt 5 167.473 ± 6.449 us/op
BenchmarkRangeIndex.queryV2 INT 5 1000000
NORMAL(10000000,1000) 42 avgt 5 607.574 ± 2.534 us/op
BenchmarkRangeIndex.queryV2 INT 5 1000000
EXP(0.0001) 42 avgt 5 761.198 ± 9.089 us/op
BenchmarkRangeIndex.queryV2 INT 5 1000000
EXP(0.5) 42 avgt 5 357.203 ± 2.710 us/op
BenchmarkRangeIndex.queryV2 INT 5 1000000
UNIFORM(0,100000000000) 42 avgt 5 832.929 ± 17.764 us/op
BenchmarkRangeIndex.queryV2 INT 5 1000000
UNIFORM(100000000000, 100000000100) 42 avgt 5 309.349 ±
2.834 us/op
BenchmarkRangeIndex.queryV2 INT 5 1000000
UNIFORM(0,100000000000) 42 avgt 5 835.358 ± 16.465 us/op
BenchmarkRangeIndex.queryV2 INT 5 1000000
UNIFORM(100000000000, 100000000100) 42 avgt 5 308.966 ±
3.106 us/op
BenchmarkRangeIndex.queryV2 LONG 5 1000000
NORMAL(0,1) 42 avgt 5 160.306 ± 9.662 us/op
BenchmarkRangeIndex.queryV2 LONG 5 1000000
NORMAL(10000000,1000) 42 avgt 5 607.199 ± 11.274 us/op
BenchmarkRangeIndex.queryV2 LONG 5 1000000
EXP(0.0001) 42 avgt 5 761.519 ± 7.005 us/op
BenchmarkRangeIndex.queryV2 LONG 5 1000000
EXP(0.5) 42 avgt 5 339.800 ± 3.553 us/op
BenchmarkRangeIndex.queryV2 LONG 5 1000000
UNIFORM(0,100000000000) 42 avgt 5 1686.816 ± 112.211 us/op
BenchmarkRangeIndex.queryV2 LONG 5 1000000
UNIFORM(100000000000, 100000000100) 42 avgt 5 309.759 ±
3.846 us/op
BenchmarkRangeIndex.queryV2 LONG 5 1000000
UNIFORM(0,100000000000) 42 avgt 5 1627.157 ± 37.182 us/op
BenchmarkRangeIndex.queryV2 LONG 5 1000000
UNIFORM(100000000000, 100000000100) 42 avgt 5 310.557 ±
8.902 us/op
BenchmarkRangeIndex.queryV2 FLOAT 5 1000000
NORMAL(0,1) 42 avgt 5 926.658 ± 35.276 us/op
BenchmarkRangeIndex.queryV2 FLOAT 5 1000000
NORMAL(10000000,1000) 42 avgt 5 820.031 ± 33.360 us/op
BenchmarkRangeIndex.queryV2 FLOAT 5 1000000
EXP(0.0001) 42 avgt 5 1362.855 ± 22.333 us/op
BenchmarkRangeIndex.queryV2 FLOAT 5 1000000
EXP(0.5) 42 avgt 5 738.290 ± 18.907 us/op
BenchmarkRangeIndex.queryV2 FLOAT 5 1000000
UNIFORM(0,100000000000) 42 avgt 5 1331.245 ± 40.306 us/op
BenchmarkRangeIndex.queryV2 FLOAT 5 1000000
UNIFORM(100000000000, 100000000100) 42 avgt 5 24.028 ±
0.687 us/op
BenchmarkRangeIndex.queryV2 FLOAT 5 1000000
UNIFORM(0,100000000000) 42 avgt 5 1328.662 ± 29.253 us/op
BenchmarkRangeIndex.queryV2 FLOAT 5 1000000
UNIFORM(100000000000, 100000000100) 42 avgt 5 24.437 ±
0.335 us/op
BenchmarkRangeIndex.queryV2 DOUBLE 5 1000000
NORMAL(0,1) 42 avgt 5 1811.274 ± 47.818 us/op
BenchmarkRangeIndex.queryV2 DOUBLE 5 1000000
NORMAL(10000000,1000) 42 avgt 5 2006.414 ± 43.702 us/op
BenchmarkRangeIndex.queryV2 DOUBLE 5 1000000
EXP(0.0001) 42 avgt 5 2635.751 ± 61.159 us/op
BenchmarkRangeIndex.queryV2 DOUBLE 5 1000000
EXP(0.5) 42 avgt 5 1797.613 ± 99.108 us/op
BenchmarkRangeIndex.queryV2 DOUBLE 5 1000000
UNIFORM(0,100000000000) 42 avgt 5 2491.316 ± 106.713 us/op
BenchmarkRangeIndex.queryV2 DOUBLE 5 1000000
UNIFORM(100000000000, 100000000100) 42 avgt 5 1049.657 ±
26.725 us/op
BenchmarkRangeIndex.queryV2 DOUBLE 5 1000000
UNIFORM(0,100000000000) 42 avgt 5 2616.917 ± 258.422 us/op
BenchmarkRangeIndex.queryV2 DOUBLE 5 1000000
UNIFORM(100000000000, 100000000100) 42 avgt 5 1049.279 ±
13.951 us/op
BenchmarkRangeIndex.createV1 INT N/A 1000000
NORMAL(0,1) 42 ss 5 113182.901 ± 67834.528 us/op
BenchmarkRangeIndex.createV1 INT N/A 1000000
NORMAL(10000000,1000) 42 ss 5 375338.881 ± 6212.163 us/op
BenchmarkRangeIndex.createV1 INT N/A 1000000
EXP(0.0001) 42 ss 5 436650.473 ± 7519.528 us/op
BenchmarkRangeIndex.createV1 INT N/A 1000000
EXP(0.5) 42 ss 5 137547.093 ± 4648.473 us/op
BenchmarkRangeIndex.createV1 INT N/A 1000000
UNIFORM(0,100000000000) 42 ss 5 546988.945 ± 22817.827 us/op
BenchmarkRangeIndex.createV1 INT N/A 1000000
UNIFORM(100000000000, 100000000100) 42 ss 5 287844.486 ±
104651.014 us/op
BenchmarkRangeIndex.createV1 INT N/A 1000000
UNIFORM(0,100000000000) 42 ss 5 538891.335 ± 64592.288 us/op
BenchmarkRangeIndex.createV1 INT N/A 1000000
UNIFORM(100000000000, 100000000100) 42 ss 5 292665.860 ±
39843.334 us/op
BenchmarkRangeIndex.createV1 LONG N/A 1000000
NORMAL(0,1) 42 ss 5 113853.468 ± 10754.627 us/op
BenchmarkRangeIndex.createV1 LONG N/A 1000000
NORMAL(10000000,1000) 42 ss 5 386002.879 ± 13724.519 us/op
BenchmarkRangeIndex.createV1 LONG N/A 1000000
EXP(0.0001) 42 ss 5 442085.193 ± 14979.299 us/op
BenchmarkRangeIndex.createV1 LONG N/A 1000000
EXP(0.5) 42 ss 5 146690.531 ± 9511.060 us/op
BenchmarkRangeIndex.createV1 LONG N/A 1000000
UNIFORM(0,100000000000) 42 ss 5 574195.880 ± 7166.069 us/op
BenchmarkRangeIndex.createV1 LONG N/A 1000000
UNIFORM(100000000000, 100000000100) 42 ss 5 283517.626 ±
5951.661 us/op
BenchmarkRangeIndex.createV1 LONG N/A 1000000
UNIFORM(0,100000000000) 42 ss 5 554756.767 ± 12630.176 us/op
BenchmarkRangeIndex.createV1 LONG N/A 1000000
UNIFORM(100000000000, 100000000100) 42 ss 5 285294.799 ±
7490.806 us/op
BenchmarkRangeIndex.createV1 FLOAT N/A 1000000
NORMAL(0,1) 42 ss 5 475590.610 ± 17834.880 us/op
BenchmarkRangeIndex.createV1 FLOAT N/A 1000000
NORMAL(10000000,1000) 42 ss 5 350757.276 ± 28081.516 us/op
BenchmarkRangeIndex.createV1 FLOAT N/A 1000000
EXP(0.0001) 42 ss 5 482675.137 ± 52474.766 us/op
BenchmarkRangeIndex.createV1 FLOAT N/A 1000000
EXP(0.5) 42 ss 5 477357.549 ± 25480.646 us/op
BenchmarkRangeIndex.createV1 FLOAT N/A 1000000
UNIFORM(0,100000000000) 42 ss 5 476962.173 ± 20946.250 us/op
BenchmarkRangeIndex.createV1 FLOAT N/A 1000000
UNIFORM(100000000000, 100000000100) 42 ss 5 66718.894 ±
12363.014 us/op
BenchmarkRangeIndex.createV1 FLOAT N/A 1000000
UNIFORM(0,100000000000) 42 ss 5 483928.163 ± 46663.945 us/op
BenchmarkRangeIndex.createV1 FLOAT N/A 1000000
UNIFORM(100000000000, 100000000100) 42 ss 5 69877.679 ±
17961.117 us/op
BenchmarkRangeIndex.createV1 DOUBLE N/A 1000000
NORMAL(0,1) 42 ss 5 478620.142 ± 23063.686 us/op
BenchmarkRangeIndex.createV1 DOUBLE N/A 1000000
NORMAL(10000000,1000) 42 ss 5 489118.331 ± 23570.345 us/op
BenchmarkRangeIndex.createV1 DOUBLE N/A 1000000
EXP(0.0001) 42 ss 5 494501.923 ± 49732.437 us/op
BenchmarkRangeIndex.createV1 DOUBLE N/A 1000000
EXP(0.5) 42 ss 5 503061.507 ± 103399.593 us/op
BenchmarkRangeIndex.createV1 DOUBLE N/A 1000000
UNIFORM(0,100000000000) 42 ss 5 489518.989 ± 29034.824 us/op
BenchmarkRangeIndex.createV1 DOUBLE N/A 1000000
UNIFORM(100000000000, 100000000100) 42 ss 5 488868.489 ±
25696.651 us/op
BenchmarkRangeIndex.createV1 DOUBLE N/A 1000000
UNIFORM(0,100000000000) 42 ss 5 495284.426 ± 26534.459 us/op
BenchmarkRangeIndex.createV1 DOUBLE N/A 1000000
UNIFORM(100000000000, 100000000100) 42 ss 5 493155.289 ±
41312.905 us/op
BenchmarkRangeIndex.createV2 INT N/A 1000000
NORMAL(0,1) 42 ss 5 31557.939 ± 1621.705 us/op
BenchmarkRangeIndex.createV2 INT N/A 1000000
NORMAL(10000000,1000) 42 ss 5 153848.542 ± 21056.818 us/op
BenchmarkRangeIndex.createV2 INT N/A 1000000
EXP(0.0001) 42 ss 5 251817.559 ± 9385.519 us/op
BenchmarkRangeIndex.createV2 INT N/A 1000000
EXP(0.5) 42 ss 5 37842.500 ± 2152.924 us/op
BenchmarkRangeIndex.createV2 INT N/A 1000000
UNIFORM(0,100000000000) 42 ss 5 476068.705 ± 8204.144 us/op
BenchmarkRangeIndex.createV2 INT N/A 1000000
UNIFORM(100000000000, 100000000100) 42 ss 5 59718.807 ±
3406.474 us/op
BenchmarkRangeIndex.createV2 INT N/A 1000000
UNIFORM(0,100000000000) 42 ss 5 409972.865 ± 10681.709 us/op
BenchmarkRangeIndex.createV2 INT N/A 1000000
UNIFORM(100000000000, 100000000100) 42 ss 5 65081.968 ±
2253.144 us/op
BenchmarkRangeIndex.createV2 LONG N/A 1000000
NORMAL(0,1) 42 ss 5 31451.596 ± 2165.520 us/op
BenchmarkRangeIndex.createV2 LONG N/A 1000000
NORMAL(10000000,1000) 42 ss 5 151057.040 ± 13465.482 us/op
BenchmarkRangeIndex.createV2 LONG N/A 1000000
EXP(0.0001) 42 ss 5 250432.339 ± 11397.610 us/op
BenchmarkRangeIndex.createV2 LONG N/A 1000000
EXP(0.5) 42 ss 5 37703.155 ± 1805.054 us/op
BenchmarkRangeIndex.createV2 LONG N/A 1000000
UNIFORM(0,100000000000) 42 ss 5 600135.713 ± 50377.187 us/op
BenchmarkRangeIndex.createV2 LONG N/A 1000000
UNIFORM(100000000000, 100000000100) 42 ss 5 67510.670 ±
20257.985 us/op
BenchmarkRangeIndex.createV2 LONG N/A 1000000
UNIFORM(0,100000000000) 42 ss 5 592899.314 ± 10187.439 us/op
BenchmarkRangeIndex.createV2 LONG N/A 1000000
UNIFORM(100000000000, 100000000100) 42 ss 5 66523.598 ±
19555.141 us/op
BenchmarkRangeIndex.createV2 FLOAT N/A 1000000
NORMAL(0,1) 42 ss 5 407109.354 ± 5819.103 us/op
BenchmarkRangeIndex.createV2 FLOAT N/A 1000000
NORMAL(10000000,1000) 42 ss 5 232501.197 ± 20092.900 us/op
BenchmarkRangeIndex.createV2 FLOAT N/A 1000000
EXP(0.0001) 42 ss 5 385567.492 ± 5394.826 us/op
BenchmarkRangeIndex.createV2 FLOAT N/A 1000000
EXP(0.5) 42 ss 5 454067.172 ± 5904.919 us/op
BenchmarkRangeIndex.createV2 FLOAT N/A 1000000
UNIFORM(0,100000000000) 42 ss 5 421185.434 ± 9261.012 us/op
BenchmarkRangeIndex.createV2 FLOAT N/A 1000000
UNIFORM(100000000000, 100000000100) 42 ss 5 76458.581 ±
3884.131 us/op
BenchmarkRangeIndex.createV2 FLOAT N/A 1000000
UNIFORM(0,100000000000) 42 ss 5 419558.409 ± 7258.182 us/op
BenchmarkRangeIndex.createV2 FLOAT N/A 1000000
UNIFORM(100000000000, 100000000100) 42 ss 5 76546.710 ±
1750.497 us/op
BenchmarkRangeIndex.createV2 DOUBLE N/A 1000000
NORMAL(0,1) 42 ss 5 972463.978 ± 26785.075 us/op
BenchmarkRangeIndex.createV2 DOUBLE N/A 1000000
NORMAL(10000000,1000) 42 ss 5 674071.565 ± 36243.218 us/op
BenchmarkRangeIndex.createV2 DOUBLE N/A 1000000
EXP(0.0001) 42 ss 5 861501.424 ± 4628.596 us/op
BenchmarkRangeIndex.createV2 DOUBLE N/A 1000000
EXP(0.5) 42 ss 5 915558.381 ± 16495.181 us/op
BenchmarkRangeIndex.createV2 DOUBLE N/A 1000000
UNIFORM(0,100000000000) 42 ss 5 871729.294 ± 10802.879 us/op
BenchmarkRangeIndex.createV2 DOUBLE N/A 1000000
UNIFORM(100000000000, 100000000100) 42 ss 5 458504.991 ±
7541.249 us/op
BenchmarkRangeIndex.createV2 DOUBLE N/A 1000000
UNIFORM(0,100000000000) 42 ss 5 860718.749 ± 24117.249 us/op
BenchmarkRangeIndex.createV2 DOUBLE N/A 1000000
UNIFORM(100000000000, 100000000100) 42 ss 5 466381.706 ±
56695.081 us/op
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]