7

Каковы наилучшие методы проектирования и нормализации базы данных для сайтов с высоким трафиком, таких как stackoverflow?Нормализовать или денормализовать сайты с высоким трафиком

Следует ли использовать нормализованную базу данных для ведения записей или нормализованную технику или их комбинацию?

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

или

Если основная база данных будет денормализованной но с нормированным видом на прикладном уровне для быстрых операций с базами данных?

или какой-либо другой подход?

ответ

5

Денормализация db для уменьшения количества соединений, необходимых для интенсивных запросов, является одним из многих способов масштабирования. Необходимость делать меньшее количество соединений означает меньшую нагрузку на дБ, а диск дешев.

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

The Art of Capacity Planning очень хорошо.

+4

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

+1

Правда, есть компромиссы с каждым решением. То, что работает, действительно зависит от структуры ваших данных. – BaroqueBobcat

1

Первое: Определите для себя, что означает, что высота-трафик:

  • 50,000 Page-Viewss в день?
  • 500.000 Просмотры страниц в день?
  • 5.000.000 Просмотры страниц в день?
  • еще?

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

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

Реляционная база данных может быть, если полностью оптимизирована, удивительно быстро, при соединении таблиц!

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

(Вы упомянули поиск, смотрите в Lucene, например или что-то подобное, если вам нужен полнотекстовой поиск.)

Лучшего лучших практиков ответа определенно: Это зависит ;-)

0

Для проекта, над которым я работаю, мы пошли на путь денормализованной таблицы, так как мы ожидаем, что наши основные таблицы будут иметь высокое отношение к чтению (вместо того, чтобы все пользователи попадали в одни и те же таблицы, мы их денормализовали и установить каждый «пользовательский набор» для использования определенного осколка).Вы можете найти здесь http://highscalability.com/ примеры того, как «большие сайты» справляются с объемом - Stack Overflow был недавно представлен.

10

Успешное попадание соединения часто завышено. Продукты базы данных, такие как Oracle, созданы для того, чтобы присоединиться к ней очень эффективно. Объединение часто рассматривается как плохое выполнение, когда реальным виновником является плохая модель данных или плохая стратегия индексации. Люди также забывают, что денормализованные базы данных работают очень плохо, когда речь идет о вставке или обновлении данных.

Главное, что нужно помнить, это тип приложения, которое вы строите. Большинство известных веб-сайтов не похожи на обычные корпоративные приложения. Вот почему Google, Facebook и т. Д. Не используют реляционные базы данных. В последнее время было много обсуждений этой темы, которая I have blogged about.

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

0

Не имеет значения, правильно ли вы кешируете.

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