All Products
Search
Document Center

ApsaraDB RDS:Panduan pengguna pgvector

Last Updated:Jun 22, 2026

ApsaraDB RDS for PostgreSQL mendukung ekstensi pgvector, yang menyediakan tipe data baru untuk menyimpan vektor dan memungkinkan pencarian kemiripan yang efisien pada vektor berdimensi tinggi.

Latar Belakang

ApsaraDB RDS for PostgreSQL mendukung ekstensi pgvector untuk menyimpan data vektor dan melakukan pencarian kemiripan vektor, sehingga menyediakan fondasi data bagi aplikasi berbasis AI.

Ekstensi pgvector menyediakan fitur-fitur utama berikut:

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

  • Mendukung pencarian tetangga terdekat (nearest neighbor/NN) eksak dan perkiraan (approximate nearest neighbor/ANN). Anda dapat menghitung kemiripan menggunakan Jarak Euclidean (L2), cosine similarity, atau inner product. Untuk mempercepat kueri, Anda dapat membuat indeks HNSW atau IVFFlat. Ekstensi ini juga mendukung perkalian elemen per elemen antar vektor, fungsi jarak L1, dan agregasi sum.

  • Mendukung vektor hingga 16.000 dimensi dan memungkinkan pembuatan indeks untuk vektor hingga 2.000 dimensi.

Konsep utama dan cara kerjanya

Penyematan (Embedding)

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

Proses ini mencerminkan hubungan semantik dan sintaksis antar kata dalam ruang vektor.

Catatan

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

Cara kerja

  1. Penyematan mengonversi informasi seperti teks, gambar, dan audio menjadi data vektor dengan merepresentasikan fitur-fiturnya dalam beberapa dimensi.

  2. Ekstensi pgvector menyediakan tipe data vector untuk menyimpan data vektor di ApsaraDB RDS for PostgreSQL.

  3. pgvector dapat melakukan pencarian tetangga terdekat eksak dan perkiraan pada data vektor yang tersimpan.

Sebagai contoh, untuk menyimpan tiga objek (apel, pisang, kucing) dalam database dan menghitung kemiripannya menggunakan pgvector, ikuti langkah-langkah berikut:

  1. Gunakan model penyematan untuk mengonversi objek-objek tersebut menjadi vektor. Untuk penyematan dua dimensi, hasilnya mungkin tampak seperti berikut:

    Apple: embedding[1,1]
    Banana: embedding[1.2,0.8]
    Cat: embedding[6,0.4]
  2. Simpan vektor hasil tersebut dalam database. Untuk detail cara menyimpan data vektor, lihat bagian Contoh.

    Dalam bidang dua dimensi, distribusi objek-objek tersebut adalah sebagai berikut:

    image..png

Karena apel dan pisang sama-sama buah, vektornya lebih berdekatan dalam sistem koordinat 2D. Kucing, sebagai jenis objek yang berbeda, berada lebih jauh.

Anda dapat memperbaiki atribut suatu objek lebih lanjut, seperti warna, asal, dan rasa untuk buah. Setiap atribut menambahkan satu dimensi. Dimensi yang lebih banyak memungkinkan klasifikasi yang lebih rinci, yang dapat menghasilkan hasil pencarian lebih akurat.

Kasus penggunaan

  • Menyimpan data vektor.

  • Menjalankan pencarian kemiripan vektor.

Prasyarat

Instans ApsaraDB RDS for PostgreSQL Anda harus memenuhi persyaratan berikut:

  • Instans menjalankan PostgreSQL versi 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 meningkatkan versi mesin utama atau memperbarui versi mesin minor, lihat Upgrade the major engine version atau Update the minor engine version.

  • Anda memiliki Akun istimewa untuk instans ApsaraDB RDS for PostgreSQL Anda. Untuk informasi selengkapnya, lihat Create an account.

Manajemen ekstensi

Konsol RDS

  • Instal ekstensi

    1. Masuk ke Konsol ApsaraDB RDS dan buka halaman Instances. Di bilah navigasi atas, pilih Wilayah tempat instans Anda berada, lalu klik ID instans tersebut.

    2. Di panel navigasi sebelah kiri, klik Plug-ins.

    3. Di tab Extension Marketplace, temukan ekstensi vector dan klik Install.

      Anda juga dapat mencari plugin vector di halaman Extension Management, lalu klik Install di kolom Actions.

    4. Pada kotak dialog yang muncul, pilih database dan Akun istimewa yang dituju, lalu klik Install.

      Ekstensi berhasil diinstal ketika status instans berubah dari Maintaining Instance menjadi Running.

  • Perbarui atau uninstal ekstensi

    • Di halaman Extension Management, klik tab Installed Extensions. Temukan ekstensi yang dituju dan klik Upgrade Version di kolom Actions untuk meningkatkan ekstensi ke versi terbaru.

      Catatan

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

    • Di halaman Extension Management, klik tab Installed Extensions. Temukan ekstensi yang dituju dan klik Uninstall di kolom Actions.

