2014-10-16 18 views
2

저는 현재 프로젝트에서 사용할 couchbase 용 .NET 역할 공급자를 함께 사용하려고합니다. 나는 이것을 2 가지 문서 유형으로 모델링하려고한다.couchbase를 사용하는 솔루션의 .NET 사용자 지정 역할 공급자에 대한 합리적인 접근 방법입니까?

첫 번째 문서 유형은 응용 프로그램에서 사용할 수있는 모든 역할의 간단한 목록입니다. 이렇게하면 Add, Delete, GetAllRoles 등을 쉽게 지원할 수 있습니다.이 문서는 응용 프로그램마다 고정 키가 있으므로 "applicationname_roles"이므로 코드 관점에서 잘 알려져 있으며 신속하게 검색 할 수 있습니다. "roleprovider.user-역할" "사용자": "USER1" "역할"

번째 문서 그래서 예

{ "타입"사용자를 역할에 매핑 "role1", "응용 프로그램": "APP1" }

이 문서 유형의 핵심은, 형식 "applicationname_roles_username_rolename"이 될 사용자가 특정에있는 경우 테스트의 가장 일반적인 작업을 만드는 것 역할은 사소하고 신속합니다.

.NET 역할 공급자의 GetRolesForUser 또는 GetUsersInRole 메서드를 지원하려면 양식보기를 사용하고 있습니다.

function (doc, meta) { 
if(meta.type != 'json') 
{ 
    return; 
} 

if (doc.type == "roleprovider.user-role") 
{ 
    if(doc.application && doc.user && doc.role) 
    { 
     emit([doc.application, "user:" + doc.user, doc.role]); 
     emit([doc.application, "role:" + doc.role, doc.user]); 
    } 
}} 

그래서 모든 사용자에 대해 역할 매핑을하면 뷰에 2 행이 출력됩니다. 첫 번째 기능은 사용자가 어떤 역할에 속해 있는지 조회 할 수있게 해줍니다. 두 번째 역할은 역할에 속합니다. .NET 공급자는 단순히 쿼리를 사용하는 GetRolesForUser 또는 GetUsersInRole을 기반으로 필요한 "user :"또는 "role :"접두어를 붙이면됩니다.

이제 질문에이 모든 것이 합리적이고 사소하고 논리적 인 것처럼 보입니다. 그러나 처음으로 나는 Couchbase와 협력하여이 문제가있는 트랩에 빠졌는지 궁금한가요? 명백한 대안 접근법은 2 개의 뷰를 사용하는 것이지만, 필자는 독서에서 디자인 문서의 수를 줄이거 나 그 안의 뷰의 수를 유지하는 것이 최선이라고 언급 한 것을 보았습니다. 페리 크루그의 대답은 couchbase views per bucket discussion, 여기에서 그는 '하나의 색인에서 여러 개의 서로 다른 검색어를 생성'하려고 애쓴다. 그래서 기본적으로 저는 위에서 설명한 접근 방식이 페리의 말에 대해 처방하는지, 아니면 제가 속임수를 쓰고 자신을 고통스럽게 만들 것인지 궁금합니다.

모든 포인터 주셔서 감사합니다.

답변

0

(참고 :. 아직 답을하지, 그리고 그것을 다른 사람이 관심을 수 있기 때문에 고대의 질문을 부활) 일반적으로

귀하의 접근 방식은 소리입니다. 그러나 실제로 성능 문제가 발생하지 않는 한,이 경우 쿼리 유형별로 하나의보기를 고수 할 것입니다. 여러 개의 쿼리를 단일 뷰에 결합하면 Couchbase가 뷰를 빌드하는 데 필요한 작업량이 줄어들므로 두 배의 인덱스를 스캔해야하므로 각 쿼리의 비용이 증가합니다. 동시에 다른 많은 뷰를 사용하지 않는다면 뷰를 분리하여 보관할 것입니다. 사실 Couchbase가 여러 인덱서 스레드에 의해 동시에 처리되도록 서로 다른 디자인 문서에 넣을 수도 있습니다. 아직 존재하지 않는 성능 문제를 조기에 최적화 할 필요는 없습니다. 간단한 솔루션으로 먼저 이동 한 다음 필요한 경우 최적화하십시오.

쿼리 읽기에서 성능 문제가 발생하면보기에서 키/값 기반 방식으로 이동하는 것이 좋습니다.특히 모든 응용 프로그램 사용자 및 응용 프로그램 역할 쌍에 대해 별도의 문서를 저장하고 전자 및 사용자에게 역할 목록을 추가합니다. 즉, 본질적으로 색인을 유지 관리하지만 결국 읽기 대기 시간이 어느 정도 향상됩니다. 추가 작업이있는 세트를 유지 관리하는 방법은 this blog을 참조하십시오.

예, 한 단락에서 조기 최적화를 옹호하고 다음 번에 성능 최적화를 제안하는 것이 아이러니입니다. 그래서 뷰의 접근 방식이 수용 가능한 성능을 제공하는지 여부를 먼저 테스트해야한다는 점을 강조하고 싶습니다. 가장 합리적인 응용 프로그램의 경우에는 그렇게 할 것입니다. 결국 더 나은 성능이 필요하다는 것을 알게되면 두 번째 대안을 살펴보십시오.