全部产品
Search
文档中心

AnalyticDB:roaringbitmap

更新时间:Jun 26, 2025

Bitmap mengaum adalah struktur data yang efisien. Dibandingkan dengan bitmap konvensional, bitmap mengaum menawarkan kinerja pemrosesan lebih tinggi dan penggunaan memori lebih rendah. Bitmap mengaum cocok untuk skenario komputasi seperti operasi irisan, gabungan, himpunan perbedaan, serta deduplikasi. Pada umumnya, bitmap mengaum digunakan dalam profil pengguna, rekomendasi personalisasi, dan pemasaran presisi.

Informasi latar belakang

Bitmap adalah struktur data umum yang terdiri dari nilai 0 dan 1. Bitmap terpisah dibuat untuk menampung semua nilai yang mungkin untuk setiap kolom. Setiap bit menunjukkan apakah baris data memiliki nilai di kolom yang sesuai. Bitmap konvensional menggunakan sejumlah besar sumber daya memori. Oleh karena itu, disarankan untuk menggunakan bitmap terkompresi. Bitmap mengaum adalah bitmap terkompresi yang efisien, digunakan dalam hampir semua bahasa pemrograman populer di berbagai platform data besar.

Pengenalan

Dalam bitmap mengaum, setiap bilangan bulat 32-bit terdiri dari 16 bit signifikan tertinggi dan 16 bit signifikan terendah. 16 bit signifikan tertinggi disimpan dalam beberapa chunk, sedangkan 16 bit signifikan terendah disimpan dalam wadah. Setiap chunk dapat menyimpan hingga 2^16 bilangan bulat. Bitmap mengaum menyimpan wadah dalam larik dinamis dan mengurutkan wadah berdasarkan 16 bit signifikan tertinggi. Anda dapat menggunakan 16 bit signifikan tertinggi dan metode pencarian biner untuk mencari wadah dengan cepat. Jenis wadah berikut digunakan untuk menyimpan data berdasarkan karakteristiknya:

  • Wadah array: Menyimpan data tersebar dan tidak berurutan. Wadah array dapat menampung kurang dari 4.096 bilangan bulat.

  • Wadah bitmap: Menyimpan sejumlah besar bilangan bulat berurutan. Wadah bitmap dapat menampung 4.096 atau lebih bilangan bulat.

  • Wadah run: Menyimpan sejumlah besar nilai bertambah berurutan. Wadah run hanya dapat digunakan jika ukurannya lebih kecil daripada ukuran wadah array dan wadah bitmap.

Bitmap mengaum menggunakan struktur penyimpanan ini untuk meningkatkan rasio kompresi data secara signifikan dan mempercepat pengambilan nilai tertentu. Bitmap mengaum mendukung operasi bitmap seperti AND, OR, dan XOR antara tiga jenis wadah, sehingga memberikan kinerja penyimpanan dan komputasi yang sangat baik.

Untuk informasi lebih lanjut tentang bitmap mengaum, kunjungi GitHub.

Catatan penggunaan

Hanya instance AnalyticDB for PostgreSQL versi V6.3.8.9 atau lebih baru yang mendukung bitmap mengaum. Untuk informasi tentang cara melihat versi minor dari instance AnalyticDB for PostgreSQL, lihat Lihat Versi Minor dari Instance.

Gunakan bitmap mengaum

Instal ekstensi

Sebelum menggunakan bitmap mengaum dalam instance AnalyticDB for PostgreSQL, instal ekstensi roaringbitmap pada halaman Ekstensi dari instance. Untuk informasi lebih lanjut, lihat Instal, Perbarui, dan Hapus Ekstensi.

Buat tabel

Buat tabel untuk menyimpan data bitmap mengaum.

CREATE TABLE t1 (id integer, bitmap roaringbitmap);

Sisipkan data

Gunakan fungsi rb_build untuk menyisipkan data bitmap mengaum.

-- Atur nilai bit di posisi tertentu dalam array menjadi 1.
INSERT INTO t1 SELECT 1,RB_BUILD(ARRAY[1,2,3,4,5,6,7,8,9,200]);
-- Atur nilai bit dari beberapa elemen menjadi 1 dan agregasikan nilai bit ke dalam bitmap mengaum.
INSERT INTO t1 SELECT 2,RB_BUILD_AGG(e) FROM GENERATE_SERIES(1,100) e;

Kueri data

Dapatkan subskrip dari bit yang diatur menjadi 1.

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

Contoh operasi bitmap:

  • Lakukan operasi bitmap seperti OR, AND, XOR, dan ANDNOT.

    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;
  • Lakukan operasi agregat bitmap seperti OR, AND, XOR, dan BUILD untuk menghasilkan bitmap mengaum baru.

    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;
  • Hitung kardinalitas dari bitmap mengaum. Kardinalitas adalah jumlah bit yang diatur menjadi 1 dalam bitmap mengaum.

    SELECT RB_CARDINALITY(bitmap) FROM t1;

Fungsi perhitungan bitmap

Fungsi

Masukan

Keluaran

Deskripsi

Contoh

rb_build

integer[]

roaringbitmap

Membuat bitmap mengaum dari array integer.

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

rb_and

roaringbitmap,roaringbitmap

roaringbitmap

Menjalankan operasi AND.

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

rb_or

roaringbitmap,roaringbitmap

roaringbitmap

Menjalankan operasi OR.

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

rb_xor

roaringbitmap,roaringbitmap

roaringbitmap

Menjalankan operasi XOR.

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

rb_andnot

roaringbitmap,roaringbitmap

roaringbitmap

Menjalankan 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 dengan menjalankan operasi AND pada dua bitmap mengaum.

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

rb_or_cardinality

roaringbitmap,roaringbitmap

integer

Menghitung kardinalitas dengan menjalankan operasi OR pada dua bitmap mengaum.

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

rb_xor_cardinality

roaringbitmap,roaringbitmap

integer

Menghitung kardinalitas dengan menjalankan operasi XOR pada dua bitmap mengaum.

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

rb_andnot_cardinality

roaringbitmap,roaringbitmap

integer

Menghitung kardinalitas dengan menjalankan operasi ANDNOT pada dua bitmap mengaum.

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

rb_is_empty

roaringbitmap

boolean

Memeriksa apakah bitmap mengaum kosong.

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

rb_equals

roaringbitmap,roaringbitmap

boolean

Memeriksa apakah dua bitmap mengaum sama.

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

rb_intersect

roaringbitmap,roaringbitmap

boolean

Memeriksa apakah dua bitmap mengaum berpotongan.

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

rb_remove

roaringbitmap,integer

roaringbitmap

Menghapus offset tertentu dari bitmap mengaum.

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

rb_flip

roaringbitmap,integer

roraingbitmap

Membalik offset tertentu dalam bitmap mengaum.

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

rb_flip

roaringbitmap,integer,integer

roaringbitmap

Membalik rentang offset tertentu dalam bitmap mengaum.

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

rb_minimum

roaringbitmap

integer

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

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

rb_maximum

roaringbitmap

integer

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

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

rb_rank

roaringbitmap,integer

integer

Mengembalikan jumlah elemen yang kurang dari atau sama dengan offset tertentu dalam bitmap mengaum.

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

rb_iterate

roaringbitmap

setof integer

Mengembalikan daftar offset dari bitmap mengaum.

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

rb_contains

roaringbitmap, integer

bool

Memeriksa apakah bitmap mengaum berisi offset tertentu.

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

rb_contains

roaringbitmap,integer,integer

bool

Memeriksa apakah bitmap mengaum berisi rentang offset tertentu.

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

rb_contains

roaringbitmap, roaringbitmap

bool

Memeriksa apakah bitmap mengaum berisi bitmap mengaum lainnya.

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

rb_becontained

integer, roaringbitmap

bool

Memeriksa apakah offset tertentu terkandung oleh bitmap mengaum.

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

rb_becontained

roaringbitmap,roaringbitmap

bool

Memeriksa apakah bitmap mengaum terkandung oleh bitmap mengaum lainnya.

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

rb_add

roaringbitmap, integer

roaringbitmap

Menambahkan offset tertentu ke bitmap mengaum.

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

rb_add_2

integer, roaringbitmap

roaringbitmap

Menambahkan offset tertentu ke bitmap mengaum.

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

