MySQL JSON Storage против двух таблиц

Будет ли какая-либо польза от использования JSON для хранения данных в таблице и наличия отдельной мета-таблицы?

Вот исходная схема:

Users Table UserId | Username | Etc... 5 | John | Avatar Table Id | UserId | ImageName | ImageType 1 | 5 | example.png | original 2 | 5 | example_thumb.png | thumbnail 

Вот версия JSON:

 Users Table UserId | Username | Avatar 5 | John | {"original":"example.png","thumbnail":"example_thumb.png"} 

Мне лично нравится версия json и предпочитаю использовать ее, но насколько медленнее, чем исходная версия?

В моем случае мне нужны аватары пользователя (и разные размеры) почти для каждого запроса.

Использование большого текстового файла для хранения сериализованных (независимо от типа сериализации) означает:

  • Нет необходимости изменять схему для добавления / удаления столбцов
  • Возможность хранить практически все, что угодно
  • НО: вы не сможете работать с этими данными на стороне MySQL – особенно, вы не сможете использовать их в предложении where .
    В принципе, это означает использование MySQL для хранения данных – и не более чем хранение

Если вы хотите использовать эти данные только на стороне PHP и никогда не работать с SQL-сервером, я полагаю, что хранение всего большого текстового поля является решением.
(и в этом случае я не понимаю, почему это было бы медленнее, чем другое решение)

… но насколько медленнее, чем оригинальная версия?

Невозможно ответить на это, но проверить и сравнить его.

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

 Users UserID | UserName | Avatar | Avatar_Thumb 

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

Я вообще не вижу смысла в таких областях.

Существует правило большого пальца: если вы видите бесполезность для отношений, вам не нужна целая структура данных, тогда

Нет смысла давать имена этих картинок, отличные от идентификатора пользователя
Будучи названы 566.png и 566_thumb.png эти аватары вообще не потребуют записей в таблице

Почему бы вам просто не использовать что-то вроде mongoDB и хранить непосредственно объекты JSON. Быстро и надежно. Не знаю, была ли у вас особая потребность в mysql.