2014-12-10 7 views
0

제 3 자 서비스 (Facebook, Google 등)를 사용하여 사용자를 인증하는 응용 프로그램에서 작업하고 있습니다. 각 사용자에게 제 3 자 ID와 관련된 내부 ID (uuid v4)를 제공합니다. 내가 어떤 ID를 조회 할 수 있기 때문에어느 것이 MongoDB에서 더 낫습니다 : 다중 색인 또는 다중 모음

var user = new mongoose.Schema({ 
    uuid: {type: String, required: true, unique: true, index: true, alias: 'userId'}, 
    fbid: {type: String, required: false, index: true, alias: 'facebookId'}, 
    gid: {type: String, required: false, index: true, alias: 'googleId'} 
}); 

, 나는 그들 모두에 인덱스를 필요 : 지금, 내 (몽구스) 사용자 문서 모델은 다음과 같이 보인다. 나는 이것이 많은 사용자 (또는 제 3 자 로그인 (Twitter, LinkedIn 등)를 추가하는 경우 문제가 될 수 있다고 생각하고 있습니다.) 자, 내 질문은 이것이 올바른 방법인지 여부입니다. .. 더 나은 솔루션이 있다면

하나의 아이디어 나는 이런 식으로 뭔가 ID 유형 당 하나의 여러 컬렉션을 데 있었다 :

이 사용자 모델과 쉽게 샤딩의 혼란을하지 않는 장점이있다
var user = new mongoose.Schema({ 
    uuid: {type: String, required: true, unique: true, index: true, alias: 'userId'}, 
}); 

var facebookUser = new mongoose.Schema({ 
    fbid: {type: String, required: false, index: true, alias: 'facebookId'}, 
    userId: {type: Schema.Types.ObjectId, ref: 'user'} 
}); 

, 그러나 더 많은 쿼리를 통해 사용자를 검색하고 새 사용자를 만들 수 있습니다 (1. 사용자가 존재하면 facebookUser 컬렉션을 체크인합니다. 그렇지 않은 경우 새 사용자를 만들고 저장 한 다음 해당 페이지로 연결되는 새 facebookUser를 만듭니다. 새 사용자를 누른 다음 저장).

어느 쪽이 "더 나은가"(잘 저울, 짐을 다루는 등)?

답변

1

인덱스와 함께 고려해야 할 주요 사항은 메모리에서 수정된다는 것입니다. 하나의 콜렉션에 3 개의 인덱스가 있는지 또는 하나의 인덱스가있는 3 개의 콜렉션이 있는지는 관련이 없습니다 (인덱스에 관한 한). 나는 사용의 용이성을 위해 그것들을 모두 하나의 컬렉션으로 모으는쪽으로 기울어 질 것이다.

관련 문제