티스토리 뷰

Solr 를 사용하면서 항상 의미가 혼동되는 것 들이 존재하는데 그 중에서 Collection 과 Core 에 대해서 정리를 해 보도록 한다. (현재 이해한 것을 기준으로 정리한 것이라서 향후에 내용이 변경될 수 있다)

Collection vs. Core

이 두 가지를 혼동되는 이유는 Solr 구성을 단일 노드로 할지 분산 노드로 할지에 따라서 구성이 다르고 그 구성에 따라서 의미가 달라지기 때문이다.

쉽게 생각해 보면 Collection 이라는 것은 물리적이 아닌 논리적인 인덱스 단위고, Core는 물리적인 인덱스 단위라고 생각하면 된다. 이제 환경에 따라서 어떻게 다른 의미를 가지는지 정리해 보도록 하자.

분산 환경

분산 환경이라면 컬랙션을 운영하기 위한 클러스터를 구성하고 이 클러스터에 여러 개의 서버노드 (Solr 가 서비스 되는 )

  • Collection - 클러스터를 구성하고 있는 노드(물리적 및 논리적 서버들) 들에 걸쳐 분산되어 운영되는 논리적인 인덱스를 의미한다.
  • Core - 분산 환경이 되면 컬랙션을 파티션으로 나누게 되며 각 파티션 별로 인덱스 데이터가 나뉘고 물리적으로 관리된다. 이 과정을 Sharding이라고 표현하는데 이렇게 분리된 파티션을 물리적으로 관리하고 서비스하는 단위가 Core 가 된다. 또한 Shard에 참여하는 Solr Instance 들이 여러 개일 경우는 복제본 (Replica)을 관리하는 단위도 Core 가 된다.

비 분산 환경

비 분산 환경이라는 것은 단독 서버로 Solr 가 운영되는 것을 기준으로 한다. 물론 하나의 서버에 여러 개의 노드 (여러 개의 Solr 구동 JVM 구성) 를 구성해서 분산 환경을 만들 수도 있지만 그 부분은 대상이 아니다.

  • Collection - 여러 개의 컬랙션을 Solr Instance에 생성할 수 있고, 논리적인 인덱스와 물리적인 인덱스(Core) 가 1:1 로 매치 된다.
  • Core - 물리적인 인덱스트를 서비스하는 단위로 컬랙션과 1:1 로 매치 된다.

결론

비 분산환경에서는 컬랙션과 코어를 동일하게 생각해도 전혀 무리가 없지만, 어떤 환경이라도 컬랙션은 논리적인 인덱스 단위이고, Core는 물리적인 인덱스 단위라고 생각하면 된다. 여기서 분산 환경이 구성되면서 데이터를 관리 단위 (기본 단위는 문서의 Hash 값을 기준으로 양적인 분리)에 따라서 파티셔닝이 진행되고 각 분리된 파티션은 Shard 단위로 관리가 되며 Shard에 포함된 인덱스 및 복제본들을 서비스하는 단위가 물리적인 Core 가 된다고 이해하면 된다.

이를 정리하면 다음과 같다.

  • 서버 당 존재하는 컬랙션 (전부이든, 일부이든)이 코어다.
  • 하나의 Solr 서버는 여러 개의 코어를 가질 수 있다. 비 분산 환경에서는 코어의 수 만큼 컬랙션이 존재한다.
  • 컬랙션은 논리적인 단위일 뿐 실제는 코어가 기준이 된다.
  • 인덱싱하는 데이터가 대량인 경우는 비 분산환경에서 컬랙션을 추가하는 것 보다는 SolrCloud를 사용하여 컬랙션을 운영하는 것이 좋다.
댓글
댓글쓰기 폼