Want to Become a Sponsor? Contact Us Now!🎉

vector-database
Pgvector: 가벼운 노력으로 PostgreSQL을 벡터 데이터베이스로 변환하는 방법

Pgvector: 가벼운 노력으로 PostgreSQL을 벡터 데이터베이스로 변환하는 방법

Published on

만약 PostgreSQL을 사용하고 있고 아직 **pgvector(피지벡터)**에 대해 들어보지 못했다면, 혁신적인 기능을 놓치고 있습니다. PostgreSQL 데이터베이스를 고속으로 동작하게 만들어주는 pgvector은 효율적인 벡터 저장과 유사도 검색을 위한 궁극의 도구입니다. 이것은 그냥 추가 기능이 아니라 PostgreSQL과 완벽하게 통합되는 솔루션으로, PostgreSQL의 성능을 향상시킵니다.

하지만 왜 이것이 중요한지 궁금할 수 있습니다. 왜냐하면 현재의 데이터 중심 세계에서 대용량 벡터 집합을 효율적으로 저장하고 쿼리하는 능력은 기계 학습, 추천 시스템 및 다른 여러 응용 프로그램에 있어서 중요하기 때문입니다. pgvector는 이것을 가능하게끔 할 뿐만 아니라 효율성과 속도면에서도 적지 않은 성과를 보여줍니다.

PostgreSQL 사용자에게 꼭 필요한 pgvector의 이유

pgvector란 무엇인가요?

pgvector는 벡터를 저장하고 해당 벡터 내에서 유사도 검색을 수행하는 PostgreSQL 확장 기능입니다. 전통적인 PostgreSQL 데이터 유형과 달리 pgvector은 고차원 데이터에 최적화되어 있으므로 기계 학습 모델, 이미지 인식 및 자연 언어 처리 작업에 이상적입니다.

ℹ️

pgvector의 주요 기능:

  • 효율적인 벡터 저장: 고차원 벡터를 데이터 무결성을 손상시키지 않고 압축하는 기능을 제공합니다. 고차원 데이터는 저장 문제가 될 수 있기 때문에 이는 큰 활약을 이루는 기능입니다.

  • 다양한 거리 측정: 유클리드 거리, 코사인 거리 또는 맨하탄 거리와 작업하더라도 pgvector는 다양한 거리 측정 방법을 지원합니다. 이는 특정 사용 사례에 가장 적합한 거리 측정 방법을 선택할 수 있는 유연성을 제공합니다.

  • 원활한 통합: pgvector의 가장 큰 장점 중 하나는 PostgreSQL과 어떤 어려움 없이 원활하게 통합된다는 것입니다. 여러 데이터베이스 사이를 왔다갔다 해야 할 필요 없이, pgvector는 원래의 확장 기능으로 작동하여 PostgreSQL 내에서 복잡한 쿼리를 수행할 수 있게 해줍니다.

이제 숫자로 들어가 봅시다. pgvector를 사용하면 약 1800개의 쿼리(queries)를 초당 (QPS) 실행하면서 1백만 개의 OpenAI 임베딩(OpenAI embeddings)을 대략 91%의 정확도로 실행할 수 있습니다. 더 높은 정확도를 목표로 한다면, 약 670의 QPS로 staggering한 98%의 정확도를 달성할 수도 있습니다. 이러한 수치는 인상적일 뿐만 아니라 혁명적입니다.

pgvector의 성능은 높은 QPS와 정확도에 그치지 않습니다. 확장 가능성도 놀라울 정도로 뛰어납니다. 32G RAM을 가진 8-core ARM 또는 256G RAM을 가진 64-core ARM에서 실행 중인 경우, pgvector는 하드웨어 리소스를 최대한 활용하여 아름답게 확장됩니다.

pgvector의 실제 성능은 얼마나 될까요? (pgvector 벤치마크)

pgvector의 속도와 정확도 분석

