Сведения о вопросе

FUTER

03:27, 12th August, 2020

Одна база данных или много?

Просмотров: 550   Ответов: 11

Я разрабатываю веб-сайт, который будет управлять данными для нескольких объектов. Данные не являются общими для всех объектов, но они могут принадлежать одному и тому же клиенту. Клиент может захотеть управлять всеми своими сущностями из одного "dashboard". Так что я должен иметь одну базу данных для всего, или держать данные разделены на отдельные базы данных? Есть ли лучшая практика? Каковы положительные / отрицательные стороны для того, чтобы иметь:

  • база данных для всего сайта (сущности имеет "customerID", данные имеет "entityID")
  • база данных для каждого клиента (данные "entityID")
  • база данных для каждой сущности (отношение база данных для клиента находится за пределами база данных)

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



  Сведения об ответе

+-*/

04:56, 23rd August, 2020

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

  1. Меньше = быстрее относительно запросов.
  2. Запросы гораздо проще.
  3. Нет риска случайно показать данные одного клиента другому.
  4. Одна база данных может представлять собой узкое место производительности, поскольку она становится большой (#сущностей увеличивается). Вы получаете своего рода построение в горизонтальной масштабируемости с 1 на объект.
  5. Легкая очистка данных по мере удаления клиентов или объектов.

Конечно, потребуется больше времени для обновления схемы, но по моему опыту изменения довольно редки после развертывания, а дополнения тривиальны.


  Сведения об ответе

9090

09:12, 10th August, 2020

Я думаю, что на этот вопрос трудно ответить без дополнительной информации.

Я прислоняюсь к краю одной базы данных. Правильно закодированные бизнес-объекты должны предотвратить забвение clientId в ваших запросах.

Тип используемой базы данных и способ ее масштабирования могут помочь вам принять решение.

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


  Сведения об ответе

SILA

00:39, 15th August, 2020

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


  Сведения об ответе

+-*/

05:36, 12th August, 2020

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


  Сведения об ответе

qwerty101

04:39, 13th August, 2020

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


  Сведения об ответе

COOL

19:51, 8th August, 2020

Использование единой базы данных значительно упростило бы ее обслуживание.


  Сведения об ответе

+-*/

12:07, 25th August, 2020

Это также зависит от вашего RDBMS например

С SQL серверными базами данных идет чип

С помощью Oracle можно легко разбить таблицы по клиентам "customerID", поэтому одна большая база данных может работать так же быстро, как и маленькая база данных для каждого клиента.

Однако каждый раз, когда вы выбираете ведьму, старайтесь скрыть ее как низкий уровень в вашем коде доступа к данным


  Сведения об ответе

SEEYOU

12:47, 12th August, 2020

Планируется ли развертывание кода в нескольких средах?

Если это так, то попробуйте сохранить его в пределах одной базы данных и иметь все ссылки на таблицы с префиксом пространства имен из файла конфигурации.


  Сведения об ответе

padenie

10:05, 16th August, 2020

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

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

Таким образом, мастер DB, поддержанный несколькими DBs для каждого клиента, может быть лучшим подходом,


  Сведения об ответе

screen

16:16, 9th August, 2020

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


  Сведения об ответе

PIRLO

13:19, 9th August, 2020

Я думаю, что вы должны выбрать наиболее реалистичный сценарий и не обязательно то, что клиент "may" хочет сделать в будущем. Если вы собираетесь продавать эту функцию (т. е. видеть все ваши объекты в одной панели мониторинга), то вам нужно либо найти решение (возможно, использовать панель мониторинга из нескольких баз данных), либо использовать одну базу данных для всего приложения.

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться