2012-09-06 3 views
1

나는 다양한 소스에서 오는 데이터를 저장하기 위해 CouchDB를 사용하고 ad-hoc 쿼리를 허용하기 위해 couchdb-lucene을 사용하고 있습니다. 데이터를 피드에 표시하고이 피드를 필터링 할 수 있기 때문에 중요합니다. CL은 완벽하게 보입니다.CouchDB-lucene 및 인증 된 사용자를위한 ad-hoc 쿼리

그러나 피드 앱에 권한을 추가하려고합니다. 사용자는 볼 수있는 권한이있는 경우에만 피드 항목을 볼 수 있어야합니다.

지금 은 임시 쿼리를 실행하고 현재 인증 된 사용자가을 읽을 수있는 피드 항목 만 반환 할 수 있기를 바랍니다.

내가 알아낼 수있는 유일한 해결책은 다른 사용자에 대한 모든 권한을 저장하는 각 피드 항목에 '사용 권한'필드를 추가하는 것이 었습니다 (분명히이 항목에 대한 사용 권한이없는 사용자는 건너 뜁니다 전혀)

permissions: [{user_id: '123', read: true, write: true}, ...] 

이 배열을 CL로 색인화합니다.

이 작업이 효과적 일지 모르지만 피드 항목에 사용 권한 메타 데이터를 중첩시켜야하는 불편 함을 느낍니다. 개별 항목을 유지하는 것보다 더 나은 해결책이 될 수도 있지만, 여기에 선택의 여지가없는 것 같습니다.

다른 솔루션 (물론 CouchDB를 덤프하는 것만 제외하고)은 사용 권한을 염려하지 않고 특별 쿼리를 실행 한 다음 모든 "내 항목"을 선택하는 서버에서 두 번째 쿼리를 실행하고 교차로를 설정하십시오. 하지만 그 세트는 거대 할 수 있습니다 (그리고 만약 내가 그것을 청크, 그것은 아마도 많은 DB를 요청할 필요합니다 => 천천히).

내 해결책은 괜찮습니까? 아니면 더 좋은 점이 있습니까? 아니면 CouchDB가 그러한 쿼리에 적합하지 않습니까?

건배!

답변

0

해당 권한 데이터를 문서 자체에 보관하면 올바른 방법을 사용할 수 있습니다. 나중에 사용자 권한을 확인할 수있는보기를 빌드하는 가장 쉬운 방법입니다. 그러니 걱정하지 말고 그 방향으로 흐르게하십시오. SQL과 RDBMS를 사용할 때 이전의 테이블에서 각 테이블을 정상화하고 싶을 때 데이터가 중첩되는 것이 좋지 않을 것입니다. 이번에는 완전히 다릅니다 :)

Btw, CouchDB에서 "JOINS"를 수행 할 수있는 유일한 방법은 Linked Documents입니다. 관심이 있다면 그렇게해볼 수 있습니다. 그러나 뷰를 만드는 동안 링크 된 문서를 볼 수는 없습니다.