벡터 검색에서 속도와 정확도를 원한다면, pgvector가 그 요구를 충족시켜줄 것입니다. 가장 최신 버전인 pgvector 0.4.0은 성능 측정을 위해 엄격한 테스트를 거쳤습니다. 세부 내용을 알아봅시다:

벤치마크 방법론

  • 테스트 실행기: 데이터 업로드, 인덱스 생성 및 쿼리 실행에는 Python 스크립트가 사용되었습니다.
  • 실행 시간: 각 테스트는 30-40분 동안 진행되었으며, 성능 측정을 위해 다양한 워크로드 수준을 포함했습니다.
  • RAM 프리워밍: 각 테스트 전에 10,000 ~ 50,000개의 웜업 쿼리가 실행되어 RAM 활용을 최적화했습니다.

테스트에 사용된 하드웨어

  • 2XL: 8-core ARM, 32 GB RAM
  • 4XL: 16-core ARM, 64 GB RAM
  • 8XL: 32-core ARM, 128 GB RAM
  • 12XL: 48-core ARM, 192 GB RAM
  • 16XL: 64-core ARM, 256 GB RAM

데이터셋

테스트에는 dbpedia-entities-openai-1M (opens in a new tab) 데이터셋을 사용했습니다. 이 데이터셋에는 1536개의 차원을 가진 1백만 개의 임베딩이 포함되어 있습니다. 이 데이터셋은 OpenAI를 사용하여 생성되며, 위키백과 기사를 기반으로 합니다.

성능 결과

  • 프로브 10으로 설정한 경우: pgvector는 정확도 0.91과 QPS (초당 쿼리 수) 380을 달성했습니다.
  • 프로브 40으로 설정한 경우: pgvector는 더욱 빠르지만 Qdrant와 거의 동일한 정확도를 유지했습니다. 정확도 0.98과 QPS 140으로, Qdrant의 결과에 버금가는 성능을 보였습니다.

데이터베이스 확장

pgvector의 성능은 데이터베이스의 크기와 예측 가능하게 확장됩니다. 예를 들어, 프로브 40으로 설정한 경우 4XL 인스턴스는 정확도 0.98과 QPS 270을 달성했습니다. 8XL 인스턴스는 정확도 0.98과 QPS 470을 달성하여 Qdrant의 결과를 능가했습니다.

pgvector의 벤치마크 결과

64-core, 256 GB 서버에서 pgvector는 버전 0.4.0에서 약 1800 QPS와 0.91 정확도를 달성했습니다. 이는 새로운 버전에서 더 나은 성능을 보일 것으로 기대할 수 있습니다.

pgvector가 상용 벡터 데이터베이스보다 뛰어난 이유

pgvector의 인상적인 벤치마크에 대해 알아본 후, Milvus와 같은 상업용 벡터 데이터베이스 솔루션과 비교할 때 어떻게 성능이 되는지 궁금할 수 있습니다. 자, 분석해 봅시다:

통합 용이성

  • Milvus: 별도의 서비스로 운영, 기술 스택을 복잡하게 만듭니다.
  • pgvector: PostgreSQL과 원활하게 통합, 기술 스택을 간소화합니다.

데이터 동기화

  • Milvus: 네이티브 통합이 없어 데이터 동기화 문제가 발생합니다.
  • pgvector: 네이티브 통합을 제공하여, 동기화 문제를 해결합니다.

성능 지표

  • Milvus: pgvector의 성능에는 미치지 못합니다.
  • pgvector: 1백만 개의 OpenAI 임베딩최대 1800 QPS로 다루며 91%의 정확도를 유지합니다.
지표Milvuspgvector
통합 복잡도높음낮음
데이터 동기화문제가 있는원활한
쿼리 속도 (QPS)낮음1800
정확도낮음91%

요약하자면, pgvector는 간결하고 효율적이며 높은 성능의 벡터 저장 및 검색 솔루션을 제공하는 명백한 승자입니다.

pgvector 성능 최적화 팁

  • Postgres 구성 조정: RAM 및 CPU 코어와 일치하는지 확인하세요.
  • 데이터베이스 미리 설정: 이전에 설명한 워밍업 기법을 사용하세요.
  • 적절한 거리 함수 선택: 벡터가 정규화된 경우, L2 또는 코사인 거리보다 내적을 선호하세요.
  • 리스트 상수 조정: 이 값을 증가시키면 쿼리 속도가 빨라집니다. 예를 들어, OpenAI 임베딩에 대한 테스트에서는 제안된 1000보다 2000의 리스트 상수를 사용했습니다.

이러한 자세한 지표와 팁을 살펴보면, pgvector는 벡터 저장 및 유사성 검색에 대해 견고한 성능을 제공하여 PostgreSQL 사용자에게 최고의 선택이라는 것이 분명합니다.

pgvector로 무엇을 할 수 있나요?

오픈 소스 벡터 데이터베이스로서의 pgvector 사용 방법

Pgvector는 단순한 확장 기능뿐만 아니라 PostgreSQL 데이터베이스를 강력한 벡터 데이터베이스로 변환하는 혁신적인 도구입니다. 이는 전문 데이터베이스로 전환하지 않고도 고차원 데이터에 복잡한 작업을 수행하려는 사람들에게 특히 유용합니다. 이 섹션에서는 오픈 소스 벡터 데이터베이스로 pgvector를 설정하고 사용하는 방법에 대해 자세히 알아보겠습니다.

설치 및 설정:

  1. 저장소 복제: pgvector GitHub 저장소를 로컬 머신에 복제하십시오.
git clone https://github.com/your/pgvector/repo.git
  1. 컴파일 및 설치: 디렉토리로 이동하여 확장 기능을 컴파일하세요.
cd pgvector
make
make install
  1. 데이터베이스 구성: PostgreSQL 데이터베이스에 로그인하고 pgvector 확장 기능을 생성하세요.
CREATE EXTENSION pgvector;
  1. 테이블 생성: 고차원 데이터를 저장할 벡터 열을 포함하는 테이블을 생성하세요.
CREATE TABLE my_vectors (id SERIAL PRIMARY KEY, vector_field VECTOR(128));

기본 동작:

  1. 벡터 삽입: 벡터 필드에 데이터를 삽입하세요.
INSERT INTO my_vectors (vector_field) VALUES ('{1.1, 2.2, 3.3, ..., 128.128}');
  1. 벡터 검색: 벡터 필드를 사용하여 유사성 검색을 수행하세요.
SELECT * FROM my_vectors ORDER BY vector_field <-> '{3.3, 2.2, 1.1, ..., 128.128}' LIMIT 10;
  1. 인덱싱: 유사성 검색을 가속화하기 위해 인덱스를 생성하세요.
CREATE INDEX idx_vector_field ON my_vectors USING ivfflat(vector_field);

고급 기능:

  1. 튜닝 매개변수: 인덱스의 매개변수를 조정하여 속도와 정확도 사이의 균형을 맞출 수 있습니다.
SET pgvector.index_type = 'hnsw';
SET pgvector.ef_search = 64;
  1. 일괄 동작: Pgvector는 벡터 삽입 및 업데이트에 대한 일괄 동작을 지원합니다. 이는 머신러닝 응용에 특히 유용할 수 있습니다.

  2. 감시 및 관찰: PostgreSQL의 내장된 모니터링 도구를 사용하여 벡터 작업의 성능을 모니터링하세요.

pgvector의 k-NN 검색 기능

k-NN 검색이란?

k-NN(k-Nearest Neighbors) 검색은 다차원 공간에서 주어진 점에 가장 가까운 "k"개의 점을 찾는 알고리즘입니다. 이는 분류 및 클러스터링을 위해 머신러닝에서 널리 사용됩니다.

