Подтвердить что ты не робот

Разработка базы данных SaaS - Несколько баз данных? Трещина?

Я видел приложения SaaS, размещенные разными способами. Разве хорошая идея разделить функции и модули на несколько баз данных? Например, поместив такие вещи, как таблица "Пользователь", в одну БД и специальные/специальные таблицы на другой БД и, возможно, другие общие общие таблицы в другой БД?

4b9b3361

Ответ 1

Начните с одной базы данных. Разделите данные/функциональность, когда проект требует этого.

Вот что мы можем узнать из LinkedIn:

  • Единая база данных не работает
  • Ссылочная целостность будет невозможна
  • Любая потеря данных является проблемой.
  • Кэширование хорошее, даже если оно умеренно эффективно
  • Нельзя недооценивать траекторию роста.

Источник:

Архитектура LinkedIn

Архитектура связи LinkedIn

Ответ 2

Высокая масштабируемость - хороший блог для масштабирования приложений SaaS. Как уже упоминалось, разбиение таблиц между базами данных, как вы предлагали, обычно является плохими идеями. Но аналогичная концепция - это очертание, где вы сохраняете одну и ту же (или аналогичную) схему, но разделяете данные на нескольких серверах. Например, пользователи 1-5000 находятся на сервере1, а пользователи - 5000-10000 на сервере2. В зависимости от запросов, которые использует ваше приложение, это может быть эффективным способом масштабирования.

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

Разделение базы данных по функциям может быть не очень хорошей идеей, если вы не увидите убедительных доказательств, указывающих на необходимость. Часто вам может потребоваться обновить две базы данных как часть одной транзакции, а распределенные транзакции намного сложнее работать. Кроме того, если база данных должна быть разделена, вы можете использовать осколки.

Ответ 6

Существует множество способов его достижения, но проблемы многопользовательской работы идут глубже, чем просто модель данных. Мне не нравится подключаться к продукту, но проверьте SaaSGrid моей компанией, над которой я работаю, Apprenda. Это облачная операционная система, которая позволяет вам писать однопользовательские SOA-приложения (не стесняйтесь использовать NHibernate для доступа к данным), которые автоматически внедряют многопользовательский доступ в ваше приложение. Когда вы публикуете свое приложение, вы можете делать такие вещи, как выбор модели данных (изолированная база данных или общий доступ), и SaaSGrid будет развертываться соответствующим образом, и ваше приложение будет работать без каких-либо изменений кода - просто напишите код, как если бы это было для одного арендатора!

Ответ 7

Зачем вообще использовать базу данных?

Я считаю хорошей идеей использовать распределенные системы хранения, такие как Hadoop, Voldemort (project-voldemort.com, разработанные и используемые LinkedIn).

Я думаю, что db хорош для чувствительных данных, таких как денежные операции, но для всего остального вы можете использовать распределенные хранилища.

Ответ 8

Спросите себя: что вы получаете, перемещая все в отдельные базы данных?

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

Ответ 9

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