Доступен ли подход CouchDB для пользователей к пользователям для пользователей с большим количеством общих данных?

Я хочу реализовать webapp - канал, который объединяет данные из разных источников и отображает их пользователям. Пользователь должен иметь возможность видеть только те элементы фида, которые у него есть для чтения (например, потому что они принадлежат к проекту, членом которого он является). Тем не менее, элемент подачи может (и будет) отображаться многими пользователями.

Я бы очень хотел использовать CouchDB (в основном из-за прохладного перехода к ленте и отображения/уменьшения). Я думал о том, чтобы реализовать приложение как чистый кучапп, но у меня проблемы с моделью разрешений. AFAIK, в CouchDB нет разрешений для каждого документа, и это обычно реализуется с использованием баз данных для каждого пользователя и репликации.

Но когда есть много совпадений между тем, что видят различные пользователи, это приведет к множеству накладных расходов... материал будет реплицироваться повсюду и дублироваться во многих базах данных. Мне нравится элегантность этого подхода, но огромные накладные расходы просто чувствуют себя как разбойник... (скажем, у меня 50 пользователей, и все они видят одни и те же данные...).

Любые идеи, как на это, пожалуйста? Альтернативное решение?

Ответ 1

Вы можете применять разрешения на чтение, как описано в авторизации CouchDB на основе базы данных.

Для разрешений на запись вы можете использовать функции проверки, как описано в CouchDB The Definitive Guide - Security.

Вы можете создать базу данных для каждого проекта и обеспечить доступ к этим разрешениям, тогда все данные будут эффективно распределены между пользователями. Если пользователь сам делится кормом и нуждается в разрешениях на это, вы можете сделать пользователя "проектом", так что везде применяется одна и та же логика.

Используя этот проект, вы можете авторизовать пользователя или группу пользователей (роли) для каждого проекта.

Ответ 2

Помимо того, что (как уже сказал victorsavu3), обработка вашего файла auth в прокси между вашим приложением и кушеткой, есть только две другие альтернативы, о которых я могу думать.

Сначала нужно просто не заботиться, диск дешев и наличие нескольких копий данных может показаться большим количеством ненужного дублирования, но оно значительно упрощает вашу архитектуру, и вы получаете некоторые автоматические преимущества, такие как простое масштабирование для обработки нагрузки (просто перемещая некоторые из ваших пользователей на другие серверы).

Во-вторых, чтобы разделенные данные были разделены на другую БД. Это иногда ограничивает возможности, которые вы можете делать в представлениях (например, "Связанные документы"), но это не очень важно во многих ситуациях.