2011-06-19 2 views
1

Вот моя ситуация:Server Load: MYSQL против PHP Функции

Ситуация:

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

Как я вижу это у меня есть два варианта:

I. Создайте новое 'значение' таблицы:

user_ID category value 

    ...  ...  ... 
    5   1  aaa 
    5   1  bbb 
    5   2  ccc 
    5   2  ddd 
    5   2  eee 
    6   1  xxx 
    6   2  yyy 
    6   1  zzz 

II. В моей реальной таблице с пользователями - «пользователи»:

user_ID (unique)   values 
     5    aaa,bbb$$ccc,ddd,eee 
     6    xxx,zzz$$yyy 

... где я сохранить значения в виде текста и разобрать его с «» разделяющего ценности и „$$“ деления категории.

До сих пор я делал некоторые мелочи вторым способом, но теперь я ожидаю множество значений и категорий для этой базы данных, и мне интересно, что даст мне меньше нагрузки на сервер - имея очень большую таблицу базы данных mySQL и просматривайте его на каждой странице, чтобы узнать, какие значения принадлежат текущему пользователю; или получать все и только свои значения из относительно небольшой таблицы, но каждый раз анализировать строку с помощью PHP, чтобы сделать ее пригодной для использования?

+2

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

+0

. Второй вариант будет «легче» на сервере, скорее всего, потому что синтаксический анализ строк относительно минимален. Почему бы не сохранить его как JSON вместо строки, разделенной запятой. Это будет немного более гибким в будущем и имеет такую ​​же удобную функциональность, встроенную в PHP. – Matt

+0

JSON - это совершенно новая концепция для меня, я даже не знаю, чтобы исследовать ее, но теперь я это делаю! Звучит идеально для небольших вещей, о которых я упоминал. – choephix

ответ

4

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

Кроме того, это позволяет данные, которые будут запрошены в другом направлении - принеси мне все пользователи с 2 категории, равным «эээ»

+0

Спасибо, это имеет смысл. – choephix

0

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

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

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

+0

Спасибо вам, я понимаю, что на самом деле это была немая идея. Это очень помогает. – choephix

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