2011-03-06 2 views
0

mongodb의 데이터베이스에 "사용자"컬렉션이 있습니다. 나는 샤딩을 사용할 것입니다.샤 도드 구성에서 다중 고유 인덱스가있는 Mongodb 데이터베이스

표준 _id 이외의 다른 세 가지 필드 (사용자 이름, 전자 메일 및 계정 번호)는 인덱싱되고 고유해야합니다. 이 필드 3 개는 모든 사용자 문서에 반드시 존재하는 것은 아니며 일부 경우에는 존재하지 않을 수도 있습니다.

사용자가이 필드 중 하나를 자주 훑어 볼 수 있기 때문에 필드를 인덱싱하고 싶습니다. 이 필드는 고유해야하므로이 논리가 클라이언트 측에서 처리되지는 않을 것이므로 필요합니다.

다른 데이터베이스와 마찬가지로 mongodb에는 한계가 있다는 것을 알고 있습니다 만, 웹 응용 프로그램에 대한 일반적인 설정이기 때문에 해결책이 있기를 바랍니다.

이 시나리오에 대한 우아한 해결책이 있습니까?

(데이터베이스 구조와 관련되어 있으므로)이 질문에 중요한지는 확실하지 않지만 공식 mongodb C# 드라이버를 사용하고 있습니다.

답변

3

Mongodb 공식 문서에 따르면 샤드 드 컬렉션에는 고유 색인이 하나만 있어야하며 고유 한 필드가 있어야합니다. 그러나 says또한 샤드 키가 속성의 접두사 인 경우에만 다른 고유 색인을 가질 수 있습니다. 이렇게 시도해 볼 수는 있지만 고유 키가 항상 존재해야한다는 것을 알고 있습니다.

사용자 관련 정보가없는 비즈니스 로직을 이해할 수 없습니다. 이 경우 _id으로 분할하고 고유성 검사를 수동으로 수행 할 수 있습니다.

+0

sharding을 효율적으로하기 위해서는 mongos 프로세스가 문서에만 기반하여 shard를 선택할 수 있어야하고, 그 shard에만 write를 보내야합니다. 문서에 샤드 인덱스가 아닌 고유 한 키가 있어야한다는 요구 사항에 따라 모든 샤드를 검사해야합니다. 결과적으로 가장 느린 조각만큼 느린 성능을 나타내는 인서트가 생성됩니다. 이 테이블을 분류 할 충분한 사용자가 실제로 있습니까? –

관련 문제