Я создал это веб-приложение (php & mysql), которое хранит информацию для различных организаций (в настоящее время около 20 клиентов).
В текущем сценарии информация о клиенте хранится в отдельных базах данных, поэтому имеется 20 клиентских баз данных и 1 основная база данных.
Одним из основных преимуществ здесь является то, что, поскольку каждая клиентская база данных изолирована, нумерация клиентских артефактов (отчетов, аудитов) и т. Д. Упорядочена; давая нашим клиентам чувство безопасности.
Каждая БД имеет примерно 15 таблиц, и большинство строк в таблице составляют около 2000. Ожидается, что это будет максимум до 5000 записей.
Управление одним изменением уровня базы данных означает изменение 20 баз данных, но в редких случаях, когда мне нужно внести такое изменение, я использую скрипт, который делает это в одном вызове функции.
Мы заключили соглашение о совместном хостинге, и наш провайдер предоставляет нам ограниченное количество. баз данных; и вот что заставило меня задуматься о централизации базы данных; так что ВСЕ данные клиента могут быть сохранены в базе данных master.
Конечно, возникают некоторые важные проблемы:
а. Сохранение последовательности артефактов (это можно устранить путем создания дополнительного ссылочного ключа) b. Скорость и производительность (в этом случае я могу создавать индексы, чтобы ускорить процесс) c. Безопасность: это будет управляться как каждый запрос, который выбирает информацию о клиенте. также будет отслеживать их client_id
В будущем нам может потребоваться сравнить наборы данных одной организации с другой, но я считаю, что этого можно добиться и на централизованной базе данных. Я несколько склонен (по соображениям производительности и удобства обслуживания) перейти на централизованную базу данных.
Считаете ли вы, что переход на централизованную базу данных имеет больше смысла, чем пребывание на прежнем уровне (в отдельных базах данных)?
Спасибо за ваш совет.
Ответы:
Есть наследственные риски и выгоды для обеих систем. Я работал в финансовой фирме, которая поддерживала примерно 40 клиентов (национальные банки) на 1 базе данных. Затем мы приобрели другую компанию, которая продала подобное программное обеспечение и имела 1 базу данных на клиента. Наконец, компания обанкротилась, и нам пришлось экспортировать все пользовательские данные. Вот с кем я работал и нашел:
Профи Единой БД:
Минусы Одиночной БД:
Плюсы нескольких БД:
Против нескольких БД:
В конце моя рекомендация, увидев и сделавшая и то, и другое - иметь «дисциплину»! Я думаю, что выбор multi-db немного лучше, потому что он защищает вас, но вы никогда не сможете позволить своим клиентам сделать выбор, который заставит вас добавить функциональность только к ним, или вы попадете на путь отказа.
источник
Я бы имел отдельную базу данных для отдельных клиентов. Клиент может потребовать это по соображениям безопасности - т.е. только его сайт имеет доступ к своим данным. Это также означает, что если клиент захочет переместить свои данные, им будет намного легче управлять.
Это также означает, что если есть проблема с базой данных одного клиента, это не влияет на все остальные.
Если вы хотите сравнить данные между клиентами, то вы должны сделать это отдельно.
Если у вас заканчиваются базы данных, которые у вас могут быть, возможно, вам стоит подумать о смене вашего хост-провайдера.
источник
Единственная причина, по которой у меня не было бы отдельной базы данных для каждого клиента, заключается в том, что у вас будет 100 или 1000 клиентов / баз данных. Это может быть очень неудобно, включая внесение изменений в базу данных или внесение изменений во все базы данных. Действия, которые происходят с большим количеством нескольких баз данных, также могут быть медленными, так как вам нужно открывать (и, следовательно, закрывать) так много таблиц.
Но кроме этого случая, я думаю, что несколько баз данных лучше.
Одно преимущество, которое не может быть важным, но может быть полезным, состоит в том, что каждый клиент получает свои собственные последовательные идентификаторы (вместо того, чтобы пропустить группу, потому что другой клиент добавил записи).
Кроме того, несколько баз данных позволяют легко настраивать под-таблицы (например, тип телефона) для каждого клиента без необходимости указания идентификатора родительской записи в этих таблицах.
источник
Сначала последовательность артефактов. Я предполагаю, что вы используете целочисленные первичные ключи, чтобы обеспечить это. На самом деле у вас должен быть отдельный столбец «номер артефакта». ПК должны быть ПК и ничего больше. Люди говорят о «естественных ключах» и тому подобное, и я съеживаюсь Всякий раз, когда вы полагаетесь на PK, чтобы быть больше, чем идентификатор, он возвращается, чтобы укусить вас. Если вы хотите узнать последовательность чего-либо, сохраните дату или порядковый номер.
Я думаю, что в вашем случае управление конфигурацией приведет вас к единой базе данных. Посмотрите, сколько времени вам потребуется на обслуживание и обновление баз данных. Какие расходы связаны с каждым выпуском программного обеспечения? Также подумайте о стоимости, когда вы получаете нового клиента и должны создать БД и настроить приложение для него. Все может быть автоматизировано, вопрос в том, будет ли это стоить, когда у вас будет 100 баз данных?
В дальнейшем легче масштабировать (разбиение на разделы, оборудование, разделение и т. Д.) Одну базу данных, чем сделать то же самое для 100 баз данных.
Я думаю, что другие постеры сделали несколько отличных замечаний, поэтому я не буду их обсуждать.
источник
Чтобы добавить к доводам "за" / "против", перечисленным до сих пор:
Плюсы нескольких баз данных:
Проблемы с блокировкой исключены; у нас есть базы данных, где клиенты могут запускать DDL-изменения в некоторых таблицах. Для больших таблиц (> 2 м записей) это блокирует таблицу на значительное время. Единственные люди, которые находятся в невыгодном положении, - это их собственные пользователи, так что это приемлемо.
Гибкость - у некоторых клиентов есть конкретные пожелания относительно данных, которые они хотят хранить; мульти-базы данных позволили нам гибко изменять их базу данных, без необходимости загромождать модель данных для других клиентов.
Минусы:
Удачи в выборе!
источник
Я знаю, что вы уже выбрали ответ, но похоже, что есть другое решение, которое не было предложено:
Переместите все в одну базу данных, но создайте таблицы для каждого клиента, используя префикс, например так:
Это своего рода лучшее из обоих миров.
источник