pgvector로 k-NN을 가능하게 하는 방법:

  • 데이터 유형: pgvector는 다차원 데이터를 저장할 수 있는 vector라는 새로운 데이터 유형을 소개합니다.
  • 연산자: 유클리디안 거리를 위한 <-> 및 코사인 거리를 위한 <=>와 같은 연산자를 제공하여 벡터 간 유사성을 계산할 수 있습니다.
  • 인덱싱: 벡터 열에 인덱스를 생성하여 k-NN 쿼리의 속도를 높일 수 있습니다.

다음은 pgvector를 사용하여 k-NN 검색을 수행하는 SQL 함수입니다:

CREATE OR REPLACE FUNCTION knn_search(query_vector vector, k int)
RETURNS TABLE(id INT, distance FLOAT)
LANGUAGE SQL STABLE AS $$
SELECT id, query_vector <=> vector_column AS distance
FROM your_table
ORDER BY distance ASC
LIMIT k;
$$;

pgvector로 OpenAI Embedding 저장하기

OpenAI Embedding을 저장하는 이유 OpenAI Embedding은 텍스트의 의미를 잡아내는 고차원 벡터입니다. 텍스트 유사성, 클러스터링 및 분류와 같은 작업에 유용합니다.

pgvector로 OpenAI Embedding 저장하기

  1. 테이블 생성: vector 타입의 열을 포함하는 PostgreSQL 테이블을 생성하세요.
CREATE TABLE documents (
id SERIAL PRIMARY KEY,
content TEXT,
embedding VECTOR(1536)
);
  1. 데이터 삽입: OpenAI Embedding을 embedding 열에 삽입하세요.
INSERT INTO documents(content, embedding) VALUES ('some text', '{your 1536-dim vector}');
  1. 쿼리: pgvector의 연산자를 사용하여 Embedding을 쿼리하세요.
SELECT * FROM documents WHERE embedding <=> '{query vector}' < 0.5;

pgvector와 Langchain: 고급 텍스트 검색

pgvector와 Langchain을 결합하여 강력한 텍스트 검색 및 검색 시스템을 생성할 수 있습니다. 아래는 pgvector를 Langchain과 통합하여 고급 텍스트 검색 작업을 수행하는 가이드입니다.

사전 준비 작업

  • 노트북 초기 섹션에서 보여준대로 필요한 패키지를 설치하고 환경 변수를 설정했는지 확인하세요.

단계 1. Langchain 구성 요소 초기화 먼저 OpenAIEmbeddings, TextLoader, CharacterTextSplitter와 같은 Langchain 구성 요소를 초기화하세요.

from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.document_loaders import TextLoader
 
loader = TextLoader("your_text_file.txt")
documents = loader.load()

text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0) docs = text_splitter.split_documents(documents) embeddings = OpenAIEmbeddings()

단계 2. PGVector 초기화 다음으로, PGVector를 초기화하고 Postgres 데이터베이스로의 연결 문자열을 제공하세요.

from langchain.vectorstores.pgvector import PGVector
 
CONNECTION_STRING = "여기에 연결 문자열"
COLLECTION_NAME = "여기에 컬렉션 이름"
 
db = PGVector.from_documents(
embedding=embeddings,
documents=docs,
collection_name=COLLECTION_NAME,
connection_string=CONNECTION_STRING,
)

단계 3. 유사도 검색 수행 이제 PGVector의 similarity_search_with_score 메서드를 사용하여 유사도 검색을 수행할 수 있습니다.

query = "여기에 검색 쿼리"
docs_with_score = db.similarity_search_with_score(query)
 
for doc, score in docs_with_score:
print("점수: ", score)
print(doc.page_content)

단계 4. 최대 주변 효용도 검색 더 고급 검색을 위해, 최대 주변 효용도 (MMR)를 사용하여 쿼리와 선택된 문서 간의 유사도와 다양성을 최적화할 수 있습니다.

docs_with_score = db.max_marginal_relevance_search_with_score(query)
 
for doc, score in docs_with_score:
print("점수: ", score)
print(doc.page_content)

단계 5. 기존 VectorStore 작업 이미 기존의 VectorStore가 있는 경우, 직접 초기화하고 문서를 추가할 수 있습니다.

store = PGVector(
collection_name=COLLECTION_NAME,
connection_string=CONNECTION_STRING,
embedding_function=embeddings,
)
 
store.add_documents([Document(page_content="여기에 새로운 내용")])

단계 6. 기존의 VectorStore 덮어쓰기 기존의 컬렉션을 업데이트해야 하는 경우, 덮어쓸 수 있습니다.

db = PGVector.from_documents(
documents=docs,
embedding=embeddings,
collection_name=COLLECTION_NAME,
connection_string=CONNECTION_STRING,
pre_delete_collection=True,
)

단계 7. VectorStore를 검색기로 사용하기 마지막으로, 검색기로써 VectorStore를 사용할 수도 있습니다.

retriever = store.as_retriever()
print(retriever)

Amazon SageMaker, Amazon RDS for PostgreSQL 및 pgvector를 사용한 AI 기반 검색 만들기

이 섹션에서는 Amazon SageMaker 및 Amazon RDS for PostgreSQL과 pgvector 확장 기능을 사용하여 제품 카탈로그 유사도 검색 솔루션을 구축하는 방법을 설명합니다. Hugging Face 사전 훈련 모델을 사용하여 문서 임베딩을 생성하고 PostgreSQL 데이터베이스에 저장합니다. 그런 다음, pgvector의 유사도 검색 기능을 활용하여 고객의 검색 쿼리와 가장 일치하는 제품 목록을 찾을 수 있습니다.

솔루션 구현 단계:

  1. SageMaker 노트북 인스턴스 설정: SageMaker 노트북 인스턴스를 생성하여 Jupyter 노트북에서 Python 코드를 실행합니다.

  2. 데이터 준비: Amazon Translate를 사용하여 독일어로 된 항목 설명을 영어로 번역합니다.

  3. 모델 호스팅: 사전 훈련된 Hugging Face 모델을 SageMaker에 배포하여 제품 카탈로그의 384차원 벡터 임베딩을 생성합니다.

  4. 데이터 저장: RDS for PostgreSQL과 연결하여 원시 텍스트와 텍스트 임베딩을 저장하기 위한 테이블을 생성합니다.

  5. 실시간 추론: SageMaker를 사용하여 쿼리 텍스트를 임베딩으로 변환합니다.

  6. 유사도 검색: RDS for PostgreSQL 데이터베이스에서 pgvector를 사용하여 유사도 검색을 수행합니다.

전제 조건:

  • 적절한 IAM 권한이 있는 AWS 계정.
  • SageMaker, RDS 및 CloudFormation과 같은 AWS 서비스에 대한 이해.

배포: AWS CloudFormation 스택을 사용하여 네트워킹 컴포넌트, SageMaker 노트북 인스턴스 및 RDS for PostgreSQL 인스턴스를 포함한 모든 필수 리소스를 생성하는 솔루션을 배포합니다.

솔루션 구현을 위한 일부 주요 코드 스니펫은 다음과 같습니다:

  • 데이터 적재: Amazon Translate를 사용하여 독일어로 된 항목 설명을 영어로 번역합니다.
import boto3
translate = boto3.client(service_name='translate', use_ssl=True)
result = translate.translate_text(Text=str(j), SourceLanguageCode="de", TargetLanguageCode="en")
  • 모델 호스팅: 사전 훈련된 Hugging Face 모델을 SageMaker에 배포합니다.
