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_and | roaringbitmap,roaringbitmap | roaringbitmap | Menjalankan operasi AND. | |
rb_or | roaringbitmap,roaringbitmap | roaringbitmap | Menjalankan operasi OR. | |
rb_xor | roaringbitmap,roaringbitmap | roaringbitmap | Menjalankan operasi XOR. | |
rb_andnot | roaringbitmap,roaringbitmap | roaringbitmap | Menjalankan operasi ANDNOT. | |
rb_cardinality | roaringbitmap | integer | Menghitung kardinalitas. | |
rb_and_cardinality | roaringbitmap,roaringbitmap | integer | Menghitung kardinalitas dengan menjalankan operasi AND pada dua bitmap mengaum. | |
rb_or_cardinality | roaringbitmap,roaringbitmap | integer | Menghitung kardinalitas dengan menjalankan operasi OR pada dua bitmap mengaum. | |
rb_xor_cardinality | roaringbitmap,roaringbitmap | integer | Menghitung kardinalitas dengan menjalankan operasi XOR pada dua bitmap mengaum. | |
rb_andnot_cardinality | roaringbitmap,roaringbitmap | integer | Menghitung kardinalitas dengan menjalankan operasi ANDNOT pada dua bitmap mengaum. | |
rb_is_empty | roaringbitmap | boolean | Memeriksa apakah bitmap mengaum kosong. | |
rb_equals | roaringbitmap,roaringbitmap | boolean | Memeriksa apakah dua bitmap mengaum sama. | |
rb_intersect | roaringbitmap,roaringbitmap | boolean | Memeriksa apakah dua bitmap mengaum berpotongan. | |
rb_remove | roaringbitmap,integer | roaringbitmap | Menghapus offset tertentu dari bitmap mengaum. | |
rb_flip | roaringbitmap,integer | roraingbitmap | Membalik offset tertentu dalam bitmap mengaum. | |
rb_flip | roaringbitmap,integer,integer | roaringbitmap | Membalik rentang offset tertentu dalam bitmap mengaum. | |
rb_minimum | roaringbitmap | integer | Mengembalikan offset terkecil dalam bitmap mengaum. Jika bitmap mengaum kosong, -1 dikembalikan. | |
rb_maximum | roaringbitmap | integer | Mengembalikan offset terbesar dalam bitmap mengaum. Jika bitmap mengaum kosong, 0 dikembalikan. | |
rb_rank | roaringbitmap,integer | integer | Mengembalikan jumlah elemen yang kurang dari atau sama dengan offset tertentu dalam bitmap mengaum. | |
rb_iterate | roaringbitmap | setof integer | Mengembalikan daftar offset dari bitmap mengaum. | |
rb_contains | roaringbitmap, integer | bool | Memeriksa apakah bitmap mengaum berisi offset tertentu. | |
rb_contains | roaringbitmap,integer,integer | bool | Memeriksa apakah bitmap mengaum berisi rentang offset tertentu. | |
rb_contains | roaringbitmap, roaringbitmap | bool | Memeriksa apakah bitmap mengaum berisi bitmap mengaum lainnya. | |
rb_becontained | integer, roaringbitmap | bool | Memeriksa apakah offset tertentu terkandung oleh bitmap mengaum. | |
rb_becontained | roaringbitmap,roaringbitmap | bool | Memeriksa apakah bitmap mengaum terkandung oleh bitmap mengaum lainnya. | |
rb_add | roaringbitmap, integer | roaringbitmap | Menambahkan offset tertentu ke bitmap mengaum. | |
rb_add_2 | integer, roaringbitmap | roaringbitmap | Menambahkan offset tertentu ke bitmap mengaum. | |
rb_add | roaringbitmap,integer, integer | roaringbitmap | Menambahkan rentang offset tertentu ke bitmap mengaum. | |
rb_remove | roaringbitmap,integer, integer | roaringbitmap | Menghapus offset tertentu dari bitmap mengaum. | |
rb_jaccard_index | roaringbitmap,roaringbitmap | float8 | Menghitung koefisien kesamaan Jaccard antara dua bitmap mengaum. | |
rb_to_array | roaringbitmap | integer[] | Mengonversi bitmap mengaum menjadi array. | |
rb_iterate_decrement | roaringbitmap | integer[] | Mengembalikan daftar offset dari bitmap mengaum dalam urutan menurun. | |
Fungsi agregat bitmap
Fungsi | Masukan | Keluaran | Deskripsi | Contoh |
rb_build_agg | integer | roaringbitmap | Membuat bitmap mengaum dari sekelompok offset. | |
rb_or_agg | roaringbitmap | roaringbitmap | Menjalankan operasi agregat OR. | |
rb_and_agg | roaringbitmap | roaringbitmap | Menjalankan operasi agregat AND. | |
rb_xor_agg | roaringbitmap | roaringbitmap | Menjalankan operasi agregat XOR. | |
rb_or_cardinality_agg | roaringbitmap | integer | Menghitung kardinalitas dengan menjalankan operasi agregat OR pada dua bitmap mengaum. | |
rb_and_cardinality_agg | roaringbitmap | integer | Menghitung kardinalitas dengan menjalankan operasi agregat AND pada dua bitmap mengaum. | |
rb_xor_cardinality_agg | roaringbitmap | integer | Menghitung kardinalitas dengan menjalankan operasi agregat XOR pada dua bitmap mengaum. | |
Operator
Operator | Kiri | Kanan | Keluaran | Deskripsi | Contoh |
& | roaringbitmap | roaringbitmap | roaringbitmap | Menjalankan operasi AND pada dua bitmap mengaum. | |
| | roaringbitmap | roaringbitmap | roaringbitmap | Menjalankan operasi OR pada dua bitmap mengaum. | |
# | roaringbitmap | roaringbitmap | roaringbitmap | Menjalankan operasi XOR pada dua bitmap mengaum. | |
~ | roaringbitmap | roaringbitmap | roaringbitmap | Menjalankan operasi ANDNOT pada dua bitmap mengaum. | |
+ | roraingbitmap | integer | roaringbitmap | Menambahkan offset tertentu ke bitmap mengaum. | |
- | roraingbitmap | integer | roaringbitmap | Menghapus offset tertentu dari bitmap mengaum. | |
= | roaringbitmap | roaringbitmap | boolean | Memeriksa apakah dua bitmap mengaum sama. | |
<> | roaringbitmap | roaringbitmap | boolean | Memeriksa apakah dua bitmap mengaum berbeda. | |
&& | roaringbitmap | roaringbitmap | boolean | Memeriksa apakah dua bitmap mengaum berpotongan. | |
@> | roaringbitmap | roaringbitmap | boolean | Memeriksa apakah bitmap mengaum berisi bitmap mengaum lainnya. | |
@> | roaringbitmap | integer | boolean | Memeriksa apakah bitmap mengaum berisi offset tertentu. | |
<@ | roaringbitmap | roaringbitmap | boolean | Memeriksa apakah bitmap mengaum terkandung oleh bitmap mengaum lainnya. | |
<@ | integer | roaringbitmap | boolean | Memeriksa apakah offset tertentu terkandung oleh bitmap mengaum. | |