Задать вопрос

Оптимально ли хранение и использование в БД json строки?

В БД хранятся данные с биржи.
Сейчас там хранится только цена. Поэтому, для одной валюты - один столбец.
Но понадобилось хранить другие данные, связанные с этой валютой (ask, bid, average...).

Предполагаю хранить все данные в виде json строки. А именно изменить поле USD (тип Decimal) на поле USD (тип char или предложите другой тип получше?). Около 100 символов мне хватит.

Основная операция с бд - выборка. SELECT.
Выбрать все значения, где поле USD и время больше какого-то числа и время меньше числа.
Обычно, в единоразовой выборке около 100000 значений.
И сейчас все работает достаточно неплохо.

Как такое изменение отразится на нагрузке/быстродействии системы?
Есть вариант использовать больше полей. Но учитывая, что сейчас их 50, а новых данных минимум 5, то в таблице будет уже 250 полей.
Или больше таблиц. Для каждого типа данных (ask, bid, average...) - своя таблица.

Оптимально ли хранение и использование в БД json строки?
Какой вариант лучше выбрать? json строка, больше полей, больше таблиц?
  • Вопрос задан
  • 1410 просмотров
Подписаться 3 Простой Комментировать
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Достаточно добавить одно поле - валюта, и вуаля, в вашу таблицу можно записать сколько угодно различных валют. А если правильно построить индекс, то и работа с таблицей останется быстрой.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
VladimirAndreev
@VladimirAndreev
php web dev
многие базы сейчас нативно поддерживают json-поля.
вопрос в том, что потом с этими данными делать. может, стоит изначально посмотреть на документооринтированную бд?
Ответ написан
alexfilus
@alexfilus
Senior backend developer
Это имеет смысл, только если вы не собираетесь фильтровать/сортировать/группировать по данным из JSON поля. Если что-то из этого нужно, то лучше разбить, и добавить нужное количество полей/таблиц.
Ответ написан
Комментировать
@Xilian
Программист 1С, сетевые технологии, SQL
>>А именно изменить поле USD (тип Decimal) на поле USD (тип char или предложите другой тип получше?).

У каждой валюты есть трехзначный цифровой код. Оптимальнее все таки хранить его как int, а не char.

>>Есть вариант использовать больше полей. Но учитывая, что сейчас их 50, а новых данных минимум 5, то в таблице будет уже 250 полей.

Почему 250? Табличка с историей валюты - дата - код-валюты - спрос-предложение-среднее. 5 полей всего.

>>Предполагаю хранить все данные в виде json строки.

Если не будешь считать данные в коде, а не в sql - почему и нет. Если будешь sql-запросами то про выборку и JOIN можешь забыть.
Ответ написан
Комментировать
heathen
@heathen
Можно выбрать другую db. Скажем, Postgresql нативно имеет тип jsonb, с индексацией, использованием полей в select и прочими плюшками.

Это если говорить именно о json.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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