from sagemaker.huggingface.model import HuggingFaceModel
predictor = HuggingFaceModel(env=hub, role=role).deploy(initial_instance_count=1, instance_type="ml.m5.xlarge")
  • 데이터 저장: RDS for PostgreSQL에 테이블을 생성하여 임베딩을 저장합니다.
CREATE TABLE IF NOT EXISTS products(
id bigserial primary key,
description text,
descriptions_embeddings vector(384)
);
  • 유사도 검색: pgvector를 사용하여 유사도 검색을 수행합니다.
SELECT id, url, description, descriptions_embeddings
FROM products
ORDER BY descriptions_embeddings <-> ARRAY[...];

Python에서 PgVector 사용 방법

Python에서 pgvector의 기능을 확장하거나 다른 Python 라이브러리와 통합하여 사용할 수 있습니다. 아래는 Django에서 두 벡터 간의 유클리드 거리를 계산하는 메서드를 추가하는 방법의 예입니다.

Django 기능 확장

먼저, 유클리드 거리를 계산하는 Item 모델용 사용자 정의 매니저를 만들어 보겠습니다.

from django.db import models
from pgvector.django import VectorField, L2Distance
import math
 
class ItemManager(models.Manager):
def euclidean_distance(self, vector):
# L2Distance 함수를 사용하여 제곱 유클리드 거리를 가져옵니다.
queryset = self.annotate(distance_squared=L2Distance('embedding', vector))
 
# 실제 유클리드 거리를 얻기 위해 제곱근을 취합니다.
for item in queryset:
item.distance = math.sqrt(item.distance_squared)
 
return queryset
 
class Item(models.Model):
embedding = VectorField(dimensions=3)

objects = ItemManager()


이제 이 커스텀 매니저를 Django 뷰 또는 셸에서 사용할 수 있습니다.

