Penelusuran vektor di Cloud SQL untuk MySQL

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 penyematan vektor dalam tabel dengan semantik transaksional yang ada.

Untuk membuat pemetaan antara baris tabel dan representasi vektor, Anda perlu membuat kolom di tabel untuk menyimpan embedding vektor. Kolom harus menggunakan jenis data VECTOR. Kolom penyematan vektor hanya dapat menyimpan penyematan vektor yang menggunakan dimensi yang sama persis dengan yang Anda tentukan saat Anda menentukan kolom. Tidak ada batasan jumlah baris dalam tabel tempat Anda menyimpan sematan vektor.

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 embedding 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 kesamaan 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 Anda memiliki beberapa tabel dengan penyematan vektor di instance, Anda dapat membuat indeks vektor untuk setiap tabel tersebut.
  • Jika Anda 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 embedding 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 pengolahan 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 replika 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 embedding 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 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 indeks:

  • Pohon indeks. Model 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 harus membangun ulang indeks.

Operasi DDL yang tidak didukung pada tabel dengan indeks vektor

Operasi bahasa definisi data (DDL) berikut tidak didukung untuk tabel yang memiliki indeks vektor.

  • Operasi pengubahan tabel yang memerlukan algoritma penyalinan
  • Operasi pengubahan tabel yang mengharuskan tabel dibangun ulang
  • Menghapus atau mengubah kunci utama
  • Memindahkan tabel ke tablespace umum

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 akan dibandingkan dengan vektor dalam set data Anda. Fungsi jarak menghitung jarak antar-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 yang lebih disukai jika Anda memerlukan hasil yang tepat atau ingin menambahkan pemfilteran selektif. Penelusuran KNN melakukan komputasi 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 perhatian. 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 recall 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 pascaproses hasil penelusuran Anda. Jika ingin memiliki kontrol yang lebih besar atas jumlah hasil yang ditampilkan saat Anda melakukan penelusuran ANN dengan filter, Anda dapat menggunakan pemfilteran iteratif. Dengan pemfilteran iteratif, kueri penelusuran Anda dapat menampilkan lebih banyak hasil penelusuran dengan memindai lebih banyak indeks vektor hingga jumlah tetangga yang diinginkan ditemukan.

Anda dapat mengaktifkan pemfilteran iteratif untuk kueri penelusuran dengan menyetel tanda cloudsql_vector_iterative_filtering ke ON pada tingkat sesi untuk setiap klien atau tingkat global untuk semua klien yang terhubung ke instance.

Untuk mengetahui informasi selengkapnya, lihat Menelusuri approximate nearest neighbor (ANN).

Ada beberapa kasus ketika penelusuran ANN beralih ke penelusuran KNN. Untuk mengetahui informasi selengkapnya, lihat Memeriksa status penggantian untuk penelusuran ANN.

Perbedaan dukungan vektor di versi Cloud SQL untuk MySQL

Cloud SQL untuk MySQL memperkenalkan dukungan untuk penelusuran vektor di versi 8.0.36 dan yang lebih baru. Mulai dari Cloud SQL untuk MySQL versi 9.7, Cloud SQL telah mengubah kemampuan penelusuran vektor tertentu agar terintegrasi lebih baik dengan dukungan vektor dan fungsi penyimpanan yang dikembangkan komunitas yang diperkenalkan di MySQL 9.0 yang dikembangkan komunitas.

Tabel berikut memberikan perbandingan versi Cloud SQL untuk MySQL yang menunjukkan bagaimana perbedaan versi dapat memengaruhi penggunaan penelusuran vektor di Cloud untuk MySQL.

Area dukungan Cloud SQL untuk MySQL 8.4 dan yang lebih lama Cloud SQL untuk MySQL 9.7 dan yang lebih baru
Pengaktifan vektor Untuk menambahkan sematan vektor ke database MySQL dan menggunakan penelusuran vektor, Anda harus menyetel flag cloudsql_vector ke on untuk instance Cloud SQL Anda. Jika Anda ingin membuat indeks vektor dan melakukan penelusuran ANN, Anda harus menetapkan flag cloudsql_vector ke on.
Kolom penyematan vektor dalam tabel Tabel hanya dapat memiliki satu kolom penyematan vektor. Anda dibatasi hanya satu kolom sematan vektor per tabel hanya jika Anda membuat indeks pada tabel. Jika Anda tidak membuat indeks pada tabel, tabel dapat memiliki beberapa kolom sematan vektor.
Penggunaan COMMENT dan CONSTRAINT untuk mengidentifikasi kolom penyematan vektor Untuk membedakan kolom penyematan vektor dari kolom lainnya, Cloud SQL menambahkan anotasi COMMENT khusus dan aturan CONSTRAINT ke kolom tersebut. Batasan diperlukan untuk validasi input, dan anotasi kolom sematan vektor terlihat sebagai komentar. Anda tidak dapat mengubah atau menghapus komentar atau batasan. Anotasi COMMENT dan aturan CONSTRAINT tidak lagi digunakan untuk mengidentifikasi kolom penyematan vektor di Cloud SQL untuk MySQL 9.7.
Batas dimensi Penyematan vektor dibatasi hingga 16.000 dimensi tanpa nilai default. Embedding vektor dibatasi hingga 16.383 dimensi dengan nilai default 2.048.
Format penyimpanan vektor Format VARBINARY Format penyimpanan berbasis komunitas
Sintaksis untuk mendeklarasikan jenis data vektor VECTOR(VECTOR_DIMENSIONS)
USING VARBINARY
VECTOR(VECTOR_DIMENSIONS)
[USING VARBINARY]
Perbedaan fungsi konversi Output fungsi vector_to_string dicetak sebagai seluruh nilai. Output fungsi vector_to_string dirender dalam notasi ilmiah, yang merupakan standar komunitas.

Batasan

Berikut adalah batasan yang berlaku untuk semua versi Cloud SQL yang mendukung vektor:

  • Hanya boleh ada satu indeks vektor per tabel.
  • 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 operasi DDL yang tidak dapat Anda lakukan. Untuk mengetahui informasi selengkapnya, lihat Operasi DDL yang tidak didukung pada tabel dengan indeks vektor.

Batasan berikut berlaku 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.

Langkah berikutnya