Многопользовательская база данных. Одна коллекция или один дБ на одного арендатора?

Для многопользовательской архитектуры для веб-приложения, использующего базу данных, ориентированную на документы, я вижу два возможных варианта:

  • Наличие одной базы данных на каждого арендатора, а коллекции логически разделяют различные типы объектов.
  • Наличие одной коллекции на каждого арендатора, и все пользовательские данные хранятся в одной базе данных, с каким-либо флагом или идентификатором типа объекта в каждой записи.

Были ли проведены какие-либо исследования или была подготовлена ​​какая-либо документация относительно этих двух вариантов и различий между ними?

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

Помимо вопросов скорости / эффективности, можно ли сказать что-то еще об этом, что могло бы повлиять на решение?

РЕДАКТИРОВАТЬ Я знаю, что некоторые термины могут быть специфичны для базы данных, так что для всех интересно, я конкретно имею в виду MongoDB.

1 ответ

Я бы не хотел, чтобы коллекции для конкретного арендатора. В моем приложении я обычно использую имена в жестком коде, точно так же, как я бы использовал имена таблиц в жестком коде, если бы я использовал таблицы SQL. Там будет один comments Коллекция, которая хранит все комментарии для блога. Я не хотел бы иметь дело с именами коллекций, как comments_tenant_1 а также comments_tenant_2, потому что 1) это кажется подверженным ошибкам, и 2) сделало бы код приложения более сложным (имена коллекций пришлось бы заменить функциями, которые вычисляли имя коллекции). И 3) количество коллекций в одной базе данных может вырасти огромным, что сделает список всех коллекций выглядящим пугающим, а также MongoDB не создан для того, чтобы иметь очень много коллекций (см. Ссылку в комментарии ниже вашего вопроса, которая Дэвид Б. опубликовал сообщение https://docs.mongohq.com/use-cases/multi-tenant.html).

Однако имена баз данных не связаны со структурами данных приложений, и вы можете предоставлять разрешения для баз данных (но не для отдельных коллекций). Таким образом, одна база данных на арендатора может быть разумной. Как может быть за документ tenant_id поле в единой базе данных для всех арендаторов (см. вышеупомянутую ссылку).

Другие вопросы по тегам