Skip to content

Performance optimization by deferred deserialization

Chen Huajun edited this page Oct 10, 2020 · 3 revisions

pg_roaringbitmap v0.5.2 optimized performance of some functions through deferred deserialization, that is, use new roaring_buffer_t instead of roaring_bitmap_t.

Refer to below for the effect of optimization

benchmark script

benchmark/benchmark.sql

v0.5.1 vs v0.5.2(PG12.3)

No test v0.5.1(ms) v0.5.2(ms)
1 rb_and_1 186.808 158.392
2 rb_and_2 205.653 64.741
3 rb_or_1 217.008 101.657
4 rb_or_2 155.667 65.872
5 rb_xor_1 266.933 111.47
6 rb_xor_2 437.087 236.536
7 rb_andnot_1 152.366 85.031
8 rb_andnot_2 177.482 50.528
9 rb_add 109.252 67.742
10 rb_contains_1 156.08 5.248
11 rb_contains_2 177.243 28.861
12 rb_contains_3 127.605 21.818
13 rb_intersect_1 10.558 3.474
14 rb_intersect_2 60.136 18.502
15 rb_equals_1 11.616 3.445
16 rb_equals_2 81.01 17.533
17 rb_andnot_1 163.378 88.159
18 rb_andnot_2 102.951 53.082
19 rb_index_1 93.413 18.91
20 rb_cardinality_1 89.545 27.521
21 rb_and_cardinality_1 151.704 86.746
22 rb_and_cardinality_2 96.901 33.94
23 rb_or_cardinality_1 107.328 83.086
24 rb_or_cardinality_2 43.405 48.706
25 rb_xor_cardinality_1 95.664 79.639
26 rb_xor_cardinality_2 83.32 38.438
27 rb_andnot_cardinality_1 89.864 78.376
28 rb_andnot_cardinality_2 96.584 54.209
29 rb_is_empty_1 75.312 22.18
30 rb_range_1 28.516 38.503
31 rb_range_cardinality_1 76.501 110.586
32 rb_min_1 38.235 20.497
33 rb_max_1 57.786 17.423
34 rb_rank_1 52.568 27.182
35 rb_jaccard_dist_1 111.118 74.05
36 rb_jaccard_dist_2 60.378 26.698
37 rb_to_array_1 88.361 140.412
38 rb_iterate_1 78.836 96.115
39 rb_build_agg_1 236.013 267.927
40 rb_or_agg_1 29.846 32.957
41 rb_and_agg_1 1.379 1.262
42 rb_xor_agg_1 28.762 34.628
43 rb_or_cardinality_agg_1 27.907 33.042
44 rb_and_cardinality_agg_1 1.341 1.37
45 rb_xor_cardinality_agg_1 33.459 31.767