Как правильно хранить большие JSON в БД?

Периодически обращаюсь к различным API (типа яндекса) и тяну оттуда информацию, затем записываю в БД. PostgreSQL в моем случае. Ответ от API получаю в JSON и весь JSON заливаю в ячейку соответствующей таблицы. Но все время думаю над тем, а нормальное ли это решение. Мне в целом удобно получать массив и обрабатывать его целиком, а не разбивать на столбцы и потом брать из базы. Но встает вопрос, а если JSON который я записываю будет мягко скажем большим. Например информация о продажах за год, средненького ретейла, в таком случае моя практика не окажется хлипким решением?


Ответы (1 шт):

Автор решения: Akina

В PostgreSQL есть два типа данных - JSON (по сути обычное текстовое поле, хранящее строковое представление JSON) и JSONB (бинарное представление данных). Оба типа выполняют полный контроль валидности переданного значения.

JSONB обеспечивает более эффективную обработку и должен использоваться, если над этим значением будут выполняться какие-то операции на сервере (поиск, обновление и пр.). Кроме того, JSONB несколько компактнее. Но следует учитывать, что JSONB полностью формализует значение, и при его запрашивании восстанавливает его. Соответственно это может приводить к изменению сохраняемого значения (только для объектов). Основные изменения, с которыми можно столкнуться:

  1. при сохранении объекта, в котором присутствуют несколько одноимённых свойств, будет сохранено только одно из значений, то, которое самое последнее по тексту, все остальные будут утрачены
  2. при восстановлении объекта его свойства будут отсортированы в лексикографическом порядке

Если же задача только хранить и отдавать как есть, без обработки - то JSON предпочтительнее. И соответственно если значение содержит одноимённые атрибуты или порядок атрибутов в объекте имеет какое-то значение, следует однозначно использовать JSON.

→ Ссылка