rb_add

roaringbitmap,integer, integer

roaringbitmap

Menambahkan rentang offset tertentu ke bitmap mengaum.

rb_add(rb_build('{1,2,3,4}'), 6,8)

rb_remove

roaringbitmap,integer, integer

roaringbitmap

Menghapus offset tertentu dari bitmap mengaum.

rb_remove(rb_build('{1,2,3,4,6,7,8}'), 6,8)

rb_jaccard_index

roaringbitmap,roaringbitmap

float8

Menghitung koefisien kesamaan Jaccard antara dua bitmap mengaum.

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

rb_to_array

roaringbitmap

integer[]

Mengonversi bitmap mengaum menjadi array.

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

rb_iterate_decrement

roaringbitmap

integer[]

Mengembalikan daftar offset dari bitmap mengaum dalam urutan menurun.

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

Fungsi agregat bitmap

Fungsi

Masukan

Keluaran

Deskripsi

Contoh

rb_build_agg

integer

roaringbitmap

Membuat bitmap mengaum dari sekelompok offset.

rb_build_agg(1)

rb_or_agg

roaringbitmap

roaringbitmap

Menjalankan operasi agregat OR.

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

rb_and_agg

roaringbitmap

roaringbitmap

Menjalankan operasi agregat AND.

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

rb_xor_agg

roaringbitmap

roaringbitmap

Menjalankan operasi agregat XOR.

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

rb_or_cardinality_agg

roaringbitmap

integer

Menghitung kardinalitas dengan menjalankan operasi agregat OR pada dua bitmap mengaum.

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

rb_and_cardinality_agg

roaringbitmap

integer

Menghitung kardinalitas dengan menjalankan operasi agregat AND pada dua bitmap mengaum.

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

rb_xor_cardinality_agg

roaringbitmap

integer

Menghitung kardinalitas dengan menjalankan operasi agregat XOR pada dua bitmap mengaum.

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

Operator

Operator

Kiri

Kanan

Keluaran

Deskripsi

Contoh

&

roaringbitmap

roaringbitmap

roaringbitmap

Menjalankan operasi AND pada dua bitmap mengaum.

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

|

roaringbitmap

roaringbitmap

roaringbitmap

Menjalankan operasi OR pada dua bitmap mengaum.

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

#

roaringbitmap

roaringbitmap

roaringbitmap

Menjalankan operasi XOR pada dua bitmap mengaum.

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

~

roaringbitmap

roaringbitmap

roaringbitmap

Menjalankan operasi ANDNOT pada dua bitmap mengaum.

rb_build('{2,3}') ~ rb_build('{2,4}')

+

roraingbitmap

integer

roaringbitmap

Menambahkan offset tertentu ke bitmap mengaum.

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

-

roraingbitmap

integer

roaringbitmap

Menghapus offset tertentu dari bitmap mengaum.

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

=

roaringbitmap

roaringbitmap

boolean

Memeriksa apakah dua bitmap mengaum sama.

rb_build('{2,3}') = rb_build('{2,3}')

<>

roaringbitmap

roaringbitmap

boolean

Memeriksa apakah dua bitmap mengaum berbeda.

rb_build('{2,3}') <> rb_build('{1,2,3}')

&&

roaringbitmap

roaringbitmap

boolean

Memeriksa apakah dua bitmap mengaum berpotongan.

rb_build('{2,3}') && rb_build('{3,4}')

@>

roaringbitmap

roaringbitmap

boolean

Memeriksa apakah bitmap mengaum berisi bitmap mengaum lainnya.

rb_build('{2,3}') @> rb_build('{2}')

@>

roaringbitmap

integer

boolean

Memeriksa apakah bitmap mengaum berisi offset tertentu.

rb_build('{2,3}') @> 2

<@

roaringbitmap

roaringbitmap

boolean

Memeriksa apakah bitmap mengaum terkandung oleh bitmap mengaum lainnya.

rb_build('{2,3}') <@ rb_build('{1,2,3}')

<@

integer

roaringbitmap

boolean

Memeriksa apakah offset tertentu terkandung oleh bitmap mengaum.

rb_build('{2,3}') <@ rb_build('{3}')