```python
# 벡터 [3, 1, 2]와의 유클리드 거리로 정렬된 아이템 가져오기
items = Item.objects.euclidean_distance([3, 1, 2]).order_by('distance')

# 아이템과 거리 출력하기
for item in items:
print(f"아이템 ID: {item.id}, 거리: {item.distance}")

SQLAlchemy 기능 확장

마찬가지로, 커스텀 쿼리 클래스를 추가하여 SQLAlchemy 기능을 확장할 수 있습니다.

from sqlalchemy import Column, Integer, create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, BaseQuery
from sqlalchemy.sql import func
from pgvector.sqlalchemy import Vector
 
Base = declarative_base()
 
class VectorQuery(BaseQuery):
def euclidean_distance(self, vector):
return self.add_columns(
func.sqrt(
func.pow(Vector.l2_distance(self._entities[0].field, vector), 2)
).label('distance')
)
 
class Item(Base):
__tablename__ = 'items'
 
id = Column(Integer, primary_key=True, autoincrement=True)
embedding = Column(Vector(3))
 
@classmethod
def query(cls):
return VectorQuery(cls)
 
# 데이터베이스 설정
engine = create_engine('postgresql://localhost/mydatabase')
Base.metadata.create_all(engine)
 
Session = sessionmaker(bind=engine)
session = Session()
 
# 벡터 [3, 1, 2]와의 아이템과 유클리드 거리 가져오기
items_with_distance = session.query(Item).euclidean_distance([3, 1, 2]).all()
 
# 아이템과 거리 출력하기
for item, distance in items_with_distance:
print(f"아이템 ID: {item.id}, 거리: {distance}")

이 예시에서, Item 클래스에 id 필드를 추가해 기본 키로 지정했습니다. VectorQuery 클래스는 쿼리 기능을 확장하기 위해 사용되며 유클리드 거리를 계산하는 메서드를 추가합니다. 마지막으로, query 클래스 메서드를 사용하여 Item 모델에 이 커스텀 쿼리 클래스를 설정합니다.

이제 SQLAlchemy 코드에서 다음과 같이 사용할 수 있습니다:

# 벡터 [3, 1, 2]와의 아이템과 유클리드 거리 가져오기
items = session.query(Item).euclidean_distance([3, 1, 2]).all()
 
# 아이템과 거리 출력하기
for item, distance in items:
print(f"아이템 ID: {item.id}, 거리: {distance}")

결론

Pgvector는 PostgreSQL 데이터베이스를 사용하는 경우 게임 체인저입니다. 이것은 단순한 추가 기능이 아니라 데이터베이스용 터보 차저 같은 역할을 합니다. 대용량 데이터를 빠르고 정확하게 저장하고 검색할 수 있도록 해줍니다. 이는 빠른 데이터 처리가 필요한 기계 학습과 같은 작업에 사용하기에 특히 유용합니다.

뿐만 아니라, pgvector는 PostgreSQL에 완전히 통합되어 여러 개의 데이터베이스를 다룰 필요가 없습니다. 또한 "거리"를 측정하는 방식을 선택할 수 있는 유연성을 제공합니다. Django와 같은 Python 프레임워크를 사용하는 경우 기능을 확장할 수도 있습니다. 즉, 데이터와 PostgreSQL을 함께 사용하는 경우 pgvector를 놓치지 않아야 합니다.

FAQ

Pgvector의 사용 목적은 무엇인가요?

Pgvector는 PostgreSQL 데이터베이스를 위한 확장 기능으로, 대규모 벡터 세트의 저장 및 검색에 특화되어 있습니다. 기계 학습 모델, 추천 시스템, 자연 언어 처리 작업과 같이 빠른 정확한 유사성 검색이 필요한 응용 프로그램에 특히 유용합니다.

Pgvector의 장점은 무엇인가요?

Pgvector는 다음과 같은 여러 가지 이점을 제공합니다:

  1. 속도: 고차원 데이터를 다룰 때에도 빠른 쿼리를 지원합니다.
  2. 효율성: 데이터를 압축하여 공간을 절약하면서도 데이터 무결성을 유지합니다.
  3. 유연성: 유클리드, 코사인, 맨하탄과 같은 여러 거리 측정 방식을 지원하여 필요에 맞게 선택할 수 있습니다.
  4. 원활한 통합: PostgreSQL에 직접 통합되어 별도의 데이터베이스 관리가 필요하지 않습니다.
  5. 확장성: 다양한 하드웨어 구성에서 우수한 성능을 발휘하여 리소스를 최적으로 활용합니다.

PostgreSQL은 벡터 데이터베이스인가요?

아니요, PostgreSQL은 본질적으로는 벡터 데이터베이스가 아닙니다. 그러나 Pgvector 확장을 사용하면 PostgreSQL을 고차원 데이터에 대한 강력한 벡터 데이터베이스로 활용할 수 있습니다.

PostgreSQL에서 Pgvector를 사용하는 방법은 무엇인가요?

PostgreSQL에서 Pgvector를 사용하려면 다음 단계를 따라야 합니다:

  1. PostgreSQL 데이터베이스에서 CREATE EXTENSION pgvector;를 실행하여 Pgvector 확장을 설치합니다.
  2. 벡터 컬럼이 있는 테이블을 생성합니다. 예를 들어 CREATE TABLE my_vectors (id SERIAL PRIMARY KEY, vector_field VECTOR(128));와 같이 생성할 수 있습니다.
  3. 테이블에 벡터를 삽입합니다. INSERT INTO my_vectors (vector_field) VALUES ('{1.1, 2.2, 3.3, ..., 128.128}');와 같이 삽입할 수 있습니다.
  4. SQL 쿼리를 사용하여 유사성 검색을 수행합니다. 예를 들어 SELECT * FROM my_vectors ORDER BY vector_field <-> '{3.3, 2.2, 1.1, ..., 128.128}' LIMIT 10;와 같이 사용할 수 있습니다.
Anakin AI - The Ultimate No-Code AI App Builder