Halaman ini menjelaskan cara penelusuran vektor diterapkan di instance Cloud SQL untuk MySQL. Cloud SQL memungkinkan Anda menyimpan embedding vektor, membuat indeks vektor, dan melakukan penelusuran vektor bersama dengan data lain yang disimpan.
Penyimpanan embedding vektor
Anda menyimpan penyematan vektor dalam tabel yang mematuhi properti atomicity, konsistensi, isolasi, dan ketahanan (ACID). Seperti data relasional lainnya dalam tabel, Anda dapat mengakses penyematan vektor dalam tabel dengan semantik transaksional yang ada.
Untuk membuat pemetaan antara baris tabel dan representasi vektor, Anda perlu membuat kolom dalam tabel untuk menyimpan penyematan vektor. Kolom harus menggunakan jenis data VECTOR
Cloud SQL dan harus menunjukkan jumlah dimensi yang diperlukan penyematan. Kolom penyematan vektor hanya dapat
menyimpan penyematan vektor yang menggunakan dimensi yang sama persis dengan yang Anda tentukan
saat menentukan kolom.
Tabel hanya dapat memiliki satu kolom penyematan vektor. Tidak ada batasan untuk jumlah baris dalam tabel.
Untuk membedakan kolom penyematan vektor dari kolom lain,
Cloud SQL menambahkan COMMENT
dan CONSTRAINT
khusus ke kolom.
Batasan diperlukan untuk validasi input, dan anotasi kolom penyematan vektor
terlihat sebagai COMMENT
. Anda tidak dapat mengubah atau menghapus komentar atau
batasan.
Jika memiliki penyimpanan dan memori yang cukup di instance Cloud SQL, Anda dapat memiliki beberapa tabel dengan kolom penyematan vektornya sendiri.
Replikasi data berfungsi dengan cara yang sama untuk kolom penyematan vektor seperti halnya untuk kolom InnoDB MySQL lainnya.
Untuk mengetahui daftar batasan dan pembatasan untuk tabel, kolom, dan pernyataan DML penyematan vektor, lihat Batasan.
Indeks vektor
Anda harus menggunakan indeks vektor untuk melakukan penelusuran kemiripan ANN pada embedding vektor. Cloud SQL membuat indeks vektor menggunakan algoritma Scalable Nearest Neighbors (ScANN).
Indeks vektor memiliki persyaratan berikut:
- Anda hanya dapat membuat satu indeks vektor per tabel.
- Jika memiliki beberapa tabel dengan penyematan vektor di instance, Anda dapat membuat indeks vektor untuk setiap tabel.
- Jika membuat indeks vektor, Anda tidak dapat menambahkan batasan ke kunci utama tabel yang diindeks.
Untuk kualitas penelusuran yang lebih baik, buat indeks vektor hanya setelah memuat sebagian besar data Anda di tabel dasar. Jika Anda memiliki kurang dari 1.000 penyematan di tabel dasar, pembuatan indeks akan gagal.
Saat memutuskan apakah akan membuat indeks vektor, jika Anda memiliki sedikit baris, pertimbangkan apakah Anda dapat melakukan penelusuran KNN. Keputusan untuk menggunakan penelusuran KNN versus ANN juga bergantung pada jumlah dimensi pada penyematan vektor. Jumlah penyematan yang lebih besar mungkin memerlukan indeks vektor.
Untuk mengetahui daftar batasan dan pembatasan untuk indeks vektor, lihat Batasan. Untuk informasi tentang cara membuat indeks vektor, lihat Membuat dan mengelola indeks vektor.
Pembaruan indeks vektor
Cloud SQL memperbarui indeks vektor secara real time. Setiap transaksi yang melakukan operasi bahasa manipulasi data (DML) pada tabel dasar juga akan menyebarkan perubahan ke indeks vektor terkait. Indeks vektor berperilaku dengan cara yang sama seperti indeks sekunder lainnya pada tabel. Indeks vektor sepenuhnya konsisten secara transaksional dan mematuhi ACID. Jika Anda melakukan rollback transaksi, perubahan rollback yang sesuai juga akan terjadi di indeks vektor.
Replikasi indeks vektor
Cloud SQL mereplikasi indeks vektor ke semua replika baca, termasuk untuk replikasi bertingkat. Saat Anda membuat replika baca baru dari instance utama yang memiliki penyematan vektor, replika baca akan mewarisi setelan penyematan vektor dari instance utama. Untuk replika baca yang ada, Anda harus mengaktifkan dukungan penyematan vektor di setiap replika.
Dalam hal dampak terhadap jeda replikasi, pembuatan dan pemeliharaan indeks vektor beroperasi dengan cara yang sama seperti indeks MySQL biasa.
Persistensi, penonaktifan, dan dampak terhadap pemeliharaan
Indeks vektor dipertahankan dengan cara yang sama seperti tabel dasar, dengan dukungan ACID penuh. Indeks vektor selalu disinkronkan dengan data tabel dasarnya, dan memiliki visibilitas, isolasi, dan keamanan error yang sama. Tidak ada dampak pada indeks vektor saat instance dimatikan atau menerima pemeliharaan.
Pemeliharaan indeks
Setelah operasi DML yang ekstensif dilakukan pada tabel dasar, indeks vektor yang Anda latih pada data awal (pada saat pembuatan indeks) mungkin tidak mencerminkan status baru. Hal ini dapat memengaruhi kualitas penelusuran.
Ada dua bagian dalam indeks:
- Hierarki indeks. Model ini dibuat dengan melatih data yang ada. Nilai ini tetap tidak berubah selama masa aktif indeks.
- Indeks akan keluar. Ini berisi semua baris data. Daun indeks tidak pernah tidak sinkron.
Hierarki indeks mungkin menjadi kurang efisien setelah sejumlah besar pernyataan DML dijalankan karena baris berpindah dari satu daun ke daun lainnya. Untuk memuat ulang hierarki indeks, Anda perlu mem-build ulang indeks.
Operasi DDL yang tidak didukung pada tabel dengan indeks vektor
- Operasi tabel perubahan yang memerlukan algoritma salinan.
- Operasi tabel ubah yang mengharuskan tabel dibuat ulang.
- Hapus atau ubah kunci utama.
- Pindahkan tabel ke tablespace umum.
Penelusuran vektor
Cloud SQL menyediakan fungsi jarak vektor yang Anda gunakan untuk melakukan penelusuran kesamaan vektor perkiraan tetangga terdekat (ANN) dan tetangga terdekat K (KNN) di instance Anda. Saat Anda menjalankan kueri, vektor kueri akan dibandingkan dengan vektor dalam set data Anda. Fungsi jarak menghitung jarak antara vektor menggunakan metrik kesamaan seperti kosinus. Vektor dengan jarak terpendek di antara keduanya adalah yang paling mirip dan ditampilkan dalam hasil penelusuran.
Cloud SQL menggunakan fungsi berikut untuk mengukur jarak antara vektor dalam penelusuran vektor saat Anda melakukan penelusuran vektor ANN dan KNN:
- Kosinus: mengukur kosinus sudut antara dua vektor. Nilai yang lebih kecil menunjukkan kemiripan yang lebih besar antara vektor.
- Dot product: menghitung kosinus sudut yang dikalikan dengan produk besar vektor yang sesuai.
- Jarak kuadrat L2: mengukur jarak Euclidean antara dua vektor dengan menambahkan jarak kuadrat di setiap dimensi.
Penelusuran KNN
Penelusuran vektor KNN adalah metode penelusuran yang lebih disukai jika Anda memerlukan hasil yang tepat atau ingin menambahkan pemfilteran selektif. Penelusuran KNN melakukan komputasi jarak vektor kueri dengan setiap penyematan dalam set data untuk menemukan tetangga terdekat. Penelusuran KNN di Cloud SQL memberikan recall yang sempurna. Penelusuran KNN tidak menggunakan indeks vektor sehingga merupakan opsi yang baik saat menggunakan set data yang lebih kecil.
Untuk melakukan penelusuran KNN, Anda menggunakan fungsi vector_distance
yang menggunakan dua
vektor sebagai input: vektor kueri (yang Anda telusuri) dan vektor kandidat
dari set data Anda. Fungsi ini menghitung jarak antara kedua vektor ini.
Anda menggunakan vector_distance dalam pernyataan SELECT
. Untuk mengetahui informasi selengkapnya, lihat
Penelusuran K-nearest neighbors (KNN).
Jika mendapati bahwa KNN tidak berperforma baik, Anda dapat membuat indeks vektor nanti
dan terus menggunakan approx_distance
dalam aplikasi untuk penelusuran ANN.
Penelusuran ANN
Penelusuran vektor ANN adalah jenis penelusuran yang lebih disukai jika efisiensi kueri menjadi masalah. Hal ini mempercepat penelusuran kemiripan dengan menghitung jarak antara vektor kueri dan hanya sebagian vektor dalam set data Anda. Untuk melakukannya, Cloud SQL mengatur data ke dalam cluster atau partisi, lalu memfokuskan penelusuran pada cluster yang paling dekat dengan kueri. Penelusuran ANN memerlukan indeks vektor. Indeks ini memprioritaskan kecepatan penelusuran daripada recall yang sempurna. Di Cloud SQL, jenis indeks TREE_SQ digunakan untuk penelusuran ANN.
Untuk melakukan penelusuran ANN, Anda menggunakan fungsi approx_distance
dengan opsi pengukuran jarak. Anda menggunakan approx_distance
dalam daftar ORDER BY
atau
SELECT
dan klausa LIMIT
diizinkan untuk membatasi hasil penelusuran. Anda juga dapat menambahkan klausa WHERE
untuk melakukan pemfilteran pasca-penelusuran. Untuk
mengetahui informasi selengkapnya, lihat
Menelusuri perkiraan tetangga terdekat (ANN).
Ada beberapa kasus saat penelusuran ANN kembali ke penelusuran KNN. Untuk mengetahui informasi selengkapnya, lihat Memeriksa status penggantian untuk penelusuran ANN.
Persyaratan
Cloud SQL mengharuskan Anda mengaktifkan penyematan vektor pada instance menggunakan flag cloudsql_vector
sebelum menambahkan penyematan vektor. Untuk mengetahui informasi
selengkapnya, lihat
Mengaktifkan dan menonaktifkan penyematan vektor di instance Anda.
Batasan
Berikut adalah batasan pada tabel yang memiliki kolom penyematan vektor:
- Hanya boleh ada satu kolom penyematan vektor per tabel.
- Hanya boleh ada satu indeks vektor per tabel.
- Penyematan vektor dibatasi hingga 16.000 dimensi.
- Kolom penyematan vektor tidak boleh berupa kolom yang dihasilkan.
- Partisi tingkat tabel pada tabel dengan kolom penyematan vektor tidak didukung.
- Kunci utama yang menggunakan jenis data
BIT
,BINARY
,VARBINARY
,JSON
,BLOB
,TEXT
, atau data spasial tidak didukung untuk indeks vektor. Kunci utama gabungan juga tidak dapat menyertakan jenis ini. - Jika ada indeks vektor, Anda tidak dapat menambahkan batasan ke kunci utama tabel dasar.
- Jika indeks vektor ada di tabel, ada beberapa operasi DDL yang tidak dapat Anda lakukan. Untuk mengetahui informasi selengkapnya, lihat Operasi DDL yang tidak didukung pada tabel dengan indeks vektor.
Berikut adalah batasan untuk kueri penelusuran vektor:
- Fungsi
approx_distance
hanya dapat digunakan dalam daftarORDER BY
atauSELECT
. - Predikat yang melibatkan tabel dasar dapat digunakan dalam kondisi
WHERE
bersama dengan ekspresiapprox_distance
dalam daftarORDER BY
atauSELECT
. Predikat kondisiWHERE
dievaluasi setelah fungsi vektorapprox_distance
dievaluasi.
Praktik terbaik untuk menggunakan indeks vektor
Bagian ini memberikan praktik terbaik untuk menggunakan indeks vektor. Setiap beban kerja berbeda, dan Anda mungkin perlu menyesuaikannya.
- Setelah operasi DML utama, sebaiknya buat ulang indeks.
- Secara umum, Anda dapat mengizinkan Cloud SQL menghitung jumlah daun yang akan digunakan. Jika Anda memiliki kasus penggunaan yang ingin menentukan jumlah daun, sebaiknya miliki setidaknya 100 vektor per daun untuk recall terbaik.
Langkah berikutnya
- Baca ringkasan tentang penelusuran vektor di Cloud SQL.
- Pelajari cara membuat embedding vektor.
- Pelajari cara membuat indeks vektor.
- Pelajari cara melakukan penelusuran pada embedding vektor.