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

Я работаю над проектом, включающим большое количество данных с восхитительного сайта. Доступны данные «Дата, Идентификатор пользователя, URL, Теги» (для каждой закладки).

Я нормализовал свою базу данных до 3NF, и из-за характера запросов, которые мы хотели использовать в комбинации, я сократил до 6 таблиц ... Однако дизайн теперь выглядит хорошо, когда большой объем данных находится в базе данных, большинству запросов нужно объединить как минимум 2 таблицы, чтобы получить ответ, иногда 3 или 4. Сначала у нас не было проблем с производительностью, потому что для тестирования мы не добавляли слишком много данных в базу данных. Теперь, когда у нас много данных, простое объединение очень больших таблиц занимает много времени, и для нашего проекта, который должен быть в реальном времени, это катастрофа.

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

Спасибо.

1 Ответ

13 голосов
/ 10 апреля 2010

Поскольку вы спросили о том, как крупные компании (в целом) подходят к этому:

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

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

Вы мало говорите о том, какую настройку вы сделали, например,

  • Используете ли вы таблицы MyISAM или InnoDB? Их производительность (и не в последнюю очередь их особенности) радикально отличается для разных рабочих нагрузок.
  • Правильно ли проиндексированы таблицы в соответствии с выполняемыми вами запросами?
  • Запустите EXPLAIN для всех ваших запросов - это поможет вам определить ключи, которые можно добавить / удалить, выберите правильные ключи, сравните запросы (SQL оставляет вам много возможностей для выполнения одних и тех же задач)
  • Вы настроили кеш запросов? Для некоторых рабочих нагрузок кэш запросов (по умолчанию включен) может вызвать значительное замедление.
  • Сколько памяти у вашей коробки, и настроен ли mysql, чтобы воспользоваться этим?
  • Используете ли вы файловую систему и настройку рейда для базы данных?
  • Иногда требуется небольшая ненормализация.
  • Разные продукты баз данных будут иметь разные характеристики, MySQL может быть невероятно быстрым для некоторых приложений и медленным для других.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...