2012-05-15 1 views
11

다양한 소스의 데이터를 통합하여 사용자에게 표시하는 피드 인 webapp을 구현하고 싶습니다. 사용자는 읽기 권한이있는 피드 항목 (예 : 자신이 속한 프로젝트에 속해 있기 때문에) 만 볼 수 있어야합니다. 그러나 피드 항목은 많은 사용자가 볼 수 있습니다.공유 데이터가 많은 사용자의 경우 CouchDB 사용자 별 데이터베이스 접근이 가능합니까?

저는 CouchDB를 사용하고 싶습니다 (주로 멋진 _changes 피드와 map/reduce보기 때문에). 나는 순수 couchapp로 애플 리케이션을 구현하는 것에 대해 생각하고 있었지만, 나는 권한 모델에 문제가있다. AFAIK, CouchDB에는 문서 별 권한이 없으며 일반적으로 사용자 별 데이터베이스 및 복제를 사용하여 구현됩니다.

그러나 여러 사용자가 보는 것과 많은 부분이 겹쳐지면 오버 헤드가 많이 생깁니다 ... 모든 곳에서 복제되고 많은 데이터베이스에 복제됩니다. 나는이 접근법의 우아함을 좋아하지만 엄청난 오버 헤드는 거래가처럼 느껴집니다 ... (50 명의 사용자가 있으며 모두 동일한 데이터를 볼 수 있다고 가정 해 봅시다).

어떻게 생각하세요? 다른 해결책?

답변

7

CouchDB Authorization on a Per-Database Basis에 설명 된대로 읽기 권한을 시행 할 수 있습니다.

쓰기 권한의 경우 CouchDB The Definitive Guide - Security에 설명 된대로 유효성 검사 기능을 사용할 수 있습니다.

각 프로젝트에 대해 데이터베이스를 만들고 거기에 권한을 적용하면 모든 데이터가 사용자간에 효율적으로 공유됩니다. 사용자가 피드를 직접 공유하고 그에 대한 권한이 필요한 경우 사용자를 "프로젝트"로 만들 수 있으므로 동일한 논리가 어디에서나 적용됩니다.

이 디자인을 사용하여 각 프로젝트의 사용자 또는 사용자 그룹 (역할)에 권한을 부여 할 수 있습니다.

+0

불행히도 프로젝트 당 권한 모델이 내 요구에 맞게 충분히 미세하지 않습니다. 특정 프로젝트에 속한 일부 항목 만 보려면 일부 사용자가 필요합니다. –

4

앱과 소파 사이의 프록시에서 읽기 권한을 처리하는 것 외에 (victorsavu3처럼) 내가 생각할 수있는 다른 두 가지 대안이 있습니다.

우선주의해야 할 점은 디스크가 저렴하고 여러 개의 데이터 사본이 불필요한 복제본처럼 보일 수 있지만 아키텍처가 대폭 간소화되고 부하를 처리하기위한 쉬운 확장과 같은 자동 이득이 발생한다는 것입니다. 일부 사용자의 DB를 다른 서버로 옮김으로써).

두 번째는 공유 데이터를 다른 DB로 분할하는 것입니다. 이것은 종종보기에서 할 수있는 일을 제한 할 것입니다 (예 : "링크 된 문서"). 그러나 이것은 많은 경우별로 중요하지 않습니다.

+1

디스크 공간이 저렴합니다 -하지만 내 경우에는 결국 디스크 공간이 많이 사용되어 *이 도로를 사용하지 않기로 결정했습니다. DB 분할 - 나는 그것에 대해서도 생각했지만 인증을 처리하는 CouchDB 위에가는 서버를 실행하는 것보다이 접근법을 더 복잡하게 만들 것이라고 생각합니다. –

+0

그래, 좋은 해결책이야. – smathy