Mengelola indeks vektor

Halaman ini menjelaskan opsi untuk mempertahankan indeks vektor Anda. Memelihara indeks membantu memastikan bahwa indeks beradaptasi dengan perubahan data yang dapat memengaruhi akurasi hasil penelusuran Anda. Gunakan strategi di halaman ini untuk menghindari penurunan performa kueri saat set data Anda bertambah.

Sebelum memulai

  • Instal atau update ekstensi vector dan alloydb_scann.

    1. Jika ekstensi vector dan alloydb_scann belum diinstal, instal versi ekstensi terbaru.

      CREATE EXTENSION IF NOT EXISTS vector;
      CREATE EXTENSION IF NOT EXISTS alloydb_scann;
      
    2. Jika ekstensi vector dan alloydb_scann sudah diinstal, upgrade ekstensi ke versi terbaru.

      ALTER EXTENSION vector UPDATE;
      ALTER EXTENSION alloydb_scann UPDATE;
      

Melihat metrik indeks vektor

Jika tabel Anda sering diperbarui atau disisipkan, sebaiknya indeks ulang indeks ScaNN yang ada secara berkala untuk meningkatkan akurasi perolehan kembali indeks Anda. Anda dapat memantau metrik indeks untuk melihat perubahan dalam distribusi vektor atau mutasi vektor sejak indeks dibuat, lalu mengindeks ulang sesuai kebutuhan.

Untuk mengetahui informasi selengkapnya tentang metrik, lihat Melihat metrik indeks vektor.

Memelihara indeks secara otomatis

Anda dapat menggunakan tanda database scann.enable_preview_features (GUC) bersama dengan parameter auto_maintenance tingkat indeks saat membuat indeks ScaNN. Penggunaan setelan ini secara bersamaan memungkinkan AlloyDB mengelola indeks secara inkremental sehingga saat set data Anda bertambah, AlloyDB akan memisahkan partisi pencilan besar. Dengan membagi partisi, AlloyDB mencoba memberikan QPS dan hasil penelusuran yang lebih baik.

Setiap pembaruan yang dilakukan pada indeks sebagai hasil dari pemeliharaan otomatis bersifat permanen hingga AlloyDB memperbarui indeks lagi.

Untuk mengaktifkan AlloyDB mempertahankan indeks secara otomatis, aktifkan tanda scann.enable_preview_features:

gcloud alloydb instances update INSTANCE_ID \
     --database-flags scann.enable_preview_features=on \
     --region=REGION_ID \
     --cluster=CLUSTER_ID \
     --project=PROJECT_ID

Ganti kode berikut:

  • INSTANCE_ID: ID instance.
  • REGION_ID: Region tempat instance ditempatkan—misalnya, us-central1.
  • CLUSTER_ID: ID cluster tempat instance ditempatkan.
  • PROJECT_ID: ID project tempat cluster ditempatkan.

Setelah mengaktifkan flag scann.enable_preview_features, Anda dapat mengaktifkan pemeliharaan otomatis untuk indeks, atau Anda dapat mengaktifkan fungsi scann_index_maintenance untuk memanggil pemeliharaan secara manual.

Mengaktifkan pemeliharaan otomatis selama pembuatan indeks

Untuk membuat indeks ScaNN dengan pemeliharaan otomatis diaktifkan, jalankan contoh perintah berikut:

CREATE INDEX INDEX_NAME ON TABLE
  USING scann (EMBEDDING_COLUMN DISTANCE_FUNCTION)
  WITH (num_leaves=NUM_LEAVES_VALUE, auto_maintenance=on);

Ganti kode berikut:

  • INDEX_NAME: nama indeks yang ingin Anda buat—misalnya, my-scann-index. Nama indeks dibagikan di seluruh database Anda. Pastikan setiap nama indeks unik untuk setiap tabel dalam database Anda.

  • TABLE: tabel yang akan ditambahkan indeksnya.

  • EMBEDDING_COLUMN: kolom yang menyimpan data vector.

  • DISTANCE_FUNCTION: fungsi jarak yang akan digunakan dengan indeks ini. Pilih salah satu opsi berikut:

    • Jarak L2: l2

    • Perkalian titik: dot_product

    • Jarak kosinus: cosine

  • NUM_LEAVES_VALUE: jumlah partisi yang akan diterapkan ke indeks ini. Tetapkan ke nilai apa pun antara 1 hingga 1048576. Untuk mengetahui informasi selengkapnya tentang cara menentukan nilai ini, lihat Menyesuaikan indeks ScaNN.

Mengelola daun untuk menelusuri partisi yang dibagi secara otomatis

Jika Anda telah mengaktifkan pemeliharaan indeks otomatis, AlloyDB akan otomatis membagi partisi saat nilai minimum num_leaves tercapai. Seiring bertambahnya jumlah partisi karena pemisahan ini, Anda harus menyesuaikan jumlah leaf yang akan ditelusuri untuk mempertahankan performa yang optimal.

Untuk mengelola jumlah daun yang akan dicari secara otomatis, gunakan pct_leaves_to_search. Parameter ini memungkinkan Anda menentukan persentase jumlah partisi yang akan ditelusuri. Jika Anda memperkirakan set data akan bertambah secara signifikan, maka mulailah dengan menetapkan nilai pct_leaves_to_search ke 1. Parameter ini dinonaktifkan secara default.

Tetapkan nilai ini ke persentase jumlah partisi saat ini. Misalnya, untuk menelusuri 1% dari jumlah partisi saat ini, tetapkan nilai ini ke 1.

Anda dapat menyetel parameter ini ke nilai apa pun antara 0 hingga 100. Nilai defaultnya adalah 0, yang menonaktifkan parameter ini dan menggunakan scann.num_leaves_to_search untuk menghitung jumlah daun yang akan ditelusuri.

Untuk menyetel flag pct_leaves_to_search di database Anda, jalankan perintah berikut:

ALTER DATABASE DATABASE_NAME SET scann.pct_leaves_to_search = PERCENTAGE_LEAVES_TO_SEARCH;

Ganti kode berikut:

  • DATABASE_NAME: nama database.
  • PERCENTAGE_LEAVES_TO_SEARCH: persentase num_leaves yang akan ditelusuri.

Memanggil pemeliharaan secara manual

Jika Anda ingin memanggil pemeliharaan pada indeks tertentu sesuai permintaan, jalankan perintah berikut:

SELECT scann_index_maintenance('INDEX_NAME');

Membangun ulang indeks secara manual

Anda dapat membangun ulang indeks secara manual jika ingin membangun ulang indeks dengan konfigurasi yang Anda tentukan saat indeks dibuat.

Untuk membangun ulang indeks secara manual, jalankan perintah berikut:

REINDEX INDEX CONCURRENTLY INDEX_NAME;

Ganti INDEX_NAME dengan nama indeks yang ingin Anda bangun ulang—misalnya, my-scann-index. Nama indeks dibagikan di seluruh database Anda. Pastikan setiap nama indeks unik untuk setiap tabel dalam database Anda.

Untuk mengetahui informasi selengkapnya tentang pengindeksan ulang di PostgreSQL, lihat REINDEX.

Langkah berikutnya