Должны ли мы начать с нескольких мелкозернистых баз данных для приложения, которое может масштабироваться - PullRequest
2 голосов
/ 10 августа 2010

Мы разрабатываем новый веб-сайт электронной коммерции и впервые используем NHibernate.В настоящее время мы разделяем наши данные на несколько баз данных SQL Server, разделенных по областям функциональности.Таким образом, у нас есть один для UserInfo, один для заказов, один для ProductCatalogue и так далее ...

Наше решение действительно оправдано в два раза:

  1. на сайтеПотенциал быть ОГРОМНЫМ (это новый веб-сайт для одного из крупнейших онлайн-брендов в Великобритании), и мы чувствуем, что, разделив наши данные по функциональным направлениям, мы сможем переместить базы данных на свои собственные серверы, что даст нампростой маршрут масштабирования, если он нам нужен;

  2. моя команда всегда работала таким образом - отчасти вследствие следования шаблону MS Commerce Server из предыдущих проектов.

Однако, читая об этом решении в интернете, мы обнаруживаем, что нормальный отклик на такую ​​модель крайне скучен.«Создайте больше работы для разработчиков сейчас, чтобы создавать больше работы для разработчиков позже» - один из примеров комментария от переполнения стека!

Кроме того, NHibernate гораздо проще использовать только с одной базой данных (только одна SessionFactoryтребуется).И зная, что переполнение стека долгое время сбегало только с одного ящика, я думаю, что, возможно, нам не следует пытаться быть такими умными.

Итак, мой вопрос: «Правы ли мы, полагая, что использованиедетализированные базы данных могут увеличить нашу способность к масштабированию или мы должны пожертвовать этим для облегчения разработки "?

Ответы [ 3 ]

5 голосов
/ 10 августа 2010

Почему бы вам просто не спроектировать свою базу данных должным образом и не поместить файлы на соответствующий диск? При необходимости используйте кластер. Создание нескольких баз данных не является изначально масштабируемым решением. Также - перекрестная ссылочная целостность базы данных? Удачи.

Какое у вас определение "ОГРОМНОЕ"? SQL Server может работать с массивными базами данных, но одна вещь, которую я узнал, состоит в том, что люди часто понятия не имеют, что составляет много данных.

0 голосов
/ 07 октября 2011

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

Например: если вы решаете регистрировать каждое посещение / посещение сайта в БД, вы, вероятно, должны хранить это в отдельной БД.

Причина, по которой вы должны рассмотреть: 1. Огромное количество транзакций - скажем, сотни тысяч / сек. Наличие некритичных несвязанных вещей в отдельной БД гарантирует, что из-за этого будут избегаться споры.

  1. Восстановление, DBCC CHECKDB, время резервного копирования. Если вы поместите несвязанные некритические данные в основную БД, вы существенно увеличите размер БД, и это повлияет на эти операции. Наличие его в отдельной БД поможет вам повысить производительность этих операций.
0 голосов
/ 10 августа 2010

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

Поэтому я не могу сказать, хорошая ли ваша идея, я никогда не пробовал.«Моя команда всегда работала таким образом» - аргумент является основной движущей силой для многих решений, и я даже не могу сказать, что это всегда неправильно.

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

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

...