TairRoaring adalah struktur data berbasis Tair untuk bitmap Roaring. Topik ini menjelaskan TairRoaring dan perintah yang didukungnya.
Pengenalan TairRoaring
Bitmap (juga dikenal sebagai bitset) adalah struktur data umum yang menggunakan penyimpanan kecil untuk mengoptimalkan kueri pada sejumlah besar data. Bitmap lebih hemat ruang dibandingkan implementasi berbasis hash, tetapi tidak cocok untuk menyimpan data yang jarang. Bitmap terkompresi dikembangkan sebagai solusi atas masalah ini. Roaring bitmap adalah jenis bitmap yang diakui industri karena efisiensi dan keseimbangan yang lebih baik dibandingkan bitmap terkompresi lainnya.
TairRoaring mengoptimalkan Roaring bitmap melalui cara-cara berikut:
TairRoaring mencapai keseimbangan antara performa dan kompleksitas ruang di berbagai skenario dengan menggunakan indeks dua tingkat dan kontainer dinamis.
TairRoaring memanfaatkan teknik optimasi seperti single instruction, multiple data (SIMD), vektorisasi, dan algoritma popcount untuk meningkatkan efisiensi komputasi serta memberikan kompleksitas waktu dan ruang yang optimal.
TairRoaring memanfaatkan performa komputasi yang kuat dan stabilitas tinggi yang disediakan oleh Tair untuk mendukung skenario bisnis.
Skenario tipikal
TairRoaring cocok digunakan di industri seperti siaran langsung, musik, dan e-commerce. Anda dapat menggunakan TairRoaring untuk menambahkan tag multidimensi kepada pengguna dalam skenario seperti rekomendasi personalisasi dan pemasaran presisi.
Catatan rilis
Perubahan dalam TairRoaring V2:
TR.RANGEINTARRAY: TR.RANGEINTARRAY di TairRoaring V1 diubah menjadi TR.RANGE di TairRoaring V2.
TR.SETRANGE: Keluaran perintah di V1 adalah
OK, sedangkan keluaran di V2 adalah jumlah bit yang telah diatur menjadi 1. Aspek lain dari perintah tetap tidak berubah.
Pada 13 September 2021, TairRoaring V1 dirilis untuk instans yang menjalankan versi minor 1.7.20 atau lebih baru.
Pada 11 Maret 2022, TairRoaring V2 dirilis untuk instans yang menjalankan versi minor 1.7.27 atau lebih baru.
TairRoaring V2 mengoptimalkan beberapa implementasi perintah dan meningkatkan performa perintah. TairRoaring V2 mencakup sembilan perintah baru termasuk TR.SETBITS dan TR.CLEARBITS, memperbarui tiga perintah dengan dua di antaranya masih kompatibel dengan TairRoaring V1, dan mengubah nama satu perintah.
Pada 20 April 2022, TairRoaring V2.2 dirilis untuk instans yang menjalankan versi minor 1.8.1 atau lebih baru.
Versi ini menambahkan perintah TR.JACCARD, TR.CONTAINS, dan TR.RANK serta memperbaiki kesalahan yang dikembalikan untuk beberapa perintah ketika sebuah kunci tidak ada (kesalahan
ERR key not founddihapus).
Praktik terbaik
Segmentasi audiens dengan menggunakan TairRoaring
Persyaratan
Instans ini adalah instans Tair optimasi memori. Jika instans optimasi memori Anda kompatibel dengan Redis 5.0, versi minor harus 1.7.7 atau yang lebih baru.
Versi minor terbaru menyediakan lebih banyak fitur dan stabilitas yang lebih tinggi. Kami menyarankan Anda untuk memperbarui instans ke versi minor terbaru. Untuk informasi lebih lanjut, lihat Perbarui versi minor sebuah instans. Jika instans Anda adalah instans kluster atau instans pemisahan baca/tulis, kami menyarankan Anda untuk memperbarui node proxy di dalam instans ke versi minor terbaru untuk memastikan semua perintah dapat dijalankan sesuai harapan.
Catatan penggunaan
Operasi ini berlaku untuk data TairRoaring dalam Tair instans.
Daftar perintah
Tipe | Perintah | Sintaksis | Deskripsi | Perubahan versi |
Operasi penulisan |
| Menetapkan bit yang ditentukan dalam kunci TairRoaring menjadi nilai 1 atau 0 dan mengembalikan nilai bit asli. Offset dimulai dari 0. | - (Tidak tersedia) | |
| Menetapkan nilai bit yang ditentukan dalam kunci TairRoaring menjadi 1. Anda dapat menentukan beberapa nilai bit. | Ditambahkan di V2 | ||
| Menetapkan nilai bit yang ditentukan dalam kunci TairRoaring menjadi 0. Jika bit yang ditentukan sudah memiliki nilai 0, operasi tidak dilakukan. Anda dapat menentukan beberapa nilai bit. | Ditambahkan di V2 | ||
| Menetapkan bit dalam rentang yang ditentukan dalam kunci TairRoaring menjadi nilai 1. Rentang tersebut merupakan interval tertutup. | Diperbarui di V2. Setelah pembaruan perintah di V2, keluaran perintah berubah menjadi jumlah bit yang disetel ke 1. | ||
| Menyisipkan larik bit ke posisi setelah bit yang ditentukan dalam Roaring Bitmap dan menimpa data asli. Larik bit terdiri dari 0 dan 1. | Ditambahkan di V2 | ||
| Mengubah nilai bit dalam rentang yang ditentukan dalam kunci TairRoaring dari 0 menjadi 1 atau dari 1 menjadi 0. Rentang tersebut merupakan interval tertutup. Jika kunci tidak ada, kunci dibuat sebagai dataset kosong dan operasi dilakukan pada kunci tersebut. | Ditambahkan di V2 | ||
| Menetapkan nilai bit yang ditentukan dalam kunci TairRoaring menjadi 1. Anda dapat menentukan beberapa nilai bit. Catatan Dalam TairRoaring V2, kami merekomendasikan Anda menggunakan TR.SETBITS alih-alih perintah ini. | - | ||
| Membuat kunci TairRoaring berdasarkan larik integer yang ditentukan. Jika kunci sudah ada, perintah ini menimpa data dalam kunci. Catatan Dalam TairRoaring V2, kami merekomendasikan Anda menggunakan TR.SETBITS alih-alih perintah ini. | - | ||
| Membuat kunci TairRoaring berdasarkan string larik bit yang ditentukan. String larik bit terdiri dari 0 dan 1. Jika kunci sudah ada, perintah ini menimpa data dalam kunci. Catatan Dalam TairRoaring V2, kami merekomendasikan Anda menggunakan TR.APPENDBITARRAY alih-alih perintah ini. | - | ||
| Menjalankan operasi himpunan pada Roaring Bitmap dan menyimpan hasilnya di destkey. Perintah ini mendukung operasi AND, OR, XOR, NOT, dan DIFF. Catatan Perintah ini tidak tersedia untuk kunci yang berada di slot berbeda dalam instans kluster. | - | ||
| Menjalankan operasi bitwise pada beberapa kunci TairRoaring. Operasi bitwise AND, OR, XOR, NOT, dan DIFF didukung. Catatan Perintah ini tidak tersedia untuk kunci yang berada di slot berbeda dalam instans kluster. | Ditambahkan di V2 | ||
| Mengoptimalkan penyimpanan kunci TairRoaring. Jika kunci relatif besar dan digunakan terutama untuk operasi baca setelah kunci dibuat, Anda dapat menjalankan perintah ini. | - | ||
Operasi pembacaan |
| Mengambil nilai bit yang ditentukan dari kunci TairRoaring. | - | |
| Mengambil nilai bit yang ditentukan dari kunci TairRoaring. Anda dapat menentukan beberapa bit untuk pengambilan nilai. | Ditambahkan di V2 | ||
| Menghitung jumlah bit yang memiliki nilai 1 dalam rentang yang ditentukan dalam kunci TairRoaring. Rentang tersebut merupakan interval tertutup. | Diperbarui di V2 dan kompatibel ke depan. | ||
| Mengambil offset bit yang memiliki nomor ordinal count. Bit dapat memiliki nilai 1 atau 0. Parameter count bersifat opsional dan memiliki nilai default 1. Nilai 1 menunjukkan bit pertama yang diambil dengan menggunakan pendekatan penghitungan kiri-kanan. | Diperbarui di V2 dan kompatibel ke depan. | ||
| Memindai semua bit yang terletak setelah bit yang ditentukan dalam kunci TairRoaring dan mengembalikan offset yang sesuai dengan jumlah bit yang dipindai yang memiliki nilai 1. Kursor yang dikembalikan adalah offset yang sesuai dengan kunci. Catatan Perintah ini mungkin atau mungkin tidak memindai dan mengembalikan elemen yang ditambahkan atau dihapus. | Ditambahkan di V2 | ||
| Mengembalikan offset bit yang memiliki nilai 1 dalam rentang yang ditentukan dalam kunci TairRoaring. Rentang tersebut merupakan interval tertutup. | Diganti namanya menjadi TR.RANGE di V2 dari TR.RANGEINTARRAY di V1. | ||
| Mengambil string yang terdiri dari nilai bit 0 dan 1 dalam rentang yang ditentukan dalam kunci TairRoaring. Rentang tersebut merupakan interval tertutup. | Ditambahkan di V2 | ||
| Mengambil offset bit pertama yang memiliki nilai 1 dalam kunci TairRoaring. Jika tidak ada bit yang memiliki nilai 1, nilai -1 dikembalikan. | - | ||
| Mengambil offset bit terakhir yang memiliki nilai 1 dalam Roaring Bitmap. Jika tidak ada bit yang memiliki nilai 1, -1 dikembalikan. | - | ||
| Mengembalikan informasi statistik kunci TairRoaring yang ditentukan. Informasi tersebut mencakup jumlah kontainer dan penggunaan memori. | Ditambahkan di V2 | ||
| Mengambil koefisien kesamaan Jaccard dua kunci TairRoaring. Semakin tinggi koefisien, semakin tinggi kesamaannya. Catatan Perintah ini tidak tersedia untuk kunci yang berada di slot berbeda dalam instans kluster. | Ditambahkan di V2.2 | ||
| Memeriksa apakah key2 mengandung key1. Jika ya, key1 adalah subset dari key2 dan nilai 1 dikembalikan. Sebaliknya, key1 bukan subset dari key2 dan nilai 0 dikembalikan. Catatan Perintah ini tidak tersedia untuk kunci yang berada di slot berbeda dalam instans kluster. | Ditambahkan di V2.2 | ||
| Mengambil jumlah bit yang memiliki nilai 1 dalam rentang dari bit pertama hingga bit yang ditentukan. Rentang tersebut merupakan interval tertutup. | Ditambahkan di V2.2 | ||
Operasi tujuan umum |
| Menghapus satu atau lebih kunci TairRoaring. | - |
Berikut ini adalah bagian yang menjelaskan sintaks perintah:
Kata kunci huruf besar: menunjukkan kata kunci perintah.Teks miring: menunjukkan variabel.[opsi]: menunjukkan bahwa parameter yang diapit bersifat opsional. Parameter yang tidak diapit oleh tanda kurung siku harus ditentukan.A|B: menunjukkan bahwa parameter yang dipisahkan oleh batang vertikal (|) adalah saling eksklusif. Hanya satu dari parameter tersebut yang dapat ditentukan....: menunjukkan bahwa parameter sebelum simbol ini dapat ditentukan secara berulang.
Dalam topik ini, huruf yang digunakan dalam ekspresi kompleksitas waktu menunjukkan makna spesifik topik:
C menunjukkan argc atau rentang parameter.
M menunjukkan jumlah bit yang disetel ke 1 dalam struktur data, seperti jumlah node dalam daftar atau jumlah bidang dalam hash.
TR.SETBIT
Kategori | Deskripsi |
Sintaksis |
|
Kompleksitas waktu | O(1) |
Deskripsi perintah | Menetapkan bit yang ditentukan dalam kunci TairRoaring menjadi nilai 1 atau 0 dan mengembalikan nilai bit asli. Offset dimulai dari 0. |
Parameter |
|
Keluaran |
|
Contoh | Perintah contoh: Keluaran contoh: |
TR.SETBITS
Item | Description |
Sintaksis |
|
Kompleksitas waktu | O(C) |
Deskripsi perintah | Menetapkan nilai bit yang ditentukan dalam kunci TairRoaring menjadi 1. Anda dapat menentukan beberapa nilai bit. |
Opsi |
|
Keluaran |
|
Contoh | Perintah contoh: Keluaran contoh: |
TR.CLEARBITS
Item | Description |
Sintaks |
|
Kompleksitas waktu | O(C) |
Deskripsi perintah | Mengatur nilai bit yang ditentukan dalam kunci TairRoaring menjadi 0. Jika bit yang ditentukan sudah memiliki nilai 0, operasi tidak dilakukan. Anda dapat menentukan beberapa nilai bit. |
Parameter |
|
Keluaran |
|
Contoh | Perintah contoh: Keluaran contoh: |
TR.SETRANGE
Item | Description |
Sintaksis |
|
Kompleksitas waktu | O(C) |
Deskripsi perintah | Menetapkan bit dalam rentang yang ditentukan di kunci TairRoaring menjadi nilai 1. Rentang tersebut merupakan interval tertutup. Sebagai contoh, jika Anda menjalankan perintah |
Opsi |
|
Keluaran |
|
Contoh | Perintah sampel: Keluaran sampel: |
TR.APPENDBITARRAY
Item | Description |
Sintaksis |
|
Kompleksitas waktu | O(C) |
Deskripsi perintah | Menyisipkan larik bit ke dalam posisi setelah bit yang ditentukan dalam Roaring Bitmap dan menimpa data asli. Larik bit terdiri dari 0 dan 1. |
Parameter |
|
Keluaran |
|
Contoh | Jalankan perintah Perintah contoh: Keluaran contoh: Dalam hal ini, kunci TairRoaring foo adalah "101101". |
TR.FLIPRANGE
Item | Description |
Sintaksis |
|
Kompleksitas waktu | O(C) |
Deskripsi perintah | Mengubah nilai bit dalam rentang tertentu di kunci TairRoaring dari 0 menjadi 1 atau dari 1 menjadi 0. Rentang tersebut merupakan interval tertutup. Jika kunci tidak ada, kunci akan dibuat sebagai set data kosong dan operasi dilakukan pada kunci tersebut. |
Parameter |
|
Output |
|
Contoh | Jalankan perintah Perintah contoh: Output contoh: Dalam hal ini, kunci TairRoaring foo adalah "01001". |
TR.APPENDINTARRAY
Item | Description |
Sintaksis |
|
Kompleksitas waktu | O(C) |
Deskripsi perintah | Menetapkan nilai bit yang ditentukan dalam kunci TairRoaring menjadi 1. Anda dapat menentukan beberapa nilai bit. Catatan Dalam TairRoaring V2, kami merekomendasikan untuk menggunakan TR.SETBITS sebagai pengganti perintah ini. |
Parameter |
|
Output |
|
Contoh | Perintah contoh: Output contoh: |
TR.SETINTARRAY
Item | Description |
Sintaks |
|
Kompleksitas waktu | O(C) |
Deskripsi perintah | Membuat kunci TairRoaring berdasarkan array integer yang ditentukan. Jika kunci sudah ada, perintah ini akan menimpa data dalam kunci tersebut. Catatan Dalam TairRoaring V2, kami merekomendasikan Anda menggunakan TR.SETBITS sebagai pengganti perintah ini. |
Parameter |
|
Keluaran |
|
Contoh | Perintah contoh: Keluaran contoh: |
TR.SETBITARRAY
Item | Description |
Sintaksis |
|
Kompleksitas waktu | O(C) |
Deskripsi perintah | Membuat kunci TairRoaring berdasarkan string larik bit yang ditentukan. String larik bit terdiri dari 0 dan 1. Jika kunci sudah ada, perintah ini akan menimpa data dalam kunci tersebut. Catatan Dalam TairRoaring V2, kami merekomendasikan Anda untuk menggunakan TR.APPENDBITARRAY sebagai pengganti perintah ini. |
Parameter |
|
Keluaran |
|
Contoh | Perintah contoh: Keluaran contoh: |
TR.BITOP
Item | Description |
Sintaksis |
|
Kompleksitas waktu | O(C * M) |
Deskripsi perintah | Menjalankan operasi himpunan pada Roaring Bitmaps dan menyimpan hasilnya di destkey. Perintah ini mendukung operasi AND, OR, XOR, NOT, dan DIFF. Catatan Perintah ini tidak tersedia untuk kunci yang berada di slot berbeda dalam instans kluster. |
Opsi |
|
Keluaran |
|
Contoh | Perintah contoh: Keluaran contoh: |
TR.BITOPCARD
Item | Description |
Sintaksis |
|
Kompleksitas waktu | O(C * M) |
Deskripsi perintah | Menjalankan operasi bitwise pada beberapa kunci TairRoaring. Operasi bitwise yang didukung adalah AND, OR, XOR, NOT, dan DIFF. Catatan Perintah ini tidak tersedia untuk kunci yang berada di slot berbeda dalam instans kluster. |
opsi |
|
Keluaran |
|
Contoh | Perintah sampel: Keluaran sampel: |
TR.OPTIMIZE
Item | Deskripsi |
Sintaks |
|
Kompleksitas waktu | O(M) |
Deskripsi perintah | Mengoptimalkan penyimpanan kunci TairRoaring. Jika kunci tersebut relatif besar dan terutama digunakan untuk operasi baca setelah pembuatan kunci, Anda dapat menjalankan perintah ini. |
Opsi |
|
Keluaran |
|
Contoh | Perintah contoh: Keluaran contoh: |
TR.GETBIT
Item | Description |
Sintaksis |
|
Kompleksitas waktu | O(1) |
Deskripsi perintah | Mengambil nilai dari bit yang ditentukan dari sebuah kunci TairRoaring. |
Opsi |
|
Output |
|
Contoh | Perintah contoh: Output contoh: |
TR.GETBITS
Item | Description |
Sintaksis |
|
Kompleksitas waktu | O(C) |
Deskripsi perintah | Mengambil nilai dari bit yang ditentukan dari sebuah TairRoaring key. Anda dapat menentukan beberapa bit untuk pengambilan nilai. |
Parameter |
|
Keluaran |
|
Contoh | Perintah contoh: Keluaran contoh: |
TR.BITCOUNT
Item | Description |
Sintaksis |
|
Kompleksitas waktu | O(M) |
Deskripsi perintah | Menghitung jumlah bit yang memiliki nilai 1 dalam rentang tertentu di dalam kunci TairRoaring. Rentang tersebut merupakan interval tertutup. |
Parameter |
|
Output |
|
Contoh | Perintah contoh: Output contoh: |
TR.BITPOS
Item | Description |
Sintaksis |
|
Kompleksitas waktu | O(C) |
Deskripsi perintah | Mengambil Offset dari bit yang memiliki nomor urut count. Sebuah bit dapat memiliki nilai 1 atau 0. Parameter count bersifat opsional dan memiliki nilai default 1. Nilai 1 menunjukkan bit pertama yang diambil menggunakan pendekatan penghitungan kiri-kanan. |
Parameter |
|
Keluaran |
|
Contoh | Perintah contoh: Keluaran contoh: |
TR.SCAN
Item | Description |
Sintaksis |
|
Kompleksitas waktu | O(C) |
Deskripsi perintah | Memindai semua bit yang terletak setelah bit tertentu dalam kunci TairRoaring dan mengembalikan offset yang sesuai dengan jumlah bit yang dipindai yang memiliki nilai 1. Kursor yang dikembalikan adalah offset yang sesuai dengan kunci. Catatan Perintah ini mungkin atau mungkin tidak memindai dan mengembalikan elemen yang ditambahkan atau dihapus. |
Parameter |
|
Keluaran |
|
Contoh | Perintah contoh: Keluaran contoh: |
TR.RANGE
Kategori | Deskripsi |
Sintaksis |
|
Kompleksitas waktu | O(C) |
Deskripsi perintah | Mengembalikan offset dari bit yang memiliki nilai 1 dalam rentang tertentu di dalam kunci TairRoaring. Rentang tersebut merupakan interval tertutup. |
Parameter |
|
Keluaran |
|
Contoh | Jalankan perintah Perintah contoh: Keluaran contoh: |
TR.RANGEBITARRAY
Item | Description |
Syntax |
|
Kompleksitas waktu | O(C) |
Deskripsi perintah | Mengambil string yang terdiri dari nilai bit 0 dan 1 dalam rentang tertentu di dalam kunci TairRoaring. Rentang tersebut merupakan interval tertutup. |
Parameter |
|
Keluaran |
|
Contoh | Jalankan perintah Perintah contoh: Keluaran contoh: |
TR.MIN
Item | Description |
Sintaksis |
|
Kompleksitas waktu | O(1) |
Deskripsi perintah | Mengambil Offset bit pertama yang memiliki nilai 1 dalam kunci TairRoaring. Jika tidak ada bit yang memiliki nilai 1, nilai -1 akan dikembalikan. |
Parameter |
|
Keluaran |
|
Contoh | Perintah contoh: Keluaran contoh: |
TR.MAX
Item | Description |
Sintaks |
|
Kompleksitas waktu | O(1) |
Deskripsi perintah | Mengambil Offset dari bit terakhir yang memiliki nilai 1 dalam Roaring Bitmap. Jika tidak ada bit yang memiliki nilai 1, -1 akan dikembalikan. |
Opsi |
|
Keluaran |
|
Contoh | Perintah contoh: Keluaran contoh: |
TR.STAT
Item | Description |
Sintaksis |
|
Kompleksitas waktu | O(M) |
Deskripsi perintah | Mengembalikan informasi statistik dari kunci TairRoaring yang ditentukan. Informasi tersebut mencakup jumlah kontainer dan penggunaan memori. |
Parameter |
|
Output |
|
Contoh | Perintah contoh: Output contoh: |
TR.JACCARD
Item | Description |
Sintaksis |
|
Kompleksitas waktu | O(M) |
Deskripsi perintah | Mengambil koefisien kemiripan Jaccard dari dua kunci TairRoaring. Semakin tinggi koefisien, semakin tinggi tingkat kemiripannya. Catatan Perintah ini tidak tersedia untuk kunci yang berada di slot berbeda dalam instans kluster. |
Parameter |
|
Keluaran |
|
Contoh | Perintah contoh: Keluaran contoh: |
TR.CONTAINS
Kategori | Deskripsi |
Sintaksis |
|
Kompleksitas waktu | O(M) |
Deskripsi perintah | Memeriksa apakah key2 mengandung key1. Jika ya, key1 adalah subset dari key2 dan nilai 1 dikembalikan. Sebaliknya, jika key1 bukan subset dari key2, nilai 0 dikembalikan. Catatan Perintah ini tidak tersedia untuk kunci yang berada di slot berbeda dalam instans kluster. |
opsi |
|
Keluaran |
|
Contoh | Jalankan perintah Contoh perintah: Contoh keluaran: |
TR.RANK
Item | Description |
Sintaks |
|
Kompleksitas waktu | O(M) |
Deskripsi perintah | Mengambil jumlah bit yang memiliki nilai 1 dalam rentang dari bit pertama hingga bit yang ditentukan. Rentang tersebut merupakan interval tertutup. |
Opsi |
|
Keluaran |
|
Contoh | Jalankan perintah Perintah contoh: Keluaran contoh: |
Pesan kesalahan
Pesan kesalahan | Deskripsi |
| Tipe objek salah: Kunci bukan objek TairRoaring. |
| Tipe parameter salah: Nilai parameter tidak dapat diubah menjadi bilangan bulat 32-bit. |
| Parameter tidak valid:
|
| Kunci TairRoaring sudah ada, dan datanya tidak dapat ditimpa. Catatan Kesalahan ini diperbaiki di TairRoaring V2.2. |
| Objek Roaring Bitmap tidak ada. Operasi ini tidak didukung. Catatan Kesalahan ini diperbaiki di TairRoaring V2.2. |