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

#database #postgresql #security #multi-tenant

#База данных #postgresql #Безопасность #многопользовательский

Вопрос:

Я разрабатываю веб-приложение для управления запасами, в котором изначально я собирался использовать единую базу данных для каждого клиента. Теперь у меня есть информация о том, что некоторые клиенты захотят некоторой настройки, поэтому им может потребоваться некоторая конкретная информация, которой может не быть в моем базовом приложении. Кроме того, некоторые клиенты могут в будущем захотеть, чтобы это приложение хранилось локально на их сервере магазина / коммерции, поэтому им может понадобиться вся их информация. Я не думаю, что производительность будет проблемой, если я использую единую базу данных, по крайней мере, не с несколькими клиентами. Однако использование базы данных для каждого пользователя может усложнить работу с точки зрения производительности при рассмотрении пулов соединений.

Итак, какой может быть лучший подход здесь? При необходимости я предоставлю дополнительную информацию.

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

Я планирую использовать postgresql и node.js для моего серверной части..

Спасибо, ребята!

Ответ №1:

Я вижу две проблемы, которые вы пытаетесь решить

  1. Как можно разработать мое приложение таким образом, чтобы любой пользователь мог разместить его в своей собственной среде

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

  2. Как мое приложение может поддерживать нескольких пользователей на централизованном хосте

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

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

Комментарии:

1. Спасибо за ответ! 1 — Итак, изначально я думал о том, что, поскольку у меня была бы целая база данных для этого пользователя, было бы намного проще экспортировать их данные. Процесс будет ручным, пользователь не сможет просто сохранить приложение и данные на своем локальном компьютере, это сделает наша местная команда поддержки.

2. Да, это правильно. Я бы спроектировал приложение так, чтобы оно также было портативным. Это означает, что я бы создавал развертывания для каждого клиента, чтобы решить проблему, а не пытался решить ее в приложении позже. Таким образом, в зависимости от пользователя, вы могли бы направить их к их развертыванию.

3. 2 — Я думал о создании разных таблиц для хранения разных данных в зависимости от потребностей пользователя, но, как вы указали, это может стать очень запутанным, учитывая дизайн базы данных и приложения (мне пришлось бы обрабатывать динамическое состояние).

4. Из того, что я понял, вы предлагаете создавать экземпляры приложения для каждого пользователя, правильно?

5. Да, в значительной степени. Это приведет к переносу развертываний на любой сервер, который хотят клиенты, если они больше не хотят, чтобы вы размещали приложение и данные