EMZETT.
Войти

JSON в SQL-базах данных

Коротко: Современные SQL-базы данных умеют хранить, запрашивать и индексировать документы JSON в столбцах. Так смешивают жёсткие таблицы с гибкими данными.

Подробнее: PostgreSQL (json, jsonb), MySQL (JSON) и SQLite (функции JSON) предлагают операторы для чтения и фильтрации полей документа.

Подробности

  • PostgreSQL: jsonb хранит в двоичном виде, быстрее запрашивается и индексируется (GIN). data->'name' возвращает JSON, data->>'name' — текст, data @> '{"type":"a"}' проверяет вхождение.
  • Когда уместно: Редко используемые или очень разнородные атрибуты, сырые данные интерфейсов, настройки, события с меняющимися полями.
  • Когда нет: Для данных, по которым часто фильтруют, соединяют и которым нужна согласованность. Внешних ключей, проверки типов и ограничений в JSON нет.
  • Компромисс: Важные поля — настоящие столбцы, остальное — JSON. Генерируемые столбцы или индексы по выражениям JSON ускоряют запросы.
  • Ловушки: Изменение одного поля часто перезаписывает весь документ. Крупные значения JSON замедляют таблицы.
  • Альтернатива: Документная база данных, см. обзор NoSQL.

См. также: индексы PostgreSQL