Deep Store

Deep Store

Apache Pinot의 deep store 구성 요소를 활용해 대규모 데이터를 효율적으로 저장하고 관리하는 방법을 다루는 페이지예요. 세그먼트 파일의 영구 저장소인 deep store의 역할과 세그먼트가 어떻게 들어오는지 이해할 수 있어요.

출처: Deep Store

본문

deep store(또는 deep storage)는 세그먼트 파일을 위한 영구 저장소예요.

백업 및 복원 작업에 사용돼요. 클러스터의 새 서버 노드는 deep store에서 세그먼트 파일의 복사본을 내려받아요. 서버의 로컬 세그먼트 파일이 어떤 방식으로든 손상되면(또는 실수로 삭제되면) 서버 재시작 시 deep store에서 새 복사본을 내려받아요.

deep store는 세그먼트 파일의 압축 버전을 저장하며 일반적으로 인덱스는 포함하지 않아요. 이 압축 파일은 로컬 파일 시스템이나 다양한 다른 파일 시스템에 저장할 수 있어요. 지원되는 파일 시스템에 대한 자세한 내용은 File Systems를 참조하세요.

참고: deep store만으로는 복원 작업에 충분하지 않아요. Pinot는 테이블 설정, 스키마, 세그먼트 메타데이터 같은 메타데이터를 Zookeeper에 저장해요. 복원 작업에는 Deep Store와 Zookeeper 메타데이터가 모두 필요해요.

세그먼트는 어떻게 deep store에 들어가나요? (How do segments get into the deep store?)

세그먼트가 deep store에 영속화되는 방법은 여러 가지가 있어요.

오프라인 테이블의 경우 배치 수집 작업이 아래 다이어그램과 같이 세그먼트를 deep store에 직접 써요:

배치 작업이 세그먼트를 deep store에 쓰는 모습

그런 다음 수집 작업은 새 세그먼트에 대한 알림을 controller에 보내고, controller는 해당 세그먼트를 내려받도록 적절한 서버에 알려요.

실시간 테이블의 경우 기본적으로 세그먼트가 먼저 서버에 의해 메모리에 빌드돼요. 그런 다음 (Segment Completion Protocol 시퀀스의 일부로) 리드 controller에 업로드되고, controller가 아래 다이어그램과 같이 세그먼트를 deep store에 써요:

서버가 세그먼트를 Controller에 보내고, Controller가 세그먼트를 deep store에 쓰는 모습

모든 세그먼트가 controller를 통과하는 것은 부하가 심할 때 시스템 병목이 될 수 있어요. 이 경우 Controller를 데이터 경로에서 분리에서 설명하는 피어 다운로드 정책을 사용할 수 있어요.

이 구성을 사용하면 서버가 아래 다이어그램과 같이 완료된 세그먼트를 deep store에 직접 써요:

서버가 세그먼트를 deep store에 쓰는 모습

Deep store 구성 (Configuring the deep store)

deep store를 구성하는 방법에 대한 실습 예제는 다음 튜토리얼을 참조하세요:

더 알아보기 (Learn more)