답변:
샤딩을 사용하는 경우 "로드 밸런서"는 몽고 프로세스입니다. 실제로 라우터와 비슷합니다. 구성 데이터베이스의 메모리 내 사본을 보관하고 샤드 키를 기반으로 의사 결정을 내릴 수 있습니다.
동일한 복제 세트 또는 세트 멤버 전체에 대한로드 밸런싱을 의미하는 경우 mongos가 해당 시나리오를 처리하도록 요청하는 기능 요청이 있습니다 ( https://jira.mongodb.org/browse/SERVER-1594 ). 드라이버 작동 방식은 실제로 필요하지 않습니다 (드라이버의 복잡성을 줄입니다).
단일 복제 세트에서는 쓰기를 분배 할 수 없으며 모두 기본으로 이동해야합니다. 필요에 따라 읽기 기본 설정 을 통해 이미 읽기를 보조에 배포 할 수 있습니다 . 드라이버는 기본 및 보조를 추적하고 쿼리를 적절하게 라우팅합니다.
'로드 밸런싱'은 샤딩을 통해 달성됩니다. 샤딩을 통해 실제로 쓰기 / 업데이트를 개별 샤드에 배포합니다. mongo는 원하는 키 조합을 기반으로 데이터를 분할 할 수 있으므로이를 수행하는 특정 알고리즘은 없습니다. 최선의 파티션 알고리즘은 순차적 인 항목과 임의의 항목을 혼합 한 알고리즘입니다.
예를 들어, 사용자 ID는 다음과 같이 분할 될 수 있습니다
xx-sha1(user email)
xx = time sequence
샤딩을 구현하려면 3 개의 구성 서버와 데이터 노드가 있어야합니다. 데이터 노드는 중복성을 위해 복제 세트로 그룹화 될 수 있으며 보조에서 데이터를 읽는 데 (가능한 경우에만) 사용될 수 있습니다. 복제가 비동기로 수행되어 데이터를 읽을 수있는 경우에만 2 차 쿼리 시간에 새 데이터를 사용할 수 있다고 보장 할 수 없습니다.
파티션 알고리즘은 전적으로 귀하에게 달려 있으며 응용 프로그램 요구에 적합해야합니다. 또한 단지 데이터를 쓰려고하고 가끔씩 만 읽거나 쓴 직후에 읽어야하는지 고려해야합니다.