[02] Vector DB

heering·2024년 1월 15일
0

Vector DB

목록 보기
3/5

CRUD

  • DB와 Vector DB의 관점에서 CRUD를 정리한다.
DBVector DB
Create새로운 레코드 삽입새로운 벡터 삽입
Read기준에 따라 레코드를 쿼리하거나 가져옴벡터를 쿼리 (예: 비슷한 이미지 검색. 구글 렌즈)
Update레코드 갱신벡터 갱신
Delete기준에 따라 레코드 삭제기준에 따라 벡터 삭제 (예: 펫 이미지 벡터 DB로부터 "사자랑 비슷한" 이미지 벡터들 삭제 :지금 사자는 펫이랑 안 어울리니까 제거하려는 상황인듯)

Pinecone

  • Jupyter Notebook에서 실행할 때의 코드.
  • 경고 문구 제거하려면 from tqdm.autonotebook import tqdm

Create

import pinecone
pinecone.init(api_key="xxx", environment="xxx")
pinecone.create_index(name="insert", dimension=3) # insert라는 이름의 db 생성
pinecone.list_indexes() # 윗줄이 정상 실행되면 ['insert']가 출력될 것임.

vectors = [[1, 3, 4], [5, 6, 7], [8, 9, 0]]
vect_ids = ['vec1', 'vec2', 'vec3']
idx = pinecone.Index('insert')
idx.upsert([
  ('vec1', [1, 3, 4]),
  ('vec2', [5, 6, 7]),
  ('vec3', [8, 9, 0])
]) # list of tuples. 결과는 {'upserted_count': 3}

Update

# 코드 생략
idx = pinecone.Index('insert')
idx.upsert(vectors = [
	("A", [0.1, 0.1, 0.1]),
    ("B", [0.2, 0.2, 0.2]),
    ("C", [0.3, 0.3, 0.3]),
	("D", [0.4, 0.4, 0.4]),
    ("E", [0.5, 0.5, 0.5])
]) # 결과는 {'upserted_count': 5}

idx.update(id="E", values=[0.55, 0.55, 0.55]) # 특정 id에 바꾸고 싶은 val로 설정

Query

# 코드 생략
idx.upsert([
	('vec1', [1, 3, 44]), # update because vec1 is already in DB
    ('vec2', [5, 6, 77]), # update
    ('vec33', [8, 9, 0]) # insert
])

idx.query([0, 0, 0], top_k=5, include_values=True)

query 결과는 {'matches': [{'id': 'vec3', 'score': 0.0, 'values': [8.0, 9.0, 0.0]}, ...], 'namespace': ''}

Fetch

# 코드 생략
idx.fetch(ids=["vec1"]) # ids=["vec1", "vec2"] 이렇게도 가능

fetch 결과는 {'namespace': '', 'vectors': {'vec1': {'id': 'vec1', 'sparse_values': {'indices': [100, 200, 300], 'values': [0.5, 0.5, 0.5]}, 'values': [0.1, 0.2, 0.3]}}}

Delete

# 코드 생략
idx.delete(ids=['vec33'])

단, 없는 id로 삭제하려고 해도 에러는 발생하지 않음

idx.delete(delete_all=True) # 모두 삭제

0개의 댓글