18

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

+0

Возможный дубликат [В чем преимущества использования единой базы данных для КАЖДОГО клиента?] (Http://stackoverflow.com/questions/13348/what-are-the-advantages-of-using-a-single- база данных для каждого клиента) – givanse 2014-02-06 08:42:29

ответ

29

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

Вот что мы можем извлечь из LinkedIn:

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

Источник:

LinkedIn architecture

LinkedIn communication architecture

0

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

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

+3

Как насчет производительности и масштабируемости? – Vyrotek 2008-09-16 03:26:44

3

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

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

3

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

12

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

8

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

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

0

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

1

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

1

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^