All Products
Search
Document Center

PolarDB:pg_roaringbitmap

Last Updated:Jul 02, 2025

Roaring bitmaps adalah bitmap terkompresi yang lebih unggul dibandingkan dengan bitmap terkompresi tradisional seperti WAH, EWAH, dan Concise. Dalam beberapa skenario, Roaring bitmaps menawarkan performa kompresi yang sangat baik serta kecepatan pengindeksan hampir ratusan kali lebih cepat daripada bitmap terkompresi tradisional, bahkan melebihi kecepatan bitmap tanpa kompresi.

Buat ekstensi pg_roaringbitmap

CREATE EXTENSION if NOT EXISTS roaringbitmap;

Jalankan pernyataan berikut untuk melihat versi ekstensi:

SELECT extname,extversion FROM pg_extension WHERE extname = 'roaringbitmap';

Contoh hasil:

    extname    | extversion 
---------------+------------
 roaringbitmap | 0.5
(1 row)

Format input dan output

PolarDB hanya mendukung format input dan output array dan bytea.

  • Format Input

    • array:

      SELECT roaringbitmap('{1,100,10}');
                       roaringbitmap                  
      ------------------------------------------------
       \x3a30000001000000000002001000000001000a006400
      (1 row)
    • bytea:

      SELECT '\x3a30000001000000000002001000000001000a006400'::roaringbitmap;
                       roaringbitmap                  
      ------------------------------------------------
       \x3a30000001000000000002001000000001000a006400
      (1 row)
  • Format Output

    Catatan

    Format output default adalah bytea. Anda dapat menjalankan perintah roaringbitmap.output_format untuk mengubah format output.

    • array:

      SET roaringbitmap.output_format='array';
      SELECT '{1}'::roaringbitmap;
       roaringbitmap 
      ---------------
       {1}
      (1 row)
    • bytea

      SET roaringbitmap.output_format='bytea';
      SELECT '{1}'::roaringbitmap;
                   roaringbitmap              
      ----------------------------------------
       \x3a3000000100000000000000100000000100
      (1 row)

Buat tabel

CREATE TABLE t1 (id integer, bitmap roaringbitmap);

Buat bitmap dari array integer

INSERT INTO t1 SELECT 1,rb_build(ARRAY[1,2,3,4,5,6,7,8,9,200]);

INSERT INTO t1 SELECT 2,rb_build_agg(e) FROM generate_series(1,100) e;

Fungsi perhitungan bitmap

Fungsi perhitungan bitmap mencakup OR, AND, XOR, dan ANDNOT.

SELECT roaringbitmap('{1,2,3}') | roaringbitmap('{3,4,5}');
SELECT roaringbitmap('{1,2,3}') & roaringbitmap('{3,4,5}');
SELECT roaringbitmap('{1,2,3}') # roaringbitmap('{3,4,5}');
SELECT roaringbitmap('{1,2,3}') - roaringbitmap('{3,4,5}');

Fungsi agregat bitmap

Fungsi agregat bitmap mencakup OR, AND, XOR, dan BUILD.

SELECT rb_or_agg(bitmap) FROM t1;
SELECT rb_and_agg(bitmap) FROM t1;
SELECT rb_xor_agg(bitmap) FROM t1;
SELECT rb_build_agg(e) FROM generate_series(1,100) e;

Fungsi perhitungan kardinalitas bitmap

SELECT rb_cardinality('{1,2,3}');

Konversi bitmap menjadi array integer

SELECT rb_to_array(bitmap) FROM t1 WHERE id = 1;

Konversi bitmap menjadi himpunan bilangan bulat

SELECT unnest(rb_to_array('{1,2,3}'::roaringbitmap));

Atau

SELECT rb_iterate('{1,2,3}'::roaringbitmap);

Operasi

Operator

Input

Output

Deskripsi

Contoh

Hasil

&

roaringbitmap,roaringbitmap

roaringbitmap

Operator bitwise AND

roaringbitmap('{1,2,3}') & roaringbitmap('{3,4,5}')

{3}

|

roaringbitmap,roaringbitmap

roaringbitmap

Operator bitwise OR

roaringbitmap('{1,2,3}') | roaringbitmap('{3,4,5}')

{1,2,3,4,5}

|

roaringbitmap,integer

roaringbitmap

Menambahkan elemen ke roaring bitmap

roaringbitmap('{1,2,3}') | 6

