Halaman ini memberikan ringkasan konseptual tentang pemfilteran adaptif di AlloyDB AI, sebuah fitur yang dirancang untuk mengoptimalkan penelusuran vektor terfilter.
Apa yang dimaksud dengan pemfilteran adaptif?
Pemfilteran adaptif menganalisis pola kueri dan distribusi data selama eksekusi kueri untuk memilih strategi pemfilteran yang paling efisien secara dinamis, seperti pemfilteran inline atau pra-pemfilteran.
Pengoptimal kueri AlloyDB AI menggunakan analisis berbasis biaya untuk menentukan apakah pemfilteran inline atau pra-pemfilteran memberikan performa terbaik pada titik tertentu selama eksekusi kueri.
Jenis pengoptimalan ini mendukung penelusuran vektor terfilter AlloyDB AI, yang pemfilteran adaptifnya otomatis beralih antara penggunaan indeks vektor dan metadata, yang menghasilkan hasil yang efisien dan akurat tanpa intervensi manual.
Pengalihan dinamis antara strategi pemfilteran
Pemfilteran adaptif otomatis dan dinamis beralih antara strategi pemfilteran inline dan pra-pemfilteran selama eksekusi kueri berdasarkan pola kueri dan distribusi data real-time. Pengoptimal kueri AlloyDB AI menggunakan analisis berbasis biaya untuk menentukan strategi mana yang memberikan performa terbaik pada titik tertentu.
Dari inline ke pra-pemfilteran
Saat pengoptimal menentukan bahwa pra-pemfilteran lebih efisien, pemfilteran adaptif akan memicu pengalihan dari pemfilteran inline ke pra-pemfilteran selama eksekusi. Paket kueri akan berubah secara dinamis untuk mencerminkan hal ini.
Misalnya, paket dapat menampilkan Bitmap assisted pre-filtering di kolom Execution Strategy saat pengoptimal menentukan bahwa pra-pemfilteran lebih efisien pada titik tersebut dalam kueri. Perubahan dinamis ini terjadi saat sistem beradaptasi dengan data sebenarnya yang ditemui selama eksekusi kueri.
Limit (actual rows=10 loops=1)
-> Custom Scan (vector scan) on t1 (actual rows=10 loops=1)
Execution Strategy: Bitmap assisted pre-filtering
Order By: (vec_col <=> '[...]'::vector)
Limit: 10
-> Bitmap Index Scan on btree_idx (actual rows=10000 loops=1)
Index Cond: (int_col <= 100000000)
Saat menggunakan Execution Strategy: Bitmap assisted pre-filtering, Bitmap Index Scan terpisah akan memfilter set data besar terlebih dahulu. Jika pra-pemfilteran ini secara efektif mempersempit kandidat, indeks vektor tidak akan digunakan untuk penelusuran kemiripan vektor akhir.
Dari pra-pemfilteran ke pemfilteran inline
Pemfilteran adaptif juga dapat beralih secara dinamis dari pra-pemfilteran ke pemfilteran inline jika pengoptimal kueri AlloyDB AI menentukan bahwa pemfilteran inline lebih efisien untuk karakteristik kueri saat ini.
Dalam kasus seperti itu, paket kueri akan disesuaikan secara dinamis untuk mencerminkan pemrosesan data vektor yang lebih langsung tanpa langkah pra-pemfilteran eksplisit sebelum pemindaian vektor. Kemampuan beradaptasi ini membantu mencapai performa optimal saat distribusi data atau parameter kueri berubah selama runtime.
Misalnya, paket kueri menampilkan vector scan di kolom Execution Strategy saat pengoptimal menentukan bahwa strategi pemfilteran inline lebih efisien untuk kueri yang diberikan.
Limit (actual rows=10 loops=1)
-> Custom Scan (vector scan) on t1 (actual rows=10 loops=1)
Execution Strategy: Bitmap assisted vector Scan on scann_idx
Order By: (vec_col <=> '[...]'::vector)
Limit: 10
Num Requalifications: 0
Num filtered: 1000
-> Bitmap Index Scan on btree_idx (actual rows=10000 loops=1)
Index Cond: (int_col <= 100000000)
Dalam contoh ini, Execution Strategy menampilkan Bitmap assisted vector Scan on scann_idx, dengan Bitmap Index Scan yang mendasarinya di btree_idx. Hal ini menunjukkan bahwa penelusuran vektor menggunakan filter bitmap, yang dihasilkan oleh Bitmap Index Scan berdasarkan kondisi int_col <= 100000000. Custom Scan (vector scan) kemudian hanya memproses baris yang diidentifikasi oleh bitmap ini, yang mengintegrasikan pemfilteran langsung ke dalam proses pemindaian vektor.