🚀 Coba Zilliz Cloud, Milvus yang sepenuhnya terkelola, secara gratis—rasakan performa 10x lebih cepat! Coba Sekarang>>

milvus-logo
LFAI
  • Home
  • Blog
  • Bagaimana Bitset Mengaktifkan Keserbagunaan Pencarian Kesamaan Vektor

Bagaimana Bitset Mengaktifkan Keserbagunaan Pencarian Kesamaan Vektor

  • Engineering
February 14, 2022
Yudong Cai

Bitset Cover Image 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 waktu ts sama dengan 100.
  • Empat entitas lainnya, yang primary_keys -nya adalah [5, 6, 7, 8], disisipkan ketika timestamp ts sama dengan 200.
  • Entitas yang primary_keys -nya [7, 8] dihapus ketika timestamp ts sama dengan 300.
  • Hanya entitas yang primary_keys -nya [1, 3, 5, 7] yang memenuhi ketentuan pemfilteran atribut.

DML events 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.

Figure 1 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.

Figure 2 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.

Figure 3 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 Started

Like the article? Spread the word

Terus Baca