Perintah SQL

Penting

Hanya Akun istimewa yang dapat menjalankan perintah berikut. Untuk informasi selengkapnya tentang cara membuat Akun istimewa, lihat Create an account.

  • Buat ekstensi

    CREATE EXTENSION IF NOT EXISTS vector;
  • Hapus ekstensi

    DROP EXTENSION vector;
  • Perbarui ekstensi

    ALTER EXTENSION vector UPDATE [ TO new_version ]
    Catatan

    new_version menentukan versi pgvector. Untuk informasi tentang versi terbaru dan fitur-fiturnya, lihat dokumentasi resmi pgvector.

Contoh

Contoh berikut menunjukkan cara menggunakan ekstensi pgvector. Untuk penggunaan lanjutan, lihat dokumentasi resmi pgvector.

  1. 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

    Dalam contoh ini, digunakan vektor 2 dimensi. pgvector mendukung 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 cosine similarity <=> untuk menghitung kemiripan pisang terhadap apel dan kucing.

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

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

    Hasil contoh:

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

    Pada hasil di atas:

    • Hasil untuk Banana adalah 0, yang menunjukkan kecocokan sempurna (jarak nol).

    • Hasil untuk Apple adalah 0,019, yang menunjukkan bahwa Apple sangat mirip dengan Banana.

    • Hasil untuk Cat adalah 0,133, yang menunjukkan bahwa Cat tidak terlalu mirip dengan Banana.

    Catatan

    Dalam aplikasi dunia nyata, Anda dapat menetapkan ambang batas kemiripan untuk menyaring hasil dengan kemiripan rendah.

  4. Untuk meningkatkan performa pencarian kemiripan, buat indeks pada data vektor Anda. Contoh berikut menunjukkan cara membuat indeks untuk kolom embedding.

    Indeks HNSW

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

    Parameter:

    Parameter

    Deskripsi

    m

    Jumlah maksimum koneksi untuk setiap node pada setiap lapisan graf HNSW.

    Nilai yang lebih besar membuat graf lebih padat, yang biasanya meningkatkan tingkat recall tetapi memperpanjang waktu pengindeksan dan kueri.

    ef_construction

    Ukuran daftar kandidat dinamis selama pembuatan indeks. Parameter ini menentukan berapa banyak node kandidat yang dipertahankan untuk memilih koneksi optimal.

    Nilai yang lebih besar dapat meningkatkan tingkat recall tetapi memperpanjang waktu pengindeksan.

    Indeks IVF

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

    Parameter:

    Parameter/Nilai

    Deskripsi

    items

    Tabel yang berisi kolom yang akan diindeks.

    embedding

    Kolom vektor yang akan diindeks.

    vector_cosine_ops

    Kelas operator yang ditentukan untuk indeks vektor.

    • Pencarian kemiripan cosine menggunakan vector_cosine_ops.

    • Jarak Euclidean menggunakan vector_l2_ops.

    • Untuk kemiripan inner product, gunakan vector_ip_ops.

    lists = 100

    Parameter lists menentukan jumlah daftar untuk mempartisi dataset. Nilai yang lebih besar berarti dataset dibagi lebih banyak, sehingga setiap subset menjadi lebih kecil dan kueri indeks lebih cepat. Namun, seiring peningkatan nilai lists, tingkat recall kueri mungkin menurun.

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

    • Membangun 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 perlu menetapkan nilai maintenance_work_mem yang lebih besar untuk membangun indeks data vektor. Namun, menetapkan nilai ini terlalu tinggi berisiko menyebabkan OOM pada instans. Untuk informasi selengkapnya, lihat Set instance parameters.

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

    Anda dapat menggunakan salah satu metode berikut untuk menetapkan parameter ivfflat.probes. Parameter ini menentukan jumlah daftar yang akan dicari dalam indeks. Dengan meningkatkan nilai ivfflat.probes, Anda mencari lebih banyak daftar, yang dapat meningkatkan tingkat recall hasil kueri Anda.

    • Tingkat sesi

      SET ivfflat.probes = 10;
    • Tingkat transaksi

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

    Nilai ivfflat.probes yang lebih besar menghasilkan tingkat recall kueri lebih tinggi tetapi kecepatan kueri lebih lambat. Sesuaikan nilai lists dan ivfflat.probes berdasarkan kebutuhan aplikasi dan karakteristik dataset Anda untuk mencapai keseimbangan terbaik antara performa kueri dan tingkat recall.

    Catatan

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

Data performa

Saat membuat indeks untuk data vektor, Anda harus menyeimbangkan kecepatan kueri dan tingkat recall berdasarkan volume data dan skenario aplikasi Anda. Untuk pengujian performa terkait, lihat topik-topik berikut:

Praktik terbaik