Milvus에서 데이터를 압축하는 방법?
빈로그 표지 이미지
Milvus 2.0 GA의 공식 출시와 함께 새로운 기능들이 지원됩니다. 그 중 압축은 저장 공간을 절약하는 데 도움이 되는 새로운 기능 중 하나입니다.
압축이란 작은 세그먼트를 큰 세그먼트로 병합하고 논리적으로 삭제된 데이터를 정리하는 과정을 말합니다. 즉, 압축은 빈로그에서 삭제되거나 만료된 항목을 제거하여 디스크 공간 사용량을 줄여줍니다. 압축은 데이터 코디에 의해 트리거되고 Milvus의 데이터 노드에 의해 실행되는 백그라운드 작업입니다.
이 문서에서는 Milvus에서 압축의 개념과 구현에 대해 자세히 설명합니다.
압축이란 무엇인가요?
Milvus 2.0에서 압축을 구현하는 방법에 대해 자세히 알아보기 전에 먼저 Milvus에서 압축이 무엇인지 파악하는 것이 중요합니다.
Milvus 사용자라면 하드 디스크 공간 사용량 증가로 인해 불편을 겪은 적이 있을 것입니다. 또 다른 문제는 1,024행 미만의 세그먼트는 색인되지 않으며 쿼리 처리를 위해 무차별 대입 검색만 지원한다는 것입니다. 자동 플러시 또는 사용자 호출 플러시로 인해 발생하는 작은 세그먼트는 쿼리 효율성을 저해할 수 있습니다.
따라서 위에서 언급한 두 가지 문제를 해결하고 디스크 사용량을 줄이고 쿼리 효율성을 개선하기 위해 Milvus는 압축을 지원합니다.
LevelDB 및 RocksDB와 같은 데이터베이스는 정렬된 문자열 테이블(SSTables)에 데이터를 추가합니다. 쿼리당 평균 디스크 읽기 횟수는 SSTable의 수에 따라 증가하여 비효율적인 쿼리로 이어집니다. 이러한 데이터베이스는 읽기 증폭을 줄이고 하드 드라이브 공간을 확보하기 위해 SSTables를 하나로 압축합니다. 압축 프로세스는 백그라운드에서 자동으로 실행됩니다.
마찬가지로 Milvus는 삽입 및 삭제된 데이터를 빈로그에 추가합니다. 빈로그의 수가 증가하면 더 많은 하드 디스크 공간이 사용됩니다. 하드 디스크 공간을 확보하기 위해 Milvus는 삭제 및 삽입된 데이터의 빈로그를 압축합니다. 엔티티가 삽입되었지만 나중에 삭제된 경우, 일단 압축되면 데이터 삽입 또는 삭제를 기록하는 빈로그에 더 이상 존재하지 않습니다. 또한 Milvus는 삽입된 데이터를 보관하기 위해 Milvus가 자동으로 생성하는 데이터 파일인 세그먼트도 압축합니다.
압축은 어떻게 구성하나요?
Milvus에서 압축을 구성하려면 주로 dataCoord.enableCompaction
와 common.retentionDuration
.
dataCoord.enableCompaction
는 압축을 활성화할지 여부를 지정합니다. 기본값은 true
입니다.
common.retentionDuration
는 압축이 실행되지 않는 기간을 지정합니다. 단위는 초입니다. 데이터를 압축하면 삭제된 모든 엔티티는 시간 이동으로 검색할 수 없게 됩니다. 따라서 시간 이동으로 검색하려는 경우 압축이 실행되지 않고 삭제된 데이터에 영향을 미치지 않는 기간을 지정해야 합니다. 밀버스는 시간 이동 검색의 정확한 결과를 보장하기 위해 common.retentionDuration
에서 지정한 기간 동안 운영된 데이터를 보관합니다. 즉, 이 기간에 운영된 데이터는 압축되지 않습니다. 자세한 내용은 시간 여행을 통한 검색을 참조하세요.
Milvus에서는 기본적으로 압축이 활성화되어 있습니다. 압축을 비활성화했다가 나중에 수동으로 활성화하려면 아래 단계를 따르세요:
collection.compact()
메서드를 호출하여 글로벌 압축 프로세스를 수동으로 트리거합니다. 그러나 이 작업은 시간이 오래 걸릴 수 있다는 점에 유의하세요.- 메서드를 호출하면 압축 ID가 반환됩니다.
collection.get_compaction_state()
메서드를 호출하여 압축 상태를 확인합니다.
압축이 활성화되면 백그라운드에서 자동으로 실행됩니다. 압축 프로세스는 시간이 오래 걸릴 수 있으므로 압축 요청은 시간을 절약하기 위해 비동기적으로 처리됩니다.
압축은 어떻게 구현하나요?
Milvus에서는 압축을 수동 또는 자동으로 구현할 수 있습니다.
빈로그 또는 세그먼트의 수동 압축은 트리거 조건을 충족할 필요가 없습니다. 따라서 수동으로 압축을 호출하면 빈로그나 세그먼트는 무슨 일이 있어도 압축됩니다.
그러나 자동 압축을 사용하려면 시스템에서 세그먼트나 binlog를 압축하기 위해 특정 압축 트리거 조건을 충족해야 합니다.
일반적으로 Milvus에서 압축할 수 있는 개체에는 빈로그와 세그먼트의 두 가지 유형이 있습니다.
빈로그 압축
바이너리 로그 또는 세그먼트의 더 작은 단위인 바이너리 로그는 Milvus 벡터 데이터베이스의 데이터에 대한 업데이트 및 변경 사항을 기록하고 처리합니다. 세그먼트의 데이터는 여러 빈로그에 유지됩니다. 빈로그 압축에는 Milvus에서 삽입 빈로그와 델타 빈로그의 두 가지 유형의 빈로그가 포함됩니다.
델타 빈로그는 데이터가 삭제될 때 생성되는 반면, 삽입 빈로그는 다음 세 가지 상황에서 생성됩니다.
- 삽입된 데이터가 추가되는 동안 세그먼트가 크기 상한에 도달하면 자동으로 디스크에 플러시됩니다.
- DataCoord는 봉인되지 않은 채로 오랫동안 남아 있는 세그먼트를 자동으로 플러시합니다.
collection.num_entities
,collection.load()
등과 같은 일부 API는 자동으로 플러시를 호출하여 세그먼트를 디스크에 씁니다.
따라서 빈로그 압축은 이름에서 알 수 있듯이 세그먼트 내의 빈로그를 압축하는 것을 의미합니다. 보다 구체적으로, 빈로그 압축 중에 유지되지 않는 모든 델타 빈로그와 삽입 빈로그가 압축됩니다.
빈로그 압축
세그먼트가 디스크에 플러시되거나 압축이 오랫동안 실행되지 않아 Milvus가 전역 압축을 요청하는 경우, 자동 압축을 트리거하려면 다음 두 가지 조건 중 하나 이상이 충족되어야 합니다:
- 델타 빈로그의 행이 전체 행의 20% 이상입니다.
- 델타 빈로그의 크기가 10MB를 초과합니다.
세그먼트 압축
세그먼트는 삽입된 데이터를 보관하기 위해 Milvus에서 자동으로 생성하는 데이터 파일입니다. Milvus에는 세그먼트에는 증가하는 세그먼트와 봉인된 세그먼트의 두 가지 유형이 있습니다.
성장하는 세그먼트는 봉인될 때까지 새로 삽입된 데이터를 계속 수신합니다. 봉인된 세그먼트는 더 이상 새 데이터를 수신하지 않고 오브젝트 스토리지로 플러시되며, 새로 생성된 성장 중인 세그먼트에 새 데이터가 삽입됩니다.
따라서 세그먼트 압축은 봉인된 여러 세그먼트를 압축하는 것을 의미합니다. 보다 구체적으로, 세그먼트 압축 중에는 작은 세그먼트가 더 큰 세그먼트로 압축됩니다.
세그먼트 압축
압축 후 생성된 각 세그먼트는 기본적으로 512MB인 세그먼트 크기의 상한을 초과할 수 없습니다. 세그먼트 크기 상한을 수정하는 방법을 알아보려면 시스템 구성을 참조하세요.
세그먼트가 디스크에 플러시되거나 압축이 오랫동안 실행되지 않아 Milvus가 전역 압축을 요청하는 경우, 자동 압축을 트리거하려면 다음 조건을 충족해야 합니다:
- 0.5보다 작은 세그먼트 *
MaxSegmentSize
가 10개 이상입니다.
다음 단계는 무엇인가요?
Milvus에서 압축의 기본 사항을 학습한 다음에는 어떻게 해야 하나요? 현재 압축 구성을 위한 모든 매개변수가 milvus.yaml
파일에 있는 것은 아니며, 계획 생성 전략은 비교적 기본적인 수준입니다. 관심이 있으시다면 오픈 소스 프로젝트인 Milvus에 참여해 보세요!
또한 2.0의 새로운 기능 시리즈 블로그에서는 새로운 기능의 설계에 대해 설명하고자 합니다. 이 블로그 시리즈에서 자세히 읽어보세요!
- Milvus가 분산 클러스터에서 스트리밍 데이터를 삭제하는 방법
- Milvus에서 데이터를 압축하는 방법
- Milvus는 노드 간 쿼리 부하를 어떻게 분산하나요?
- 비트셋으로 벡터 유사도 검색의 다양성을 구현하는 방법
저자 소개
Milvus 프로젝트의 수석 소프트웨어 엔지니어인 빙이 선은 상하이 자오통 대학교에서 소프트웨어 공학 석사 학위를 취득했습니다. 그는 주로 Milvus 2.0에서 스토리지 관련 컴포넌트 개발을 담당하고 있습니다. 그의 관심 분야는 데이터베이스와 분산 시스템입니다. 오픈 소스 프로젝트의 열렬한 팬이며 여가 시간에는 비디오 게임과 독서를 즐기는 미식가입니다.
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word