@psiklop

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

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

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

Как сделать оптимальней, нужно читать и писать данные? замечу искать по ID и Value нет надобности, только по Login
  • Вопрос задан
  • 147 просмотров
Решения вопроса 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 дать индекс)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы