MySQL JSON Storage против двух таблиц - PullRequest
3 голосов
/ 12 марта 2011

Будет ли какая-то польза от использования 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, и я бы предпочел использовать ее, нонасколько он медленнее, чем оригинальная версия?

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

Ответы [ 4 ]

5 голосов
/ 12 марта 2011

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

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

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

2 голосов
/ 12 марта 2011

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

Практическое правило: если вы не видите смысла в отношениях, вам не нужна вся структура данных, тогда

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

2 голосов
/ 12 марта 2011

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

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

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

Users    UserID  | UserName  |  Avatar  |  Avatar_Thumb

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

0 голосов
/ 12 марта 2011

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

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