Skip to content

refactor(xor): simplify construction and focus benchmark workloads - #325

Merged
tisonkun merged 2 commits into
apache:mainfrom
tisonkun:codex/xor-simplify
Nov 5, 2026
Merged

tisonkun merged 2 commits into
apache:mainfrom
tisonkun:codex/xor-simplify

Conversation

@tisonkun

@tisonkun tisonkun commented Nov 4, 2026 •

Copy link
Copy Markdown
Member

XOR construction repeats fingerprint allocation and assignment for each width, while the benchmark matrix emphasizes adjacent cardinalities and a specially selected retry input. Share fingerprint allocation with assignment, centralize the validated 32-bit range conversion, and remove the builder forwarding method used only to expose an attempt limit to tests.

Keep retry, order-independence, empty-filter, and compatibility coverage at their existing behavior boundaries while removing overlapping assertions and tests. Replace the matched-retry performance matrix with small, shard-sized, and large builds; retain independent-filter batches and imported-filter queries. Deduplicating comparisons now use repeated values and include the sorting and deduplication required by xorf's caller, so both sides perform equivalent work.

Validation: cargo x check, cargo x test (815 tests), cargo x lint (identical clean source copy), and cargo x bench -- --test (246 implementation/workload combinations). Optimized before/after spot checks show similar construction and query timings; this change does not claim a new broad speedup.

The complete benchmark results include ordinary bench and fat LTO, all raw samples, and the remaining slower cases.

@tisonkun

tisonkun commented Nov 4, 2026

Copy link
Copy Markdown
Member Author

Focused XOR benchmark results

This refactor keeps construction and query performance near the preceding revision; it does not claim a new broad speedup. The matrix now covers 45 scenarios / 93 implementation rows per profile, replacing the forced-retry and adjacent-cardinality cases with representative build sizes. Deduplicating comparisons include the same collect/sort/deduplicate work on both sides and use repeated values.

Counts below mean lower / equal / higher elapsed-time medians versus xorf. They are not statistical wins or an aggregate score.

Workload Ordinary bench Fat LTO, one codegen unit
Distinct builds 6 / 0 / 3 6 / 0 / 3
Deduplicating builds 9 / 0 / 0 9 / 0 / 0
Independent-filter batches 6 / 0 / 0 6 / 0 / 0
Single-filter queries 11 / 1 / 0 10 / 0 / 2
Imported-filter queries 12 / 0 / 0 7 / 0 / 5

The default-seed 16K distinct builds still need an extra attempt and remain slower. LTO also has seven query medians 1.0%–2.2% above xorf; six of those seven sample ranges overlap. Exact remaining gaps are listed below alongside all results. The changed build definitions establish a new baseline: improvements relative to xorf in the deduplicating rows must not be interpreted as before/after speedups caused by the refactor.

Both profiles use optimized Cargo bench builds with five repeats, fixed rounds, and setup/cleanup included. Apple M4 Max, macOS arm64, rustc 1.101.0-nightly (8006091eb, 2026-10-17), xorf 0.13.0. Measured production and benchmark code: 5cb4807; e200080 only simplifies a unit test. The ScopeDB end-to-end report separately measures real ingestion and query paths with ThinLTO.

Reproduction and before/after checks

cargo x bench -- xor --repeat 5 --raw

CARGO_PROFILE_BENCH_LTO=fat CARGO_PROFILE_BENCH_CODEGEN_UNITS=1 cargo x bench -- xor --repeat 5 --raw

Before/after checks used identical retained benchmark definitions on 541f87e and this change, with three repetitions. Independent-filter batch medians changed from 265/149/173 ms to 267/148/170 ms for 128/16K/50K inputs. Single-filter build changes ranged from -2.7% to +2.2%, and query changes from -4.1% to +2.5%. These small mixed differences do not establish a new general performance improvement.

Every remaining above-xorf median
Profile Scenario DS entry DS ms xorf ms More elapsed time Ranges overlap
Ordinary bench xor::build::8_distinct/16384 DataSketches 361 279 +29.4% no
Ordinary bench xor::build::16_distinct/16384 DataSketches 361 280 +28.9% no
Ordinary bench xor::build::32_distinct/16384 DataSketches 366 284 +28.9% no
Fat LTO, one codegen unit xor::build::8_distinct/16384 DataSketches 357 279 +28.0% no
Fat LTO, one codegen unit xor::build::16_distinct/16384 DataSketches 365 288 +26.7% no
Fat LTO, one codegen unit xor::build::32_distinct/16384 DataSketches 366 284 +28.9% no
Fat LTO, one codegen unit xor::query::16_present/50000 DataSketches 238 235 +1.3% no
Fat LTO, one codegen unit xor::query::16_absent/50000 DataSketches 239 235 +1.7% yes
Fat LTO, one codegen unit xor::query_shards::8_absent/16384 DataSketches 358 351 +2.0% yes
Fat LTO, one codegen unit xor::query_shards::16_present/128 DataSketches 289 286 +1.0% yes
Fat LTO, one codegen unit xor::query_shards::16_present/16384 DataSketches 362 358 +1.1% yes
Fat LTO, one codegen unit xor::query_shards::16_absent/16384 DataSketches 370 364 +1.6% yes
Fat LTO, one codegen unit xor::query_shards::32_absent/16384 DataSketches 370 362 +2.2% yes
All measurements and raw samples (ms)

Delta = (DataSketches median / xorf median − 1) × 100%; negative means less elapsed time. Each scenario keeps identical work and rounds across implementations.

Ordinary bench

Scenario Implementation Rounds Median Min–max Raw samples Delta vs xorf
xor::build::8_distinct/1000 DataSketches 60000 305 302–322 322, 303, 302, 305, 305 -33.4%
xor::build::8_distinct/1000 xorf 60000 458 453–459 458, 459, 453, 456, 458 reference
xor::build::8_deduplicate/1000 DataSketches 60000 356 355–359 355, 359, 357, 356, 356 -11.7%
xor::build::8_deduplicate/1000 xorf 60000 403 400–411 400, 411, 401, 403, 403 reference
xor::build::16_distinct/1000 DataSketches 60000 300 299–301 300, 301, 301, 300, 299 -35.5%
xor::build::16_distinct/1000 xorf 60000 465 461–466 461, 465, 466, 466, 464 reference
xor::build::16_deduplicate/1000 DataSketches 60000 354 352–359 359, 354, 353, 357, 352 -11.1%
xor::build::16_deduplicate/1000 xorf 60000 398 395–406 396, 398, 395, 400, 406 reference
xor::build::32_distinct/1000 DataSketches 60000 308 308–311 311, 308, 309, 308, 308 -34.6%
xor::build::32_distinct/1000 xorf 60000 471 470–474 473, 474, 470, 471, 470 reference
xor::build::32_deduplicate/1000 DataSketches 60000 356 354–361 359, 356, 361, 356, 354 -10.8%
xor::build::32_deduplicate/1000 xorf 60000 399 398–402 402, 399, 400, 398, 398 reference
xor::build::8_distinct/16384 DataSketches 2000 361 359–363 359, 361, 361, 363, 360 +29.4%
xor::build::8_distinct/16384 xorf 2000 279 276–292 292, 276, 279, 277, 280 reference
xor::build::8_deduplicate/16384 DataSketches 2000 249 248–250 248, 248, 249, 250, 250 -8.8%
xor::build::8_deduplicate/16384 xorf 2000 273 271–274 273, 271, 274, 273, 273 reference
xor::build::16_distinct/16384 DataSketches 2000 361 359–364 359, 361, 362, 361, 364 +28.9%
xor::build::16_distinct/16384 xorf 2000 280 275–285 285, 277, 281, 275, 280 reference
xor::build::16_deduplicate/16384 DataSketches 2000 249 245–254 245, 254, 248, 249, 249 -7.8%
xor::build::16_deduplicate/16384 xorf 2000 270 269–270 270, 270, 269, 270, 270 reference
xor::build::32_distinct/16384 DataSketches 2000 366 364–377 364, 374, 366, 377, 365 +28.9%
xor::build::32_distinct/16384 xorf 2000 284 280–288 288, 283, 284, 280, 284 reference
xor::build::32_deduplicate/16384 DataSketches 2000 250 248–261 250, 261, 250, 248, 251 -7.7%
xor::build::32_deduplicate/16384 xorf 2000 271 270–273 270, 271, 272, 273, 271 reference
xor::build::8_distinct/1000000 DataSketches 12 159 154–161 161, 159, 159, 154, 154 -41.3%
xor::build::8_distinct/1000000 xorf 12 271 269–280 280, 273, 271, 269, 270 reference
xor::build::8_deduplicate/1000000 DataSketches 12 152 151–154 154, 151, 152, 152, 153 -13.6%
xor::build::8_deduplicate/1000000 xorf 12 176 174–180 174, 179, 175, 180, 176 reference
xor::build::16_distinct/1000000 DataSketches 12 158 156–163 163, 160, 158, 156, 156 -42.5%
xor::build::16_distinct/1000000 xorf 12 275 272–280 280, 275, 278, 274, 272 reference
xor::build::16_deduplicate/1000000 DataSketches 12 153 151–153 153, 152, 151, 153, 153 -12.1%
xor::build::16_deduplicate/1000000 xorf 12 174 173–175 174, 173, 173, 175, 174 reference
xor::build::32_distinct/1000000 DataSketches 12 159 157–163 163, 160, 159, 157, 157 -41.5%
xor::build::32_distinct/1000000 xorf 12 272 270–282 282, 272, 279, 271, 270 reference
xor::build::32_deduplicate/1000000 DataSketches 12 154 151–154 154, 151, 153, 154, 154 -11.5%
xor::build::32_deduplicate/1000000 xorf 12 174 173–180 173, 174, 173, 176, 180 reference
xor::build_batches::8/128 default_seed 10000 263 262–272 272, 262, 263, 262, 263 -34.9%
xor::build_batches::8/128 matched_seed 10000 272 270–274 274, 272, 271, 270, 273 -32.7%
xor::build_batches::8/128 xorf 10000 404 403–406 405, 403, 406, 404, 404 reference
xor::build_batches::8/16384 default_seed 40 151 151–153 152, 151, 153, 151, 151 -58.1%
xor::build_batches::8/16384 matched_seed 40 142 140–145 145, 142, 142, 140, 141 -60.6%
xor::build_batches::8/16384 xorf 40 360 359–361 360, 360, 361, 359, 361 reference
xor::build_batches::8/50000 default_seed 12 172 171–172 172, 172, 171, 172, 171 -48.3%
xor::build_batches::8/50000 matched_seed 12 167 167–170 167, 167, 167, 170, 167 -49.8%
xor::build_batches::8/50000 xorf 12 333 332–340 333, 340, 333, 335, 332 reference
xor::query::8_present/16384 DataSketches 10000 275 272–280 275, 273, 272, 280, 276 -3.2%
xor::query::8_present/16384 xorf 10000 284 282–286 282, 283, 285, 284, 286 reference
xor::query::8_present/50000 DataSketches 3000 247 245–248 247, 246, 245, 248, 247 -3.9%
xor::query::8_present/50000 xorf 3000 257 257–257 257, 257, 257, 257, 257 reference
xor::query::8_absent/16384 DataSketches 10000 267 265–269 267, 267, 269, 267, 265 -7.0%
xor::query::8_absent/16384 xorf 10000 287 283–290 286, 290, 287, 287, 283 reference
xor::query::8_absent/50000 DataSketches 3000 243 242–244 244, 242, 244, 243, 242 -5.4%
xor::query::8_absent/50000 xorf 3000 257 255–260 258, 255, 260, 257, 257 reference
xor::query::16_present/16384 DataSketches 10000 277 276–278 278, 276, 276, 277, 277 -2.1%
xor::query::16_present/16384 xorf 10000 283 282–288 283, 284, 282, 282, 288 reference
xor::query::16_present/50000 DataSketches 3000 267 267–270 267, 270, 267, 267, 267 0.0%
xor::query::16_present/50000 xorf 3000 267 267–269 267, 267, 268, 267, 269 reference
xor::query::16_absent/16384 DataSketches 10000 273 271–275 271, 274, 275, 273, 273 -3.9%
xor::query::16_absent/16384 xorf 10000 284 283–290 284, 285, 290, 283, 284 reference
xor::query::16_absent/50000 DataSketches 3000 266 265–266 265, 266, 266, 266, 265 -1.5%
xor::query::16_absent/50000 xorf 3000 270 269–274 269, 272, 270, 270, 274 reference
xor::query::32_present/16384 DataSketches 10000 268 265–276 268, 276, 275, 268, 265 -5.6%
xor::query::32_present/16384 xorf 10000 284 283–290 285, 284, 283, 290, 284 reference
xor::query::32_present/50000 DataSketches 3000 280 279–281 280, 279, 279, 281, 281 -8.5%
xor::query::32_present/50000 xorf 3000 306 304–313 306, 306, 306, 313, 304 reference
xor::query::32_absent/16384 DataSketches 10000 273 267–275 267, 269, 275, 273, 273 -8.4%
xor::query::32_absent/16384 xorf 10000 298 287–305 287, 298, 292, 305, 298 reference
xor::query::32_absent/50000 DataSketches 3000 286 285–297 297, 286, 291, 285, 285 -6.2%
xor::query::32_absent/50000 xorf 3000 305 304–322 322, 305, 305, 304, 305 reference
xor::query_shards::8_present/128 DataSketches 20000 277 276–281 277, 277, 276, 278, 281 -14.2%
xor::query_shards::8_present/128 xorf 20000 323 322–327 327, 323, 322, 323, 325 reference
xor::query_shards::8_absent/128 DataSketches 20000 278 276–283 278, 278, 276, 277, 283 -14.7%
xor::query_shards::8_absent/128 xorf 20000 326 324–333 324, 333, 326, 326, 328 reference
xor::query_shards::8_present/16384 DataSketches 20000 354 349–355 355, 350, 354, 355, 349 -15.7%
xor::query_shards::8_present/16384 xorf 20000 420 416–423 418, 421, 420, 423, 416 reference
xor::query_shards::8_absent/16384 DataSketches 20000 348 347–355 352, 347, 355, 348, 348 -17.5%
xor::query_shards::8_absent/16384 xorf 20000 422 413–425 421, 413, 422, 425, 422 reference
xor::query_shards::16_present/128 DataSketches 20000 286 283–287 286, 283, 286, 285, 287 -12.8%
xor::query_shards::16_present/128 xorf 20000 328 326–328 326, 326, 328, 328, 328 reference
xor::query_shards::16_absent/128 DataSketches 20000 285 283–293 285, 293, 284, 283, 285 -12.6%
xor::query_shards::16_absent/128 xorf 20000 326 325–327 326, 326, 325, 326, 327 reference
xor::query_shards::16_present/16384 DataSketches 20000 364 358–367 364, 358, 363, 367, 364 -13.9%
xor::query_shards::16_present/16384 xorf 20000 423 422–428 423, 428, 423, 424, 422 reference
xor::query_shards::16_absent/16384 DataSketches 20000 363 361–365 363, 361, 365, 363, 364 -15.2%
xor::query_shards::16_absent/16384 xorf 20000 428 426–433 433, 432, 428, 426, 426 reference
xor::query_shards::32_present/128 DataSketches 20000 277 275–279 279, 276, 275, 278, 277 -23.9%
xor::query_shards::32_present/128 xorf 20000 364 363–365 364, 364, 365, 363, 363 reference
xor::query_shards::32_absent/128 DataSketches 20000 278 276–291 276, 277, 279, 291, 278 -23.2%
xor::query_shards::32_absent/128 xorf 20000 362 356–364 362, 364, 356, 359, 362 reference
xor::query_shards::32_present/16384 DataSketches 20000 372 368–373 368, 373, 369, 372, 372 -16.2%
xor::query_shards::32_present/16384 xorf 20000 444 441–446 446, 444, 446, 441, 442 reference
xor::query_shards::32_absent/16384 DataSketches 20000 367 360–375 375, 360, 367, 368, 366 -17.3%
xor::query_shards::32_absent/16384 xorf 20000 444 442–450 450, 443, 448, 442, 444 reference

