Bagaimana Bitset Mengaktifkan Keserbagunaan Pencarian Kesamaan Vektor
Gambar Sampul Bitset
Oleh Yudong Cai dan Angela Ni.
Berbagai fitur penting baru dari database vektor disediakan bersama dengan rilis Milvus 2.0. Di antara fitur-fitur baru tersebut, Perjalanan Waktu, pemfilteran atribut, dan operasi penghapusan saling berkorelasi karena ketiga fitur ini dicapai dengan satu mekanisme yang sama - bitset.
Oleh karena itu, artikel ini bertujuan untuk memperjelas konsep bitset di Milvus dan menjelaskan bagaimana cara kerjanya untuk mendukung operasi hapus, Perjalanan Waktu, dan pemfilteran atribut dengan tiga contoh.
Apa yang dimaksud dengan bitset?
Bitset adalah sebuah larik angka bit ("0" dan "1") yang dapat digunakan untuk merepresentasikan informasi data tertentu. Dengan bitset, Anda dapat menyimpan jenis data tertentu secara ringkas dan efisien daripada menyimpannya dalam bentuk Ints, float, atau karakter. Bitset bekerja berdasarkan logika boolean, yang menyatakan bahwa nilai output adalah valid atau tidak valid, biasanya dilambangkan dengan "1" dan "0". "1" berarti valid, dan "0" berarti tidak valid. Karena bitset sangat efisien dan dapat menghemat penyimpanan, bitset juga dapat digunakan untuk mencapai banyak fitur seperti pemfilteran atribut, operasi hapus, Time Travel, dan banyak lagi.
Mulai dari versi 0.7.0, konsep bitset telah diperkenalkan di Milvus untuk mengaktifkan fungsi hapus. Secara lebih spesifik, bitset digunakan untuk menandai jika setiap baris dalam segmen dihapus. Entitas yang dihapus ditandai dengan "1" dalam bitset yang sesuai, dan sebagai hasilnya, entitas yang dihapus tidak akan dihitung selama pencarian atau kueri.
Pada versi Milvus 2.0, penerapan bitset diperluas untuk memungkinkan lebih banyak fitur, seperti penyaringan atribut dan Perjalanan Waktu. Prinsip umum dalam bitset tetap sama. Artinya, jika sebuah entitas ditandai dengan "1" dalam bitset yang sesuai, maka entitas tersebut akan diabaikan selama pencarian atau kueri. Bitset digunakan untuk mengaktifkan 3 fitur di Milvus:
- Pemfilteran atribut
- Penghapusan data
- Kueri dengan Perjalanan Waktu
Bagaimana cara kerja bitset di Milvus?
Contoh-contoh di bawah ini digunakan untuk mengilustrasikan bagaimana cara kerja bitset di Milvus.
Prasyarat
Misalkan ada sebuah segmen dengan delapan entitas dan serangkaian peristiwa bahasa manipulasi data (DML) terjadi dalam urutan yang ditunjukkan pada gambar di bawah ini.
- Empat dari entitas, yang
primary_keys
-nya masing-masing adalah [1, 2, 3, 4], disisipkan ketika cap waktuts
sama dengan 100. - Empat entitas lainnya, yang
primary_keys
-nya adalah [5, 6, 7, 8], disisipkan ketika timestampts
sama dengan 200. - Entitas yang
primary_keys
-nya [7, 8] dihapus ketika timestampts
sama dengan 300. - Hanya entitas yang
primary_keys
-nya [1, 3, 5, 7] yang memenuhi ketentuan pemfilteran atribut.
Peristiwa DML
Kasus pertama
Misalkan nilai yang ditetapkan pengguna untuk time_travel
adalah 150. Dengan kata lain, pengguna melakukan kueri pada data yang tersimpan di Milvus ketika ts
= 150. Proses pembangkitan bitset diilustrasikan oleh Gambar 1.
Pada tahap penyaringan awal, hasil dari filter_bitset
seharusnya adalah [1, 0, 1, 0, 1, 0, 1, 0] karena entitas [1, 3, 5, 7] merupakan hasil penyaringan yang valid dan ditandai sebagai "1" di dalam bitset. Namun, entitas [4, 5, 6, 7] bahkan tidak dimasukkan ke basis data vektor ketika ts
sama dengan 150. Oleh karena itu, keempat entitas ini harus ditandai sebagai "0" terlepas dari kondisi pemfilteran. Sekarang hasil bitset seharusnya adalah [1, 0, 1, 0, 0, 0, 0, 0]. Karena dalam Milvus, prinsip umum komputasi bitset adalah bahwa entitas yang ditandai dengan "1" dalam bitset diabaikan selama pencarian atau kueri, hasil bitset setelah Perjalanan Waktu dan pemfilteran atribut perlu dibalik agar dapat digabungkan dengan bitmap yang telah dihapus. Hasil yang dibalik dari filter_bitset
haruslah [0, 1, 0, 1, 1, 1, 1, 1].
Sedangkan untuk bitmap penghapusan del_bitset
, nilai awal seharusnya adalah [0, 0, 0, 0, 0, 0, 1, 1]. Namun, entitas 7 dan 8 tidak dihapus sampai ts
bernilai 300. Oleh karena itu, ketika ts
bernilai 150, entitas 7 dan 8 masih valid. Hasilnya, nilai del_bitset
setelah Perjalanan Waktu seharusnya adalah [0, 0, 0, 0, 0, 0, 0, 0].
Sekarang kita memiliki dua bitset setelah Perjalanan Waktu dan pemfilteran atribut: filter_bitset
[0, 1, 0, 1, 1, 1, 1, 1] dan del_bitset
[0, 0, 0, 0, 0, 0, 0, 0]. Gabungkan kedua bitset ini dengan operator logika biner "OR". Nilai akhir dari result_bitset
adalah [0, 1, 0, 1, 1, 1, 1, 1]. Dengan kata lain, hanya entitas 1 dan 3 yang akan dikomputasi pada tahap pencarian atau kueri berikut ini.
Gambar 1
Kasus kedua
Misalkan nilai yang ditetapkan pengguna untuk time_travel
adalah 250. Dengan kata lain, pengguna melakukan query pada data yang tersimpan di Milvus ketika ts
= 250. Proses pembangkitan bitset diilustrasikan oleh Gambar 2.
Seperti pada kasus pertama, filter_bitset
yang dihasilkan dari tahap pemfilteran atribut awal seharusnya adalah [1, 0, 1, 0, 1, 0, 1, 0].
Semua entitas [1, 2, 3, 4, 5, 6, 7, 8] dimasukkan ke dalam basis data vektor ketika ts
= 250. Oleh karena itu, hasil sebelumnya dari filter_bitset
tetap sama. Sekali lagi, kita perlu membalik hasil dari filter_bitset
, dan kita akan mendapatkan [0, 1, 0, 1, 0, 1, 0, 1].
Sedangkan untuk penghapusan bitset del_bitset
, nilai awal seharusnya adalah [0, 0, 0, 0, 0, 0, 1, 1]. Namun, entitas 7 dan 8 tidak dihapus sampai ts
bernilai 300. Oleh karena itu, ketika ts
bernilai 250, entitas 7 dan 8 masih valid. Hasilnya, nilai del_bitset
setelah Perjalanan Waktu seharusnya adalah [0, 0, 0, 0, 0, 0, 0, 0].
Sekarang kita memiliki dua bitset setelah Perjalanan Waktu dan pemfilteran atribut: filter_bitset
[0, 1, 0, 1, 0, 1, 0, 1] dan del_bitset
[0, 0, 0, 0, 0, 0, 0, 0]. Gabungkan kedua bitset ini dengan operator logika biner "OR". Nilai akhir dari result_bitset
adalah [0, 1, 0, 1, 0, 1, 0, 1]. Dengan kata lain, hanya entitas [1, 3, 5, 7] yang akan dikomputasi pada tahap pencarian atau kueri berikut ini.
Gambar 2
Kasus ketiga
Misalkan nilai yang ditetapkan pengguna untuk time_travel
adalah 350. Dengan kata lain, pengguna melakukan query pada data yang tersimpan di Milvus ketika ts
= 350. Proses pembangkitan bitset diilustrasikan oleh Gambar 3.
Sama seperti kasus pertama dan kedua, filter_bitset
yang dihasilkan dari tahap pemfilteran atribut awal adalah [0, 1, 0, 1, 0, 1, 0, 1].
Semua entitas [1, 2, 3, 4, 5, 6, 7, 8] dimasukkan ke dalam basis data vektor ketika ts
= 350. Oleh karena itu, hasil akhir pembalikan dari filter_bitset
adalah [0, 1, 0, 1, 0, 1, 0, 1], sama seperti pada kasus kedua.
Sedangkan untuk penghapusan bitset del_bitset
, karena entitas 7 dan 8 sudah dihapus ketika ts
=350, oleh karena itu, hasil dari del_bitset
seharusnya adalah [0, 0, 0, 0, 0, 0, 1, 1].
Sekarang kita memiliki dua bitset setelah Perjalanan Waktu dan pemfilteran atribut: filter_bitset
[0, 1, 0, 1, 0, 1, 0, 1] dan del_bitset
[0, 0, 0, 0, 0, 0, 1, 1]. Gabungkan kedua bitset ini dengan operator logika biner "OR". Nilai akhir dari result_bitset
adalah [0, 1, 0, 1, 0, 1, 1, 1]. Dengan kata lain, hanya entitas [1, 3, 5] yang akan dikomputasi pada tahap pencarian atau kueri berikut ini.
Gambar 3
Apa selanjutnya?
Dalam blog seri fitur baru 2.0, kami bertujuan untuk menjelaskan desain fitur-fitur baru. Baca lebih lanjut dalam seri blog ini!
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word