Penelusuran vektor

Halaman ini menjelaskan cara penerapan penelusuran vektor di instance Cloud SQL untuk MySQL. Cloud SQL memungkinkan Anda menyimpan embedding vektor, membuat indeks vektor, dan melakukan penelusuran vektor bersama dengan data tersimpan lainnya.

Penyimpanan embedding vektor

Anda menyimpan sematan vektor dalam tabel yang sesuai dengan properti atomisitas, konsistensi, isolasi, dan ketahanan (ACID). Seperti data relasional lainnya dalam tabel, Anda dapat mengakses sematan 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 sematan vektor. Kolom harus menggunakan jenis data VECTOR Cloud SQL dan harus menunjukkan jumlah dimensi yang diperlukan embedding. Kolom penyematan vektor hanya dapat menyimpan penyematan vektor yang menggunakan dimensi yang sama persis dengan yang Anda tentukan saat Anda 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 tersebut. Batasan ini diperlukan untuk validasi input, dan anotasi kolom penyematan vektor terlihat sebagai COMMENT. Anda tidak dapat mengubah atau menghapus komentar atau batasan.

Jika Anda 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 sematan vektor seperti halnya untuk kolom MySQL InnoDB lainnya.

Untuk mengetahui daftar batasan dan pembatasan untuk tabel, kolom, dan pernyataan DML embedding vektor, lihat Batasan.

Indeks vektor

Anda harus menggunakan indeks vektor untuk melakukan penelusuran kemiripan ANN pada embedding vektor Anda. 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 tersebut.
  • 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 dalam tabel dasar. Jika Anda memiliki kurang dari 1.000 sematan di tabel dasar, pembuatan indeks akan gagal.

Saat memutuskan apakah akan membuat indeks vektor, jika Anda memiliki sejumlah kecil baris, pertimbangkan apakah Anda dapat melakukan penelusuran KNN sebagai gantinya. Keputusan untuk menggunakan penelusuran KNN versus ANN juga bergantung pada jumlah dimensi pada sematan vektor. Jumlah sematan yang lebih besar mungkin memerlukan indeks vektor.

Untuk mengetahui daftar batasan dan pembatasan untuk indeks vektor, lihat Batasan. Untuk mengetahui 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 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 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 embedding vektor, replika baca akan mewarisi setelan embedding vektor dari instance utama. Untuk replika baca yang ada, Anda harus mengaktifkan dukungan penyematan vektor di setiap replika.

Dari segi dampak terhadap jeda replikasi, pembuatan dan pengelolaan indeks vektor beroperasi dengan cara yang sama seperti indeks MySQL biasa.

Persistensi, penonaktifan, dan dampak pada 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 dari error yang sama. Tidak ada dampak pada indeks vektor saat instance dimatikan atau menerima pemeliharaan.

Pemeliharaan indeks

Setelah operasi DML 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 indeks:

  • Pohon indeks. Fitur ini dibuat dengan melatih data yang ada. Nilai ini tetap tidak berubah selama masa aktif indeks.
  • Indeks keluar. Ini berisi semua baris data. Indeks daun tidak pernah tidak sinkron.

Pohon indeks mungkin menjadi kurang efisien setelah sejumlah besar pernyataan DML dijalankan karena baris berpindah dari satu leaf ke leaf lainnya. Untuk memuat ulang struktur indeks, Anda perlu membangun ulang indeks.

Operasi DDL yang tidak didukung pada tabel dengan indeks vektor

  • Operasi pengubahan tabel yang memerlukan algoritma penyalinan.
  • Operasi pengubahan tabel yang mengharuskan tabel dibangun ulang.
  • Menghapus atau mengubah 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 K-terdekat (KNN) di instance Anda. Saat Anda menjalankan kueri, vektor kueri 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 kesamaan yang lebih besar antara vektor.
  • Perkalian titik: menghitung kosinus sudut yang dikalikan dengan perkalian besaran vektor yang sesuai.
  • Jarak L2 kuadrat: mengukur jarak Euclidean antara dua vektor dengan menambahkan jarak kuadrat pada setiap dimensi.

Penelusuran vektor KNN adalah metode penelusuran pilihan saat Anda memerlukan hasil yang tepat atau ingin menambahkan pemfilteran selektif. Penelusuran KNN melakukan perhitungan jarak vektor kueri dengan setiap embedding 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 bekerja dengan set data yang lebih kecil.

Untuk melakukan penelusuran KNN, Anda menggunakan fungsi vector_distance yang mengambil dua vektor sebagai input: vektor kueri (apa yang Anda telusuri) dan vektor kandidat dari set data Anda. Fungsi ini menghitung jarak antara kedua vektor tersebut. Anda menggunakan vector_distance dalam pernyataan SELECT. Untuk mengetahui informasi selengkapnya, lihat Menelusuri K-nearest neighbors (KNN).

Jika mendapati bahwa KNN tidak berperforma baik, Anda dapat membuat indeks vektor nanti dan terus menggunakan approx_distance di aplikasi untuk penelusuran ANN.

Penelusuran vektor ANN adalah jenis penelusuran yang lebih disukai jika efisiensi kueri menjadi pertimbangan. Fitur ini mempercepat penelusuran kesamaan dengan menghitung jarak antara vektor kueri Anda 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 pencarian 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 setelah penelusuran hasil penelusuran Anda. Untuk informasi selengkapnya, lihat Menelusuri tetangga terdekat perkiraan (ANN).

Ada beberapa kasus ketika 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 di instance menggunakan flag cloudsql_vector sebelum menambahkan penyematan vektor. Untuk mengetahui informasi selengkapnya, lihat Mengaktifkan dan menonaktifkan embedding vektor di instance Anda.

Batasan

Berikut adalah batasan pada tabel yang memiliki kolom sematan vektor:

  • Hanya boleh ada satu kolom penyematan vektor per tabel.
  • Hanya boleh ada satu indeks vektor per tabel.
  • Embedding vektor dibatasi hingga 16.000 dimensi.
  • Kolom sematan vektor tidak boleh berupa kolom yang dibuat.
  • Partisi tingkat tabel pada tabel dengan kolom sematan 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 daftar ORDER BY atau SELECT.
  • Predikat yang melibatkan tabel dasar dapat digunakan dalam kondisi WHERE bersama dengan ekspresi approx_distance dalam daftar ORDER BY atau SELECT. Predikat kondisi WHERE dievaluasi setelah fungsi vektor approx_distance dievaluasi.

Praktik terbaik untuk menggunakan indeks vektor

Bagian ini memberikan praktik terbaik untuk menggunakan indeks vektor. Setiap workload berbeda, dan Anda mungkin perlu menyesuaikannya.

  • Setelah operasi DML utama, sebaiknya bangun kembali indeks.
  • Secara umum, Anda dapat membiarkan Cloud SQL menghitung jumlah daun yang akan digunakan. Jika Anda memiliki kasus penggunaan yang mengharuskan Anda menentukan jumlah daun, sebaiknya miliki setidaknya 100 vektor per daun untuk mendapatkan perolehan terbaik.

Langkah berikutnya