全部产品
Search
文档中心

ApsaraDB RDS:Panduan Pengguna pgvector

更新时间:Dec 06, 2025

RDS for PostgreSQL mendukung ekstensi pgvector yang memungkinkan pencarian kemiripan vektor yang andal. Ekstensi ini menyediakan tipe data baru untuk mengambil data vektor berdimensi tinggi secara cepat dan mudah.

Latar Belakang

RDS for PostgreSQL mendukung ekstensi pgvector yang memungkinkan Anda menyimpan data vektor, melakukan pencarian kemiripan vektor, serta menyediakan dukungan data untuk produk AI.

Ekstensi pgvector menyediakan fitur-fitur berikut:

  • Mendukung tipe data vector untuk menyimpan dan mengkueri data vektor.

  • Mendukung pencarian nearest neighbor (ANN) eksak dan aproksimasi dengan berbagai ukuran jarak, seperti jarak L2 (Euclidean), cosine similarity, dan inner product. Untuk pembuatan indeks, ekstensi ini mendukung indeks HNSW, indeks IVFFlat paralel, perkalian vektor elemen per elemen, fungsi jarak L1, dan agregasi sum.

  • Mendukung pembuatan vektor hingga 16.000 dimensi dan pembuatan indeks pada vektor hingga 2.000 dimensi.

Konsep dan prinsip implementasi

Penyematan (Embedding)

Penyematan adalah proses pemetaan data berdimensi tinggi ke representasi berdimensi rendah. Dalam pembelajaran mesin dan pemrosesan bahasa alami, penyematan sering digunakan untuk merepresentasikan simbol atau objek diskret sebagai titik dalam ruang vektor kontinu.

Dalam pemrosesan bahasa alami, word embedding merupakan teknik umum yang memetakan kata-kata ke vektor bilangan real sehingga komputer dapat lebih memahami dan memproses teks. Teknik ini merepresentasikan hubungan semantik dan gramatikal antar kata dalam ruang vektor.

Catatan

Untuk informasi lebih lanjut, lihat dokumentasi resmi alat dan pustaka penyematan umum berikut:

Prinsip implementasi

  1. Penyematan mengonversi informasi dari sumber seperti teks, citra, audio, dan video menjadi data vektor multidimensi.

  2. Ekstensi pgvector menyediakan tipe data vector yang memungkinkan database RDS for PostgreSQL menyimpan data vektor.

  3. Ekstensi pgvector dapat melakukan pencarian nearest neighbor eksak dan aproksimasi pada data vektor yang tersimpan.

Asumsikan Anda perlu menyimpan tiga objek (apel, pisang, kucing) dalam database dan menggunakan pgvector untuk menghitung kemiripannya. Ikuti langkah-langkah berikut:

  1. Pertama, gunakan penyematan untuk mengonversi ketiga objek tersebut menjadi vektor. Contoh berikut menggunakan penyematan dua dimensi:

    Apple: embedding[1,1]
    Banana: embedding[1.2,0.8]
    Cat: embedding[6,0.4]
  2. Simpan data vektor dalam database. Untuk informasi lebih lanjut tentang cara menyimpan data vektor dua dimensi dalam database, lihat Contoh penggunaan.

    Dalam bidang dua dimensi, ketiga objek tersebut tersebar sebagai berikut:

    image..png

Apel dan pisang sama-sama buah, sehingga posisinya lebih dekat dalam ruang vektor. Kucing merupakan jenis objek yang berbeda, sehingga jaraknya lebih jauh.

Anda dapat memperhalus atribut buah lebih lanjut, seperti warna, asal, dan rasa. Setiap atribut merepresentasikan satu dimensi. Penggunaan lebih banyak dimensi memungkinkan klasifikasi yang lebih halus dan menghasilkan hasil pencarian yang lebih akurat.

Skenario

  • Menyimpan data vektor.

  • Menjalankan pencarian kemiripan vektor.

Prasyarat

Instans RDS for PostgreSQL harus memenuhi persyaratan berikut:

  • Instans menjalankan PostgreSQL versi utama 14 atau yang lebih baru.

  • Versi mesin minor instans adalah 20230430 atau yang lebih baru. Untuk instans yang menjalankan PostgreSQL 17, versi mesin minor harus 20241030 atau yang lebih baru.

    Catatan

    Untuk informasi lebih lanjut tentang cara meningkatkan versi utama atau memperbarui versi mesin minor, lihat Peningkatan versi mesin utama atau Pembaruan versi mesin minor.

  • Akun istimewa telah dibuat untuk instans RDS for PostgreSQL. Untuk informasi lebih lanjut, lihat Buat akun.

