pgvectorとは
PostgreSQLにベクトル型と類似検索機能を追加する、オープンソースの拡張機能
ひとことで言うと
PostgreSQLをベクトル検索に対応させる、オープンソースの拡張機能。
概要
pgvectorは、PostgreSQLへベクトル型データと類似検索機能を追加するオープンソースの拡張機能。 既存のPostgreSQLデータベースにインストールするだけで、リレーショナルデータとベクトルデータを同一のデータベース内で扱えるようになる。専用のベクトルデータベースを別途構築せずに、既存のPostgreSQL運用基盤の中でベクトル検索したい場合に利用される。
背景
多くのアプリケーションは既にPostgreSQLを運用基盤として利用しており、ベクトル検索のためだけに別のデータベースを追加導入する負担を避けたいというニーズがあった。pgvectorは、既存のPostgreSQL環境にベクトル型と類似検索機能を追加する拡張機能として開発された。
歴史
2021年: Andrew Kaneが、PostgreSQL拡張機能「pgvector」を公開。
コード例
pgvectorによるベクトル検索(概念例)
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE items (
id bigserial PRIMARY KEY,
embedding vector(3)
);
INSERT INTO items (embedding) VALUES ('[0.1, 0.2, 0.3]');
SELECT id, embedding <-> '[0.1, 0.2, 0.3]' AS distance
FROM items
ORDER BY distance
LIMIT 3;利点
- 既存のPostgreSQL運用基盤やツールチェーンをそのまま活用できる
- リレーショナルデータとベクトルデータを同一データベース内で一貫して扱える
- SQLの中でベクトル検索とリレーショナルなクエリ(JOIN・WHERE等)を組み合わせて記述できる
欠点
- 専用のベクトルデータベースと比べ、超大規模なベクトル数における検索性能・スケーラビリティには制約が生じることもある
- PostgreSQL自体の運用・チューニングの知識が前提となる
- 拡張機能を有効化できるホスティング環境かどうかを事前に確認する必要がある
比較
- ベクトルデータベース — pgvectorは、専用のベクトルデータベースを別に構築せずPostgreSQL上でベクトル検索するための拡張機能
- Pinecone — pgvectorが既存のPostgreSQL上でベクトル検索する拡張機能であるのに対し、Pineconeは専用のフルマネージドベクトル検索サービスという違いがある
- Weaviate — pgvectorがリレーショナルデータベースの拡張として提供されるのに対し、Weaviateはベクトル検索に特化した専用のデータベースという違いがある
関連用語
よくある質問
pgvectorはどのように導入する?
PostgreSQLに拡張機能としてインストールし、CREATE EXTENSION vector; を実行することで、ベクトル型のカラムと類似検索用の演算子が利用可能になる。
pgvectorは大規模なベクトル検索に向いている?
インデックス(HNSW等)を使えば相応の規模まで対応できるが、超大規模なベクトル数における検索性能・スケーラビリティでは、専用のベクトルデータベースに軍配が上がることもある。
参考文献
- GitHubpgvector/pgvector