DB | Vector DB | |
---|---|---|
Create | 새로운 레코드 삽입 | 새로운 벡터 삽입 |
Read | 기준에 따라 레코드를 쿼리하거나 가져옴 | 벡터를 쿼리 (예: 비슷한 이미지 검색. 구글 렌즈) |
Update | 레코드 갱신 | 벡터 갱신 |
Delete | 기준에 따라 레코드 삭제 | 기준에 따라 벡터 삭제 (예: 펫 이미지 벡터 DB로부터 "사자랑 비슷한" 이미지 벡터들 삭제 :지금 사자는 펫이랑 안 어울리니까 제거하려는 상황인듯) |
from tqdm.autonotebook import tqdm
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}
# 코드 생략
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로 설정
# 코드 생략
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': ''}
# 코드 생략
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]}}}
# 코드 생략
idx.delete(ids=['vec33'])
단, 없는 id로 삭제하려고 해도 에러는 발생하지 않음
idx.delete(delete_all=True) # 모두 삭제