Kelola ekstensi

Kelola ekstensi di Konsol

  • Instal ekstensi

    1. Buka halaman instans RDS. Di bilah navigasi atas, pilih Wilayah tempat instans berada. Lalu, klik ID instans tersebut.

    2. Di panel navigasi sebelah kiri, klik Plug-in Management.

    3. Di tab Plug-in Marketplace, gulir ke bawah untuk menemukan ekstensi vector, lalu klik Install.

      image

      Atau, di tab Manage Plug-ins, cari ekstensi vector dan klik Install di kolom Actions.

    4. Pada kotak dialog yang muncul, pilih database dan akun istimewa tujuan, lalu klik Install.

      Saat status instans berubah dari Maintaining menjadi Running, ekstensi telah berhasil diinstal.

  • Perbarui dan uninstal ekstensi

    • Di tab Installed Plug-ins pada halaman Manage Plug-ins, temukan ekstensi target dan klik Upgrade Version di kolom Actions.

      Catatan

      Jika tombol Upgrade Version tidak ditampilkan di kolom Actions, berarti ekstensi sudah dalam versi terbaru.

    • Di tab Installed Plug-ins pada halaman Manage Plug-ins, temukan ekstensi target dan klik Uninstall di kolom Actions.

Kelola ekstensi menggunakan perintah SQL

Penting

Hanya akun istimewa yang dapat menjalankan perintah berikut. Untuk membuat akun istimewa, lihat Buat akun.

  • Buat ekstensi

    CREATE EXTENSION IF NOT EXISTS vector;
  • Hapus ekstensi

    DROP EXTENSION vector;
  • Perbarui ekstensi

    ALTER EXTENSION vector UPDATE [ TO new_version ]
    Catatan

    Tetapkan new_version ke versi target pgvector. Untuk informasi lebih lanjut tentang versi terbaru dan fitur pgvector, lihat dokumentasi resmi pgvector.

Contoh penggunaan

