Halaman ini menjelaskan praktik terbaik pengindeksan vektor yang mengoptimalkan indeks vektor dan meningkatkan hasil kueri tetangga terdekat (ANN) perkiraan.
Menyesuaikan opsi penelusuran vektor
Jika Anda tidak menentukan opsi indeks vektor, Spanner akan mencoba memilih opsi yang dioptimalkan secara otomatis. Untuk pengguna tingkat lanjut yang ingin menyesuaikan opsi indeks vektor untuk workload tertentu, Anda dapat menyetel dan menyesuaikan nilai ini dengan membuat indeks vektor baru dan menyetel
index_option_list
dalam pernyataan CREATE VECTOR INDEX. Nilai paling optimal untuk opsi indeks vektor Anda bergantung pada kasus penggunaan, set data vektor, dan vektor kueri Anda. Anda mungkin perlu melakukan penyesuaian berulang untuk menemukan nilai terbaik
untuk workload tertentu.
Berikut beberapa panduan berguna yang harus diikuti saat memilih nilai yang sesuai:
tree_depth(tingkat hierarki): Jika tabel yang Anda indeks memiliki kurang dari 10 juta baris, gunakantree_depth2. Jika tidak,tree_depthdari3mendukung tabel hingga sekitar 10 miliar baris. Jika tidak ditentukan, Spanner akan otomatis menentukan nilai untuktree_depth.num_leaves: Sebaiknya targetkan 200-1.000 baris per leaf. Nilainum_leavesyang lebih besar akan meningkatkan waktu pembuatan indeks vektor, tetapi dapat mengurangi biaya kueri untuk perolehan target tertentu. Namun, nilainum_leavesyang terlalu besar dapat menyebabkan biaya kueri meningkat lagi karena overhead yang terkait dengan penelusuran banyak cluster leaf yang sangat kecil. Jika tidak ditentukan, Spanner akan otomatis menentukan nilai untuknum_leaves.num_branches: Opsi ini hanya berlaku jikatree_depthadalah 3. Sebaiknya targetkan 50-500 daun per cabang, dannum_branchesharus kurang darinum_leaves. Nilainum_branchesyang lebih besar akan meningkatkan waktu pembuatan indeks vektor, tetapi dapat mengurangi biaya kueri untuk perolehan target tertentu. Namun, nilainum_branchesyang terlalu besar dapat menyebabkan biaya kueri meningkat lagi karena overhead yang terkait dengan penelusuran banyak cluster daun yang sangat kecil. Jika tidak ditentukan, Spanner akan otomatis menentukan nilai untuknum_branches.num_leaves_to_search: Opsi ini menentukan jumlah node daun indeks yang ditelusuri. Meningkatkannum_leaves_to_searchakan meningkatkan perolehan, tetapi juga meningkatkan latensi dan biaya. Sebaiknya gunakan angka yang 1% dari total jumlah daun yang ditentukan dalam pernyataanCREATE VECTOR INDEXsebagai nilai untuknum_leaves_to_search. Jika Anda menggunakan klausa filter, tingkatkan nilai ini untuk memperluas penelusuran.
Jika perolehan yang dapat diterima tercapai, tetapi biaya pembuatan kueri terlalu tinggi, sehingga menghasilkan QPS maksimum yang rendah, coba tingkatkan num_leaves dengan mengikuti langkah-langkah berikut:
- Tetapkan
num_leaveske beberapa kelipatankdari nilai aslinya (misalnya,2 * (table_row_count / 1000)). - Tetapkan
num_leaves_to_searchagar sama dengan kelipatan k dari nilai aslinya. - Lakukan eksperimen dengan mengurangi
num_leaves_to_searchuntuk meningkatkan biaya dan QPS sambil mempertahankan perolehan.
Menentukan nilai opsi penelusuran vektor
Untuk menentukan parameter tree_depth, num_leaves, dan num_branches
yang digunakan Spanner untuk indeks vektor, kueri tampilan
INFORMATION_SCHEMA.INDEX_OPTIONS. Nilai parameter mungkin sedikit berbeda dari nilai yang Anda tentukan secara eksplisit selama pembuatan indeks karena Spanner terkadang menyesuaikannya agar lebih sesuai dengan data Anda.
Jika Anda tidak menentukan parameter ini, tampilan INFORMATION_SCHEMA.INDEX_OPTIONS akan menampilkan nilai yang dipilih Spanner.
Jalankan kueri ini untuk menampilkan nilai parameter:
SELECT
opt.option_name,
opt.option_type,
opt.option_value
FROM
INFORMATION_SCHEMA.INDEX_OPTIONS AS opt
WHERE
opt.index_name = @vector_index_name;
Kueri menampilkan baris yang mencakup option_name: system_optimized_tree_depth,
system_optimized_num_leaves, dan system_optimized_num_branches, yang
mencerminkan parameter yang digunakan oleh indeks.
Meningkatkan perolehan
Untuk meningkatkan perolehan, pertimbangkan untuk menyesuaikan nilai num_leaves_to_search atau
membangun ulang indeks vektor Anda.
Menaikkan nilai num_leaves_to_search
Jika nilai num_leaves_to_search terlalu kecil, Anda mungkin akan kesulitan menemukan tetangga terdekat untuk beberapa vektor kueri. Membuat indeks vektor baru dengan nilai num_leaves_to_search yang lebih tinggi dapat membantu meningkatkan perolehan dengan menelusuri lebih banyak daun. Kueri terbaru mungkin berisi lebih banyak vektor yang sulit ini.
Membangun ulang indeks vektor
Struktur pohon indeks vektor dioptimalkan untuk set data pada saat pembuatan, dan bersifat statis setelahnya. Oleh karena itu, jika vektor yang sangat berbeda ditambahkan setelah membuat indeks vektor awal, struktur hierarki mungkin menjadi kurang optimal, sehingga menyebabkan perolehan yang lebih buruk.
Untuk membangun ulang indeks vektor tanpa periode nonaktif:
- Buat indeks vektor baru pada kolom embedding yang sama dengan indeks vektor saat ini, dengan memperbarui parameter (misalnya,
OPTIONS) sebagaimana mestinya. Setelah pembuatan indeks selesai, Anda dapat mempertimbangkan untuk mengevaluasi indeks mana dari kedua indeks Anda yang berperforma lebih baik. Jika ya, lanjutkan ke langkah berikutnya. Jika tidak, lanjutkan dengan menghapus indeks vektor yang sudah tidak berlaku. Spanner secara otomatis memutuskan indeks mana yang akan digunakan dalam eksekusi kueri. Spanner menyediakan dua cara yang memungkinkan Anda menentukan indeks yang akan digunakan. Pilih salah satu metode berikut untuk mengevaluasi dan membandingkan indeks Anda:
a. Ubah aplikasi Anda: Anda dapat memperbarui beberapa subset kueri sehingga menggunakan hint
FORCE_INDEXuntuk menunjuk ke indeks baru guna memperbarui kueri penelusuran vektor. Hal ini memastikan bahwa kueri menggunakan indeks vektor baru. Dengan menggunakan metode ini, Anda mungkin perlu menyetel ulangnum_leaves_to_searchdalam kueri baru.b. Ubah skema Anda: Anda dapat menyetel opsi
disable_searchpada salah satu indeks vektor Anda. Jika disetel ketrue, Spanner akan menonaktifkan indeks vektor. Anda dapat melakukannya dengan menjalankan pernyataan perubahan skemaALTER VECTOR INDEX:ALTER VECTOR INDEX IncidentVectorIndex SET OPTIONS (disable_search=true);Metode ini mencegah Spanner menggunakan indeks vektor ini di database Anda. Jika Anda memiliki dua indeks dan menyetel opsi ini di indeks yang lebih lama, semua kueri akan menggunakan indeks baru setelah perubahan skema diterapkan. Jika Anda menggunakan petunjuk
FORCE_INDEXuntuk menentukan indeks vektor yang memiliki opsidisable_searchyang ditetapkan ketrue, kueri akan gagal.Hapus indeks vektor yang sudah tidak berlaku.
Langkah berikutnya
Pelajari lebih lanjut indeks vektor Spanner.
Pelajari lebih lanjut tetangga terdekat perkiraan Spanner.
Pelajari lebih lanjut fungsi GoogleSQL
APPROXIMATE_COSINE_DISTANCE(),APPROXIMATE_EUCLIDEAN_DISTANCE(),APPROXIMATE_DOT_PRODUCT().Pelajari lebih lanjut pernyataan
VECTOR INDEXGoogleSQL.