The Scalable Nearest Neighbors (ScaNN) index in AlloyDB for PostgreSQL accelerates vector similarity queries while reducing memory usage through tree-quantization indexing. In tree-quantization techniques, indexes learn a search tree together with a quantization (or hashing) function. When you run a query, the search tree prunes the search space while quantization compresses the index size, speeding up similarity scoring between the query vector and your database vectors.
To achieve both a high query-per-second rate (QPS)
and a high recall with your nearest-neighbor queries, you must partition
the tree of your ScaNN index in a way that is most appropriate to your data
and your queries.
A common characteristic of the current generation of high-dimensional embedding models is they can still retain much of the information at much lower dimensionality, for example 90% of the information can be retained with only 20% of the embedding's dimensions. To help speed up such datasets, AlloyDB ScaNN will automatically perform dimension reduction using Principal Component Analysis (see scann.enable_pca below) on the indexed vectors which further reduces cpu & memory usage for the vector search. Because dimension reduction still causes minor recall loss in the index, AlloyDB ScaNN compensates through an initial ranking step with a larger number of PCA'ed vector candidates from the index then re-ranking them by the original vectors (see scann.pre_reordering_num_neighbors).