Запустите с одной базы данных. Данные/функциональность разделения, когда проект требует его.
Вот то, что мы можем узнать из LinkedIn:
Источник:
Для приложений SaaS Вы используете несколько баз данных для нескольких арендаторов, но обычно не разделяете его мудрый модулем.
Это - наиболее распространенная модель, которую я видел в проектировании приложений SaaS. Ваша основная схема копируется для каждого арендатора, которого Вы добавляете к своему приложению.
Высокая Масштабируемость является хорошим блогом для масштабирования приложений SaaS. Как упомянуто, разделяя таблицы через базы данных, поскольку Вы предложили, обычно плохая идея. Но подобное понятие является sharding, где Вы сохраняете то же (или подобный) схемой, но разделяете данные по нескольким серверам. Например, пользователи 1-5000 находятся на server1 и пользователях 5000-10000 на server2. В зависимости от запросов Ваше использование приложения это может быть эффективный способ масштабироваться.
Наличие единой базы данных является лучшим для целостности данных, потому что затем можно использовать внешние ключи. У Вас не может быть этой встроенной целостности данных при разделении данных на несколько баз данных. Это не проблема, если Ваши данные не связаны, но если бы они связаны, для Вашей одной базы данных было бы возможно содержать данные, которые несовместимы с другой базой данных. В этом случае необходимо было бы написать некоторый код, который сканирует базы данных для непоследовательных данных регулярно, таким образом, можно обработать его соответственно.
Однако несколько баз данных могут быть необходимыми при необходимости в сайте/приложении, чтобы быть хорошо масштабируемыми (например, интернет-масштаб). Например, Вы могли разместить каждую базу данных по различному физическому серверу.
Разделение базы данных функциями не могло бы быть хорошей идеей, если Вы не видите, что убедительные доказательства предлагают потребность. Часто Вы, возможно, должны были бы обновить две базы данных как часть сингла, с которым транзакции - и распределенные транзакции намного больше тяжелее для работы. Кроме того, если база данных должна быть разделена, Вы смогли использовать sharding.
Существует множество способов выполнить его, но проблемы коллективной аренды идут глубже, чем просто модель данных. Я очень не хочу включить продукт, но выезд SaaSGrid моим компания, я работаю в, Apprenda.We're облачная операционная система, которая позволяет Вам писать единственному арендатору приложения SOA (не стесняются использовать NHibernate для доступа к данным), который автоматически вводит коллективную аренду в Ваше приложение. При публикации приложения можно сделать, вещам нравится, выбирают модель данных (изолированная база данных или совместно использованный), и SaaSGrid развернется соответственно, и приложение будет работать без любых изменений кода - просто пишут код, как будто это было для единственного арендатора!
Зачем вообще использовать базу данных?
Я думаю, что это хорошая идея - использовать распределенные системы хранения, такие как Hadoop, Voldemort (project-voldemort.com, разработанный и используемый LinkedIn).
Я думаю, что db хорош для чувствительных данных, таких как денежные операции, но для всего остального вы можете использовать распределенные хранилища.
Спросите себя: Что Вы получаете путем перемещения всего в отдельные базы данных?
Много боли с точки зрения управления было бы моим предположением. Я более стремился бы лично иметь все в единой базе данных и если Вы поражаете проблемы, которые не могут быть решены единой базой данных, позже затем перемещают данные в несколько баз данных.
Сохраните это естественным дизайном (денормализуйте столько же по мере необходимости, нормализуйте так же меньше как требуется). Разделите Модель DB на ее модули и помните о сервисно-ориентированных принципах путем противостояния на данные с сервисом (который владеет данными).