2012-06-28 3 views
7

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

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

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

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

+0

нашел эту ссылку http://stackoverflow.com/questions/696682/mysql-many-tables-or-many-databases –

+0

также эта ссылка http://forums.mysql.com/read.php?125,181078 , 181078 –

ответ

3

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

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

Если вам необходимо включить балансировку нагрузки, модель «префикс» также будет легче масштабироваться, поскольку в большинстве современных СУБД есть аддоны/функции для поддержки этого типа функций, вместо того, чтобы устанавливать это несколько раз для каждого экземпляра для каждой учетной записи.

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

Единственный потенциальный недостаток - безопасность. И в большинстве случаев даже наличие нескольких серверов не устранит проблему безопасности.

0

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

Если по какой-либо другой причине (как я сказал ранее), чтобы допускать изменения.

3

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

Что касается производительности, вы можете позволить СУБД обрабатывать кластеризованные/распределенные материалы, поэтому вам не придется беспокоиться об этом. Разделение данных само по себе не будет делать вещи быстрее, так как СУБД может (как правило) выполнять гораздо лучшую работу, а затем вы можете.

3

У нас есть работа с несколькими базами данных - и разные поставщики баз данных (DB2, Oracle, MySQL.) ОГРОМНАЯ ПИТА, хотя часть этой боли может исходить из того факта, что каждая база данных принадлежит другой группе , Но если вам когда-нибудь понадобится присоединиться к данным (вы считаете, что обстоятельства редко бывают СЕЙЧАС, но вы ждете ...) в базе данных (в отличие от приложения) вы будете жаловаться на решение с несколькими серверами.

0

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

Решение, для которого я пошел, - это делегированная аутентификация, одна служба, которая занимается только проверкой подлинности и выдает проверяемые утверждения об идентичности. Это может быть связано с авторизацией. Чтобы получить представление о том, что требуется, вы можете посмотреть проект OpenID и OAuth2 для авторизации.

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