Bagian berikut memberikan contoh sederhana cara menggunakan pgvector. Untuk informasi lebih lanjut, lihat dokumentasi resmi pgvector.

  1. Di database target, gunakan akun dengan izin pembuatan tabel untuk membuat tabel bernama `items` guna menyimpan penyematan.

    CREATE TABLE items (
      id bigserial PRIMARY KEY, 
      item text, 
      embedding vector(2)
    );
    Catatan

    Contoh ini menggunakan vektor dua dimensi. Ekstensi pgvector mendukung pembuatan vektor hingga 16.000 dimensi.

  2. Masukkan data vektor ke dalam tabel.

    INSERT INTO
      items (item, embedding)
    VALUES
      ('Apple', '[1, 1]'),
      ('Banana', '[1.2, 0.8]'),
      ('Cat', '[6, 0.4]');
  3. Gunakan operator jarak cosine <=> untuk menghitung jarak antara pisang dan apel, serta antara pisang dan kucing.

    SELECT
      item,
      embedding <=> '[1.2, 0.8]' AS cosine_distance
    FROM
      items
    ORDER BY
      cosine_distance;
    Catatan
    • Pada contoh ini, operator <=> secara langsung menghitung jarak cosine. Semakin kecil jaraknya, semakin tinggi kemiripannya.

    • Anda juga dapat menggunakan operator jarak L2 <-> atau operator inner product <#> untuk menghitung kemiripan.

    Hasil contoh:

     item |  cosine_distance
    ------+----------------------
     Banana  |                    0
     Apple  | 0.019419362524530137
     Cat    | 0.13289443670962842

    Pada hasil contoh:

    • Hasil untuk pisang adalah 0. Ini menunjukkan kecocokan sempurna (jarak = 0).

    • Hasil untuk apel adalah 0,019. Ini menunjukkan bahwa apel sangat dekat dengan pisang dan memiliki kemiripan tinggi.

    • Hasil untuk kucing adalah 0,133. Ini menunjukkan bahwa kucing jauh dari pisang dan memiliki kemiripan rendah.

    Catatan

    Anda dapat menetapkan ambang batas kemiripan yang sesuai dalam aplikasi Anda untuk mengecualikan hasil dengan kemiripan rendah.

  4. Untuk meningkatkan performa kueri kemiripan, pgvector mendukung pembuatan indeks pada data vektor. Jalankan pernyataan berikut untuk membuat indeks pada bidang embedding.

    Buat indeks HNSW

    CREATE INDEX ON items USING hnsw (embedding vector_cosine_ops) WITH (m = 16, ef_construction = 64);

    Deskripsi parameter:

    Parameter

    Deskripsi

    m

    Jumlah maksimum tetangga untuk setiap node di tiap lapisan saat membangun indeks HNSW.

    Nilai yang lebih besar meningkatkan kerapatan graf, yang biasanya menghasilkan tingkat recall lebih tinggi. Namun, hal ini juga meningkatkan waktu yang diperlukan untuk pembuatan indeks dan kueri.

    ef_construction

    Ukuran set kandidat saat membangun indeks HNSW. Ini adalah jumlah node kandidat yang dipertahankan selama proses pencarian untuk memilih koneksi optimal.

    Nilai yang lebih besar biasanya menghasilkan tingkat recall lebih tinggi, tetapi juga meningkatkan waktu yang diperlukan untuk pembuatan indeks dan kueri.

    Buat indeks IVF

    CREATE INDEX ON items USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100);

    Deskripsi parameter:

    Parameter/Nilai

    Deskripsi

    items

    Nama tabel tempat indeks ditambahkan.

    embedding

    Nama kolom tempat indeks ditambahkan.

    vector_cosine_ops

    Metode akses yang ditentukan dalam metode indeks vektor.

    • Untuk pencarian cosine similarity, gunakan vector_cosine_ops.

    • Untuk jarak L2, gunakan vector_l2_ops.

    • Untuk kemiripan inner product, gunakan vector_ip_ops.

    lists = 100

    Parameter lists menentukan jumlah daftar yang digunakan untuk membagi dataset. Nilai yang lebih besar berarti dataset dibagi lebih banyak, ukuran tiap subset relatif kecil, dan kecepatan kueri indeks lebih cepat. Namun, seiring peningkatan nilai lists, tingkat recall kueri mungkin menurun.

    Catatan
    • Tingkat recall adalah rasio jumlah sampel yang berhasil diambil atau diklasifikasikan terhadap total jumlah sampel relevan dalam tugas pengambilan informasi atau klasifikasi. Tingkat recall mengukur kemampuan sistem untuk menemukan semua sampel relevan dan merupakan metrik evaluasi penting.

    • Pembuatan indeks memerlukan memori dalam jumlah besar. Jika nilai parameter lists melebihi 2000, terjadi error ERROR: memory required is xxx MB, maintenance_work_mem is xxx MB. Anda harus menetapkan nilai maintenance_work_mem yang lebih besar untuk membuat indeks pada data vektor. Jika nilai ini terlalu besar, instans berisiko tinggi mengalami error kehabisan memori (OOM). Untuk informasi tentang cara menyetel parameter, lihat Setel parameter instans.

    • Anda harus menyesuaikan nilai parameter lists untuk menyeimbangkan kecepatan kueri dan tingkat recall sesuai kebutuhan aplikasi spesifik Anda.

    Anda dapat menggunakan salah satu dari dua metode berikut untuk menyetel parameter ivfflat.probes. Parameter ini menentukan jumlah daftar yang akan dicari dalam indeks. Peningkatan nilai ivfflat.probes meningkatkan tingkat recall kueri dengan mencari lebih banyak daftar.

    • Tingkat sesi

      SET ivfflat.probes = 10;
    • Tingkat transaksi

      BEGIN; SET LOCAL ivfflat.probes = 10; SELECT ... COMMIT;

    Nilai ivfflat.probes yang lebih besar meningkatkan tingkat recall kueri tetapi mengurangi kecepatan kueri. Anda mungkin perlu menyesuaikan nilai lists dan ivfflat.probes untuk mencapai performa kueri dan tingkat recall optimal berdasarkan kebutuhan aplikasi dan karakteristik dataset Anda.

    Catatan

    Jika nilai ivfflat.probes sama dengan nilai lists yang ditentukan saat indeks dibuat, kueri akan mengabaikan indeks vektor dan melakukan pemindaian tabel penuh, yang dapat menurunkan performa kueri.

Data performa

Saat membuat indeks untuk data vektor, Anda harus menyeimbangkan kecepatan kueri dan tingkat recall berdasarkan volume data dan skenario aplikasi Anda. Untuk informasi lebih lanjut tentang pengujian performa terkait, lihat:

Praktik terbaik