@psiklop

Как оптимизировать таблицу с JSON строкой в mysql?

Задам абстрактный вопрос покороче, хотя такое часто встречается.

1 вариант создать таблицу с двух столбцов: Login и Data - в поле Data json массив к примеру около 50 элементов на 5-10KB
2 вариант создать таблицу с трех столбцов: Login и JSON массив развернуть на ID и Value

Как сделать оптимальней, нужно читать и писать данные? замечу искать по ID и Value нет надобности, только по Login
  • Вопрос задан
  • 154 просмотра
Решения вопроса 1
Lastor
@Lastor
В чем сила, брат? В ньютонах.
Если вы уверены в том, что в обозримом будущем вам не понадобится поиск по другим полям или вы точно не захотите сделать join с их участием, то json будет работать быстрее. И сохранять его проще.
А если потом захотите, то придётся создать дополнительные таблицы, и сохранить как нормализованные данные.
Но эта задача не сложна и всего лишь потенциальна (может и не понадобится).
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
ipatiev
@ipatiev
Потомок старинного рода Ипатьевых-Колотитьевых
Сам по себе вопрос бессмысленный, поскольку вообще ничего не сказано ни о данных, ни об их структуре. Ни о проблемах, которые вызывают необходимость такой "оптимизации".
Так что на него можно ответить только так же абстрактно.
Превращать JSON в EAV глупо.
Так что вопрос здесь не в том, размазывать ли JSON по строкам, а в том, нужен ли он здесь вообще.

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

Кроме того, никакого "login" в качестве идентификатора быть не должно, а должен быть первичный ключ.
Ответ написан
@psiklop Автор вопроса
Написал на коленке тест, JSON в таблицу на 10кб и скрипт который гоняет 1000 раз select + decode + encode + update.
Результат хреновый, слабый сервер грузит, даже 100 человек на сайте обновляющие страницу раз в 10 сек сделают нагрузку.

Заодно потестил встроенные JSON функции с ними результат как будто лучше.

Нагнал по второму варианту в таблицу 40.000 строк и 400 логинов результат лучше ощутимо скорость x10 (при условии, что полю login дать индекс)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы