2015-11-06 3 views
1

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

Array(
    "Weight" => "10", 
    "Height" => "17", 
    "Usage" => "35" 
); 

Преамбула:

  • Я буду никогда изменение этих значений
  • Я буду никогда выполнить запрос на основе этих значений

Короче говоря, мне нужно только магазин и дисплей этот массив как есть. На самом деле мне нужно использовать эти значения для генерации графиков. Теперь я вижу 2 возможных варианта.

Вариант 1: даже если я никогда не буду использовать условие WHERE, ORDER BY, HAVING (...) для этих значений, я храню каждое значение отдельно в выделенном столбце (вес, высота, использование).

Вариант 2: Я создаю единый столбец (stats), где я храню сериализованную версию массива, а затем, чтобы генерировать мои графики, я неэтериализую каждую строку перед ее использованием.

Вопрос: какой лучший подход для хранения этого массива с точки зрения эффективности и производительности?

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

+2

Простой факт, что вам не нужно было бы нестириализовать для создания ваших графиков, если бы вы использовали отдельные столбцы, должно быть достаточно, чтобы оправдать вариант # 1 –

+1

Зачем хранить его в базе данных? Весь смысл хранить материал в базе данных - это то, что вы можете выполнять запросы в/с ним. В противном случае вам лучше устанавливать значения в константе в коде. – Plenka

+1

Я бы всегда выбирал вариант 1 –

ответ

3

Я никогда не буду обновления этих значений

Я никогда не выполнить запрос, основанный на этих значениях

Второй вы ЗАВЕРШИТЕ код, на котором хранятся их сериализованные значения, вам будет предложено для выполнения запроса, чтобы обновить что-либо с весом выше десяти.

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

+0

Я вижу вашу точку. Наверняка вариант 1 лучше, когда мы говорим о отображении данных, но как насчет части памяти? Позволь мне объяснить. Я сделаю гораздо больше запросов INSERT, чем SELECT. На самом деле мне нужно выбирать и отображать эти значения только тогда, когда клиенты хотят видеть графики, но, очевидно, они не будут тратить целую жизнь на графики. С другой стороны, мне постоянно нужно сохранять новые значения во время моих автоматических проверок очень часто. В заключение это будет INSERT INTO 20 столбцов против INSERT INTO в одном столбце с сериализацией (данными). Тем не менее, вы по-прежнему рекомендуете вариант 1? – user1274113

+1

Я бы.SQL предназначен для вставки и чтения, как это, но он не предназначен для сериализованных данных, что видно из-за грубой нехватки поддержки для него. Может быть, использовать новую функциональность MySQL (5.7+) JSON? https://dev.mysql.com/doc/refman/5.7/en/json.html В противном случае перейдите к строкам и реляционным данным. –

+1

Спасибо всем, ребята. Сегодня я узнал что-то новое. Пойдем со столбцами и перестанем переизбыть. – user1274113

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