Какой из этих проектов баз данных MySQL (прилагается) лучше всего подходит для высокопроизводительного чтения? - PullRequest
5 голосов
/ 15 июня 2011

Я администратор базы данных и разработчик в MySQL. Я пару лет работал с MySQL. Недавно я приобрел и изучаю O'Reilly High Performance MySQL 2nd Edition, чтобы улучшить свои навыки работы с расширенными функциями MySQL, высокой производительностью и масштабируемостью, потому что я часто разочаровывался в связи с отсутствием у меня предварительных знаний о MySQL (и в значительной степени, Я до сих пор).

В настоящее время я работаю над амбициозным веб-проектом. В этом проекте у нас будет достаточно контента и пользователей с самого начала. Я разработчик базы данных, и эта база данных должна быть очень быстрой (некоторые вставки, но в основном и более важные ЧИТАНИЯ).

Я хочу здесь обсудить эти требования :

  • Будет несколько видов предметов
  • Предметы имеют некоторые поля и отношения в common
  • Предметы также имеют некоторые поля и отношения специальные , которые отличают их друг от друга
  • Эти элементы должны быть перечислены все вместе, упорядочены или отфильтрованы по общим полям или отношениям
  • Предметы также должны быть перечислены только по типу (для предмета item_specialA)

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

Классический подход

На следующей диаграмме показан классический подход, о котором вы можете подумать в первую очередь, думая умом в базе данных: Диаграмма базы данных

Централизованный подход

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


  • Преимущества и недостатки каждого из них?
  • Какой подход вы бы выбрали или какие изменения вы бы применили, учитывая требования, замеченные ранее?

Спасибо всем заранее !!

Ответы [ 3 ]

1 голос
/ 16 июня 2011

У вас есть две разные стратегии отображения данных.То, что вы назвали «классической», - это «одна таблица на конкретный класс» в других источниках, а то, что вы назвали «централизованной», - «одна таблица на класс» ( Отображение объектов в реляционных базах данных: подробное сопоставление O / R ).У них обоих есть свои преимущества и недостатки (перейдите по ссылке выше).Запросы в первой стратегии будут выполняться быстрее (вам нужно объединить только 2 таблицы против 3 во второй стратегии).

0 голосов
/ 16 июня 2011

Если вы ищете в основном скорость, рассмотрите выборочное использование таблиц MyISAM, используйте централизованную таблицу «объект» и только одну дополнительную таблицу с правильными индексами в этой форме:

object_type | object_id | property_name | property_value
user        | 1         | photos        | true
city        | 2         | photos        | true
user        | 5         | single        | true
city        | 2         | metro         | true
city        | 3         | population    | 135000

и так далее ... поиск первичных ключей или индексированных ключей (например, object_type, object_id, property_name) будет происходить быстро. Кроме того, по мере появления новых свойств вам не нужно заканчивать 457 таблицами.

Это не совсем хорошо спроектированная и не полностью нормализованная база данных, и, если вы ищете большой долгосрочный сайт, вам следует рассмотреть возможность кэширования или, по крайней мере, использовать денормализованную парадигму, денормализованные таблицы mysql, подобные этой. , Redis, или, возможно, MongoDB.

0 голосов
/ 15 июня 2011

Я думаю, что вы должны изучить классический образец супертипа / подтипа.Вот некоторые примеры от SO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...