Fat LTO, one codegen unit

Scenario Implementation Rounds Median Min–max Raw samples Delta vs xorf
xor::build::8_distinct/1000 DataSketches 60000 315 315–334 334, 319, 315, 315, 315 -32.7%
xor::build::8_distinct/1000 xorf 60000 468 468–488 468, 488, 470, 468, 468 reference
xor::build::8_deduplicate/1000 DataSketches 60000 365 365–371 365, 371, 365, 365, 367 -10.3%
xor::build::8_deduplicate/1000 xorf 60000 407 407–411 407, 408, 411, 407, 407 reference
xor::build::16_distinct/1000 DataSketches 60000 318 314–382 318, 382, 318, 316, 314 -32.2%
xor::build::16_distinct/1000 xorf 60000 469 466–479 468, 477, 479, 469, 466 reference
xor::build::16_deduplicate/1000 DataSketches 60000 360 356–366 365, 366, 360, 358, 356 -10.9%
xor::build::16_deduplicate/1000 xorf 60000 404 401–410 410, 404, 405, 401, 401 reference
xor::build::32_distinct/1000 DataSketches 60000 304 303–306 303, 306, 304, 304, 303 -33.9%
xor::build::32_distinct/1000 xorf 60000 460 457–470 470, 464, 459, 457, 460 reference
xor::build::32_deduplicate/1000 DataSketches 60000 360 357–364 361, 360, 357, 364, 358 -11.1%
xor::build::32_deduplicate/1000 xorf 60000 405 401–407 405, 407, 406, 403, 401 reference
xor::build::8_distinct/16384 DataSketches 2000 357 354–361 355, 361, 360, 357, 354 +28.0%
xor::build::8_distinct/16384 xorf 2000 279 278–285 279, 278, 285, 278, 280 reference
xor::build::8_deduplicate/16384 DataSketches 2000 253 251–258 255, 252, 251, 258, 253 -9.0%
xor::build::8_deduplicate/16384 xorf 2000 278 277–303 278, 277, 281, 303, 278 reference
xor::build::16_distinct/16384 DataSketches 2000 365 363–368 365, 364, 363, 368, 368 +26.7%
xor::build::16_distinct/16384 xorf 2000 288 286–292 292, 288, 288, 286, 290 reference
xor::build::16_deduplicate/16384 DataSketches 2000 253 250–254 253, 254, 251, 250, 254 -8.7%
xor::build::16_deduplicate/16384 xorf 2000 277 274–281 276, 281, 277, 274, 278 reference
xor::build::32_distinct/16384 DataSketches 2000 366 362–374 362, 370, 374, 366, 366 +28.9%
xor::build::32_distinct/16384 xorf 2000 284 282–290 284, 288, 290, 284, 282 reference
xor::build::32_deduplicate/16384 DataSketches 2000 253 248–259 259, 248, 250, 253, 254 -8.7%
xor::build::32_deduplicate/16384 xorf 2000 277 275–278 278, 275, 275, 277, 277 reference
xor::build::8_distinct/1000000 DataSketches 12 154 153–158 158, 153, 154, 155, 153 -42.3%
xor::build::8_distinct/1000000 xorf 12 267 255–278 278, 263, 255, 270, 267 reference
xor::build::8_deduplicate/1000000 DataSketches 12 152 150–152 150, 152, 151, 152, 152 -12.6%
xor::build::8_deduplicate/1000000 xorf 12 174 172–176 172, 176, 174, 174, 174 reference
xor::build::16_distinct/1000000 DataSketches 12 160 152–167 160, 153, 152, 163, 167 -39.8%
xor::build::16_distinct/1000000 xorf 12 266 260–277 273, 260, 260, 266, 277 reference
xor::build::16_deduplicate/1000000 DataSketches 12 153 151–154 153, 151, 152, 154, 153 -12.6%
xor::build::16_deduplicate/1000000 xorf 12 175 174–176 174, 174, 175, 176, 176 reference
xor::build::32_distinct/1000000 DataSketches 12 157 155–161 160, 155, 155, 161, 157 -42.3%
xor::build::32_distinct/1000000 xorf 12 272 265–289 284, 272, 265, 272, 289 reference
xor::build::32_deduplicate/1000000 DataSketches 12 153 152–154 153, 152, 153, 154, 154 -13.1%
xor::build::32_deduplicate/1000000 xorf 12 176 175–177 175, 175, 176, 176, 177 reference
xor::build_batches::8/128 default_seed 10000 271 269–273 271, 273, 273, 271, 269 -32.8%
xor::build_batches::8/128 matched_seed 10000 267 267–273 273, 267, 271, 267, 267 -33.7%
xor::build_batches::8/128 xorf 10000 403 401–413 403, 403, 410, 401, 413 reference
xor::build_batches::8/16384 default_seed 40 152 148–152 150, 152, 152, 152, 148 -57.7%
xor::build_batches::8/16384 matched_seed 40 141 138–143 138, 140, 142, 143, 141 -60.7%
xor::build_batches::8/16384 xorf 40 359 357–362 357, 357, 362, 361, 359 reference
xor::build_batches::8/50000 default_seed 12 173 171–174 171, 171, 173, 173, 174 -47.9%
xor::build_batches::8/50000 matched_seed 12 169 168–173 170, 169, 169, 168, 173 -49.1%
xor::build_batches::8/50000 xorf 12 332 329–336 332, 329, 336, 332, 331 reference
xor::query::8_present/16384 DataSketches 10000 248 247–252 248, 247, 248, 252, 249 -1.2%
xor::query::8_present/16384 xorf 10000 251 250–254 251, 252, 250, 251, 254 reference
xor::query::8_present/50000 DataSketches 3000 224 220–225 224, 224, 225, 220, 220 -3.0%
xor::query::8_present/50000 xorf 3000 231 226–236 236, 236, 229, 226, 231 reference
xor::query::8_absent/16384 DataSketches 10000 248 244–248 248, 244, 248, 247, 248 -1.2%
xor::query::8_absent/16384 xorf 10000 251 249–253 251, 251, 253, 249, 252 reference
xor::query::8_absent/50000 DataSketches 3000 221 221–226 226, 221, 221, 223, 221 -3.1%
xor::query::8_absent/50000 xorf 3000 228 224–233 233, 226, 229, 228, 224 reference
xor::query::16_present/16384 DataSketches 10000 251 249–253 250, 251, 252, 253, 249 -2.0%
xor::query::16_present/16384 xorf 10000 256 252–257 256, 257, 256, 257, 252 reference
xor::query::16_present/50000 DataSketches 3000 238 236–241 236, 238, 240, 241, 238 +1.3%
xor::query::16_present/50000 xorf 3000 235 234–235 235, 235, 234, 235, 234 reference
xor::query::16_absent/16384 DataSketches 10000 252 250–256 256, 251, 250, 252, 253 -1.2%
xor::query::16_absent/16384 xorf 10000 255 254–285 259, 285, 254, 254, 255 reference
xor::query::16_absent/50000 DataSketches 3000 239 237–241 237, 241, 239, 239, 240 +1.7%
xor::query::16_absent/50000 xorf 3000 235 230–241 231, 241, 236, 235, 230 reference
xor::query::32_present/16384 DataSketches 10000 244 243–246 244, 246, 245, 243, 244 -3.2%
xor::query::32_present/16384 xorf 10000 252 251–255 251, 252, 253, 251, 255 reference
xor::query::32_present/50000 DataSketches 3000 254 248–258 254, 256, 258, 248, 249 -3.8%
xor::query::32_present/50000 xorf 3000 264 262–270 264, 262, 270, 265, 263 reference
xor::query::32_absent/16384 DataSketches 10000 242 241–243 241, 242, 243, 242, 243 -6.6%
xor::query::32_absent/16384 xorf 10000 259 256–261 259, 256, 257, 259, 261 reference
xor::query::32_absent/50000 DataSketches 3000 248 247–253 253, 247, 252, 248, 248 -5.3%
xor::query::32_absent/50000 xorf 3000 262 259–268 261, 259, 262, 268, 265 reference
xor::query_shards::8_present/128 DataSketches 20000 277 274–279 276, 278, 279, 274, 277 -1.4%
xor::query_shards::8_present/128 xorf 20000 281 280–282 282, 281, 281, 280, 280 reference
xor::query_shards::8_absent/128 DataSketches 20000 277 273–279 273, 277, 274, 279, 277 -0.7%
xor::query_shards::8_absent/128 xorf 20000 279 277–286 277, 279, 278, 286, 283 reference
xor::query_shards::8_present/16384 DataSketches 20000 341 341–345 341, 341, 341, 345, 345 -1.2%
xor::query_shards::8_present/16384 xorf 20000 345 340–347 340, 345, 344, 346, 347 reference
xor::query_shards::8_absent/16384 DataSketches 20000 358 352–358 358, 355, 358, 358, 352 +2.0%
xor::query_shards::8_absent/16384 xorf 20000 351 349–355 355, 350, 349, 351, 351 reference
xor::query_shards::16_present/128 DataSketches 20000 289 283–295 295, 293, 288, 289, 283 +1.0%
xor::query_shards::16_present/128 xorf 20000 286 284–297 287, 297, 286, 284, 284 reference
xor::query_shards::16_absent/128 DataSketches 20000 284 282–294 284, 282, 294, 283, 285 -0.7%
xor::query_shards::16_absent/128 xorf 20000 286 281–289 284, 281, 289, 286, 287 reference
xor::query_shards::16_present/16384 DataSketches 20000 362 359–365 362, 365, 359, 364, 360 +1.1%
xor::query_shards::16_present/16384 xorf 20000 358 354–359 358, 358, 354, 359, 357 reference
xor::query_shards::16_absent/16384 DataSketches 20000 370 368–375 368, 368, 370, 375, 370 +1.6%
xor::query_shards::16_absent/16384 xorf 20000 364 360–372 372, 363, 360, 364, 367 reference
xor::query_shards::32_present/128 DataSketches 20000 277 277–278 278, 277, 277, 277, 277 -2.5%
xor::query_shards::32_present/128 xorf 20000 284 281–299 284, 299, 282, 281, 284 reference
xor::query_shards::32_absent/128 DataSketches 20000 276 275–279 279, 276, 278, 275, 275 -2.5%
xor::query_shards::32_absent/128 xorf 20000 283 281–290 283, 290, 283, 281, 282 reference
xor::query_shards::32_present/16384 DataSketches 20000 364 359–368 364, 368, 364, 363, 359 -0.5%
xor::query_shards::32_present/16384 xorf 20000 366 359–371 367, 371, 363, 366, 359 reference
xor::query_shards::32_absent/16384 DataSketches 20000 370 364–380 364, 368, 372, 380, 370 +2.2%
xor::query_shards::32_absent/16384 xorf 20000 362 361–367 367, 362, 367, 362, 361 reference

@tisonkun
tisonkun merged commit 114c4c5 into apache:main Nov 5, 2026
10 checks passed
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.

1 participant