2010-04-09 2 views
8

Я работаю над проектом, включающим большой объем данных с восхитительного веб-сайта. Доступны следующие данные: «Дата, UserId, Url, Tags» (для каждой закладки).Дизайн базы данных для очень большого количества данных

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

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

Спасибо.

ответ

13

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

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

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

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

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

Спасибо вам за ответ. Честно говоря, я не думал о том, что вы упомянули здесь. Теперь я понял, что я много игнорировал, когда занимался разработкой базы данных. База данных использует MyISAM. Я прочитаю о том, что вы упомянули. большое спасибо – Hossein