샤딩 구성
이 페이지의 내용
Mongoid는 샤드 환경에서 컬렉션 샤딩을 설정하는 데 도움이 될 수 있습니다.
샤드 키 선언
샤드 키는 shard_key
매크로를 사용하여 모델에서 선언할 수 있습니다.
class Person include Mongoid::Document field :ssn shard_key ssn: 1 # The collection must also have an index that starts with the shard key. index ssn: 1 end
컬렉션 을 샤드 하려면 컬렉션 에 샤드 키 시작하는 인덱스 가 있어야 합니다. Mongoid는 인덱스 관리 기능을 제공하며, 여기에 있는 예제에서 이를 활용합니다.
Mongoid는 샤드 키를 선언하기 위한 두 가지 구문을 지원합니다. 표준 구문은 MongoDB shardCollection shell 헬퍼 의 형식을 따르며 범위 및 해시 샤드 키, 복합 샤드 키 및 컬렉션 샤딩 옵션을 지정할 수 있습니다.
shard_key ssn: 1 shard_key ssn: 1, country: 1 shard_key ssn: :hashed shard_key {ssn: :hashed}, unique: true
대안은 키만 제공되는 축약형 구문입니다. 이 구문은 범위 지정 가 지정된 샤드 키만 지원하며 옵션을 지정할 수 없습니다.
shard_key :ssn shard_key :ssn, :country
shard_key
매크로는 필드 이름 대신 belongs_to
연관 관계의 이름을 사용할 수 있으며, 이 경우 Mongoid는 연관 관계에 구성된 외래 키를 필드 이름으로 사용합니다:
class Person include Mongoid::Document belongs_to :country # Shards by country_id. shard_key country: 1 # The collection must also have an index that starts with the shard key. index country: 1 end
샤드 키 필드 "." 필드 이름을 구분하는 문자:
shard_key "location.x" => 1, "location.y" => 1 shard_key "location.x", "location.y"
참고
"." 문자가 내장된 문서에서 필드를 구분하는 데 사용되지만, Mongoid는 현재 문자 그대로 "." 문자.
참고
모델이 샤드 키를 선언하면 Mongoid는 각 컬렉션이 지정된 샤드 키로 샤딩될 것으로 예상합니다. 모델을 다시 로드할 때 Mongoid는 특히 지리적으로 분산된 샤드 클러스터 에서 쿼리 성능을 개선하기 위해 id
필드 값 외에 샤드 키를 find
명령에 제공합니다. 지정된 샤드 키로 컬렉션을 샤딩하지 않으면 쿼리로 인해 잘못된 결과가 생성될 수 있습니다.
샤딩 관리 레이크 작업
모델에 정의된 샤드 키에 따라 데이터베이스 의 컬렉션을 샤드 하려면 db:mongoid:shard_collections
Rake 작업 을 실행 합니다. 필요한 경우 컬렉션을 샤딩 하기 전에 db:mongoid:create_indexes
Rake 작업 을 실행 합니다.
rake db:mongoid:create_indexes rake db:mongoid:shard_collections
참고
인덱스 관리 레이크 작업과 마찬가지로 샤딩 관리 레이크 작업은 일반적으로 특정 모델 클래스에 문제가 발생해도 중지되지 않고 실패합니다. 대신 적절한 수준에서 문제를 (구성된 Mongoid 로거에) 로그 하고 다음 모델을 계속 진행합니다. Mongoid가 Rails 애플리케이션 에서 사용되는 경우, 이는 레이크 작업 실행 결과가 일반적으로 log/development.log
과 같은 환경별 로그 파일 에서 찾을 수 있음을 의미합니다.
참고
이 문서 에 설명된 대로 컬렉션 샤딩 과 같은 샤딩된 클러스터 에서 스키마 관련 작업을 수행하거나 컬렉션 또는 데이터베이스를 만들거나 삭제할 때 클러스터 노드가 오래된 로컬 구성 관련 캐시 데이터로 끝날 수 있습니다. 각 mongos
노드 에서 flushRouterConfig 명령을 실행하여 이러한 캐시를 지웁니다.