2011-02-02 5 views
0

내가 만들기는 사용자가 사이트의 예에서 고유 한 하위 도메인을 가질 수있어 웹 사이트; gaz123.mywebsite.com. 그들이 사이트에서 등록 할 때MongoDB의 데이터 무결성

그들은 자신의 하위 도메인을 입력합니다. 코드에서 계정 레코드를 만들기 전에 내가 선택한 하위 도메인이 이미 존재하지 않는지 확인합니다. 이것은 동일한 하위 도메인을 가진 계정에 대한 간단한 쿼리 일뿐입니다. 이것이 0 카운트를 반환하면 그 하위 도메인으로 계좌를 생성합니다.

나는 두 MongoDB를 중심으로 잠금() 명령을 배치 한, 즉 명령; 하위 도메인을 사용할 수 있는지 확인한 다음 계정을 만듭니다. 그럼 자물쇠를 풀어.

lock(m_oLockMe) 
{ 
    if(SubdomainIsFree(oRegisterModel.SubDomain)) 
    { 
     CreateAccount(oRegisterModel); 
    } 
} 

어떻게 할 수 있습니까? 더 좋은 또 다른 방법이 있습니까? 왜?

감사합니다.

답변

3

여기는 확장 성이 떨어집니다. 나는 원자 findAndModify으로 이것을 할 것입니다. 먼저 subdomain 필드에 고유 인덱스를 설정해야합니다 :

db.subdomains.ensureIndex({subdomain: 1}, {unique: true}) 

이 필요 upsert 중복을 생성하지하는. 그럼 당신은이 작업을 수행 할 수 있습니다 :

r = db.subdomains.findAndModify({query: {used: false, subdomain: <subdomain>}, update: {$set: {used: true}}, new: true, upsert: true}) 

이 무료로 하위 도메인을 나타내는 문서를 반환하거나 하위 도메인을 사용하는 의미 중복 키 오류가 발생합니다 하나. 무료 하위 도메인의 경우이 또한 원자 used 그래서 단지 하나의 findAndModify 작업이 동일한 문서를 얻을 것이다 보장된다 true에 설정합니다.

+0

감사합니다. –