{1,2,3,6}

|

integer,roaringbitmap

roaringbitmap

Menambahkan elemen ke roaring bitmap

6 | roaringbitmap('{1,2,3}')

{1,2,3,6}

#

roaringbitmap,roaringbitmap

roaringbitmap

Operator bitwise exclusive OR

roaringbitmap('{1,2,3}') # roaringbitmap('{3,4,5}')

{1,2,4,5}

<<

roaringbitmap,bigint

roaringbitmap

Geser bit ke kiri

roaringbitmap('{1,2,3}') << 2

{0,1}

>>

roaringbitmap,bigint

roaringbitmap

Geser bit ke kanan

roaringbitmap('{1,2,3}') >> 3

{4,5,6}

-

roaringbitmap,roaringbitmap

roaringbitmap

Operator offset

roaringbitmap('{1,2,3}') - roaringbitmap('{3,4,5}')

{1,2}

-

roaringbitmap,integer

roaringbitmap

Menghapus elemen dari roaring bitmap

roaringbitmap('{1,2,3}') - 3

{1,2}

@>

roaringbitmap,roaringbitmap

bool

Operator contains

roaringbitmap('{1,2,3}') @> roaringbitmap('{3,4,5}')

f

@>

roaringbitmap,integer

bool

Operator contains

roaringbitmap('{1,2,3,4,5}') @> 3

t

roaringbitmap,roaringbitmap

bool

Operator contains

roaringbitmap('{1,2,3}') @> 4

f

integer,roaringbitmap

bool

Operator contains

3 @> roaringbitmap('{1,2,3,4,5}')

t

&&

roaringbitmap,roaringbitmap

bool

Operator logika AND

roaringbitmap('{1,2,3}') && roaringbitmap('{3,4,5}')

t

=

roaringbitmap,roaringbitmap

bool

Operator kesetaraan

roaringbitmap('{1,2,3}') = roaringbitmap('{3,4,5}')

f

<>

roaringbitmap,roaringbitmap

bool

Operator tidak sama

roaringbitmap('{1,2,3}') <> roaringbitmap('{3,4,5}')

t

Fungsi fungsionalitas

Fungsi

Input

Output

Deskripsi

Contoh

Hasil

rb_build

integer[]

roaringbitmap

Buat roaring bitmap dari array integer

rb_build('{1,2,3,4,5}')

{1,2,3,4,5}

rb_index

roaringbitmap,integer

bigint

Kembalikan indeks berbasis 0 dari elemen dalam roaringbitmap ini, atau -1 jika tidak ada

rb_index('{1,2,3}',3)

2

rb_cardinality

roaringbitmap

bigint

Kembalikan kardinalitas dari roaringbitmap

rb_cardinality('{1,2,3,4,5}')

5

rb_and_cardinality

roaringbitmap,roaringbitmap

bigint

Kembalikan kardinalitas dari AND dua roaringbitmaps

rb_and_cardinality('{1,2,3}',rb_build('{3,4,5}'))

1

rb_or_cardinality

roaringbitmap,roaringbitmap

bigint

Kembalikan kardinalitas dari OR dua roaringbitmaps

rb_or_cardinality('{1,2,3}','{3,4,5}')

5

rb_xor_cardinality

roaringbitmap,roaringbitmap

bigint

Kembalikan kardinalitas dari XOR dua roaringbitmaps

rb_xor_cardinality('{1,2,3}','{3,4,5}')

4

rb_andnot_cardinality

roaringbitmap,roaringbitmap

bigint

Kembalikan kardinalitas dari ANDNOT dua roaringbitmaps

rb_andnot_cardinality('{1,2,3}','{3,4,5}')

2

rb_is_empty

roaringbitmap

boolean

Periksa apakah roaringbitmap kosong.

rb_is_empty('{1,2,3,4,5}')

f

rb_fill

roaringbitmap,range_start bigint,range_end bigint

roaringbitmap

Isi rentang yang ditentukan (tidak termasuk range_end)

rb_fill('{1,2,3}',5,7)

{1,2,3,5,6}

rb_clear

roaringbitmap,range_start bigint,range_end bigint

roaringbitmap

Hapus rentang yang ditentukan (tidak termasuk range_end)

rb_clear('{1,2,3}',2,3)

{1,3}

rb_flip

roaringbitmap,range_start bigint,range_end bigint

roaringbitmap

Negatifkan rentang yang ditentukan (tidak termasuk range_end)

rb_flip('{1,2,3}',2,10)

{1,4,5,6,7,8,9}

rb_range

roaringbitmap,range_start bigint,range_end bigint

roaringbitmap

Kembalikan set baru dengan rentang yang ditentukan (tidak termasuk range_end)

rb_range('{1,2,3}',2,3)

{2}

rb_range_cardinality

roaringbitmap,range_start bigint,range_end bigint

bigint

Kembalikan kardinalitas dari rentang yang ditentukan (tidak termasuk range_end)

rb_range_cardinality('{1,2,3}',2,3)

1

rb_min

roaringbitmap

integer

Kembalikan offset terkecil dalam roaringbitmap. Kembalikan NULL jika bitmap kosong

rb_min('{1,2,3}')

1

rb_max

roaringbitmap

integer

Kembalikan offset terbesar dalam roaringbitmap. Kembalikan NULL jika bitmap kosong

rb_max('{1,2,3}')

3

rb_rank

roaringbitmap,integer

bigint

Kembalikan jumlah elemen yang lebih kecil atau sama dengan offset yang ditentukan

rb_rank('{1,2,3}',3)

3

rb_jaccard_dist

roaringbitmap,roaringbitmap

double precision

Kembalikan jarak jaccard (atau koefisien kesamaan Jaccard) dari dua bitmap

rb_jaccard_dist('{1,2,3}','{3,4}')

0.25

rb_select

roaringbitmap,bitset_limit bigint,bitset_offset bigint=0,reverse boolean=false,range_start bigint=0,range_end bigint=4294967296

roaringbitmap

Kembalikan subset [bitset_offset,bitset_offset+bitset_limit) dari bitmap antara rentang [range_start,range_end)

rb_select('{1,2,3,4,5,6,7,8,9}',5,2)

{3,4,5,6,7}

rb_to_array

roaringbitmap

integer[]

Konversi roaringbitmap menjadi array integer

rb_to_array(roaringbitmap('{1,2,3}'))

{1,2,3}

rb_iterate

roaringbitmap

SET of integer

Kembalikan set integer dari data roaringbitmap.

SELECT rb_iterate (rb_build('{1,2,3}'))

123

Fungsi agregat

Fungsi

Input

Output

Deskripsi

Contoh

Hasil

rb_build_agg

integer

roaringbitmap

Buat roaringbitmap dari set integer

select rb_build_agg(id) from (values (1),(2),(3)) t(id)

{1,2,3}

rb_or_agg

roaringbitmap

roaringbitmap

Perhitungan agregat AND dari set roaringbitmap

select rb_or_agg(bitmap) from (values (roaringbitmap('{1,2,3}')), (roaringbitmap('{2,3,4}')) ) t(bitmap)

{1,2,3,4}

rb_and_agg

roaringbitmap

roaringbitmap

Perhitungan agregat AND dari set roaringbitmap

select rb_and_agg(bitmap) from (values (roaringbitmap('{1,2,3}')), (roaringbitmap('{2,3,4}')) ) t(bitmap)

{2,3}

rb_xor_agg

roaringbitmap

roaringbitmap

Perhitungan agregat XOR dari set roaringbitmap

select rb_xor_agg(bitmap) from (values (roaringbitmap('{1,2,3}')), (roaringbitmap('{2,3,4}')) ) t(bitmap)

{1,4}

rb_or_cardinality_agg

roaringbitmap

bigint

Perhitungan agregat OR dari set roaringbitmap, kembalikan kardinalitas.

select rb_or_cardinality_agg(bitmap) from (values (roaringbitmap('{1,2,3}')), (roaringbitmap('{2,3,4}')) ) t(bitmap)

4

rb_and_cardinality_agg

roaringbitmap

bigint

Perhitungan agregat AND dari set roaringbitmap, kembalikan kardinalitas

select rb_and_cardinality_agg(bitmap) from (values (roaringbitmap('{1,2,3}')), (roaringbitmap('{2,3,4}')) ) t(bitmap)

2

rb_xor_cardinality_agg

roaringbitmap

bigint

Perhitungan agregat XOR dari set roaringbitmap, kembalikan kardinalitas

select rb_xor_cardinality_agg(bitmap) from (values (roaringbitmap('{1,2,3}')), (roaringbitmap('{2,3,4}')) ) t(bitmap)

2