全部产品
Search
文档中心

ApsaraDB RDS:Menggunakan ekstensi roaringbitmap

更新时间:Jul 06, 2025

Topik ini menjelaskan cara menggunakan ekstensi roaringbitmap yang disediakan oleh ApsaraDB RDS for PostgreSQL untuk meningkatkan kinerja query.

Prasyarat

Instansi RDS harus menjalankan PostgreSQL 12 atau versi yang lebih baru.

Catatan

Jika instansi RDS Anda menjalankan PostgreSQL 17, versi mesin minor dari instansi tersebut haruslah 20241030 atau yang lebih baru.

Informasi latar belakang

Dalam sebuah roaring bitmap, bilangan bulat 32-bit dibagi menjadi 216 chunk. Bilangan bulat dalam setiap chunk berbagi 16 bit paling signifikan yang sama. 16 bit paling tidak signifikan dari bilangan bulat disimpan dalam sebuah kontainer. Roaring bitmap menyimpan kontainer dalam array dinamis sebagai indeks utama. Dua jenis kontainer tersedia: kontainer array untuk chunk yang jarang dan kontainer bitmap untuk chunk yang padat. Kontainer array dapat menyimpan hingga 4.096 bilangan bulat. Kontainer bitmap dapat menyimpan lebih dari 4.096 bilangan bulat.

Roaring bitmap dapat menggunakan struktur penyimpanan ini untuk mengambil nilai tertentu dengan cepat. Selain itu, roaring bitmap menyediakan operasi bitwise seperti AND, OR, dan XOR antara dua jenis kontainer tersebut. Oleh karena itu, roaring bitmap dapat memberikan kinerja penyimpanan dan komputasi yang sangat baik.

Catatan penggunaan

Untuk memastikan stabilitas ekstensi, kami menyarankan Anda untuk memperbarui instansi RDS Anda ke versi mesin minor terbaru.

Catatan

Untuk informasi lebih lanjut tentang cara memperbarui versi mesin minor dari instansi RDS, lihat Perbarui Versi Mesin Minor.

Prosedur

  1. Buat ekstensi. Contoh:

    CREATE EXTENSION roaringbitmap;
  2. Buat tabel yang digunakan untuk menyimpan data roaringbitmap. Contoh:

    CREATE TABLE t1 (id integer, bitmap roaringbitmap);
  3. Panggil fungsi rb_build untuk menyisipkan data roaringbitmap. Contoh:

    -- Set nilai bit dari array menjadi 1.
    INSERT INTO t1 SELECT 1,RB_BUILD(ARRAY[1,2,3,4,5,6,7,8,9,200]);
    -- Set nilai bit dari beberapa elemen menjadi 1 dan agregasikan nilai bit ke dalam roaring bitmap.  
    INSERT INTO t1 SELECT 2,RB_BUILD_AGG(e) FROM GENERATE_SERIES(1,100) e;
  4. Lakukan operasi bitmap seperti OR, AND, XOR, dan ANDNOT. Contoh:

    SELECT RB_OR(a.bitmap,b.bitmap) FROM (SELECT bitmap FROM t1 WHERE id = 1) AS a,(SELECT bitmap FROM t1 WHERE id = 2) AS b;
  5. Lakukan operasi agregat bitmap seperti OR, AND, XOR, dan BUILD untuk menghasilkan roaring bitmap baru. Contoh:

    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;
  6. Hitung kardinalitas dari roaring bitmap. Kardinalitas adalah jumlah bit yang diatur menjadi 1 dalam roaring bitmap. Contoh:

    SELECT RB_CARDINALITY(bitmap) FROM t1;
  7. Dapatkan subskrip dari bit yang diatur menjadi 1. Contoh:

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

Fungsi perhitungan bitmap

Fungsi

Input

Output

Deskripsi

Contoh

rb_build

integer[]

roaringbitmap

Membuat roaring bitmap dari array integer.

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

rb_and

roaringbitmap,roaringbitmap

roaringbitmap

Melakukan operasi AND.

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

rb_or

roaringbitmap,roaringbitmap

roaringbitmap

Melakukan operasi OR.

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

rb_xor

roaringbitmap,roaringbitmap

roaringbitmap

Melakukan operasi XOR.

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

rb_andnot

roaringbitmap,roaringbitmap

roaringbitmap

Melakukan operasi ANDNOT.

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

rb_cardinality

roaringbitmap

integer

Menghitung kardinalitas.

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

rb_and_cardinality

roaringbitmap,roaringbitmap

integer

Menghitung kardinalitas dari operasi AND pada dua roaring bitmap.

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

rb_or_cardinality

roaringbitmap,roaringbitmap

integer

Menghitung kardinalitas dari operasi OR pada dua roaring bitmap.

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

rb_xor_cardinality

roaringbitmap,roaringbitmap

integer

Menghitung kardinalitas dari operasi XOR pada dua roaring bitmap.

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

rb_andnot_cardinality

roaringbitmap,roaringbitmap

integer

Menghitung kardinalitas dari operasi ANDNOT pada dua roaring bitmap.

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

rb_is_empty

roaringbitmap

boolean

Memeriksa apakah roaring bitmap kosong.

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

rb_equals

roaringbitmap,roaringbitmap

boolean

Memeriksa apakah dua roaring bitmap sama.

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

rb_intersect

roaringbitmap,roaringbitmap

boolean

Memeriksa apakah dua roaring bitmap berpotongan.

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

rb_remove

roaringbitmap,integer

roaringbitmap

Menghapus offset tertentu dari roaring bitmap.

rb_remove(rb_build('{1,2,3}'),3)

rb_flip

roaringbitmap,integer,integer

roaringbitmap

Membalik offset tertentu dalam roaring bitmap.

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

rb_minimum

roaringbitmap

integer

Mengembalikan offset terkecil dalam roaring bitmap. Jika roaring bitmap kosong, -1 dikembalikan.

rb_minimum(rb_build('{1,2,3}'))

rb_maximum

roaringbitmap

integer

Mengembalikan offset terbesar dalam roaring bitmap. Jika roaring bitmap kosong, 0 dikembalikan.

rb_maximum(rb_build('{1,2,3}'))

rb_rank

roaringbitmap,integer

integer

Mengembalikan jumlah elemen yang lebih kecil dari atau sama dengan offset tertentu dalam roaring bitmap.

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

rb_iterate

roaringbitmap

setof integer

Mengembalikan daftar offset dari roaring bitmap.

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

Fungsi agregat bitmap

Fungsi

Input

Output

Deskripsi

Contoh

rb_build_agg

integer

roaringbitmap

Membuat roaring bitmap dari sekelompok offset.

rb_build_agg(1)

rb_or_agg

roaringbitmap

roaringbitmap

Melakukan operasi agregat OR.

rb_or_agg(rb_build('{1,2,3}'))

rb_and_agg

roaringbitmap

roaringbitmap

Melakukan operasi agregat AND.

rb_and_agg(rb_build('{1,2,3}'))

rb_xor_agg

roaringbitmap

roaringbitmap

Melakukan operasi agregat XOR.

rb_xor_agg(rb_build('{1,2,3}'))

rb_or_cardinality_agg

roaringbitmap

integer

Menghitung kardinalitas dari operasi agregat OR pada dua roaring bitmap.

rb_or_cardinality_agg(rb_build('{1,2,3}'))

rb_and_cardinality_agg

roaringbitmap

integer

Menghitung kardinalitas dari operasi agregat AND pada dua roaring bitmap.

rb_and_cardinality_agg(rb_build('{1,2,3}'))

rb_xor_cardinality_agg

roaringbitmap

integer

Menghitung kardinalitas dari operasi agregat XOR pada dua roaring bitmap.

rb_xor_cardinality_agg(rb_build('{1,2,3}'))