Выбор ответа Middle NoSQL и выбор хранилища обновлено

jsonb вместо документной базы

Вопрос

У товаров разные наборы характеристик (у ноутбука одни, у платья другие). Команда работает на PostgreSQL. Что разумнее всего?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Характеристики в колонке jsonb с GIN-индексом, остальное в колонках. jsonb хранит документ в разобранном бинарном виде, поддерживает операторы вхождения и индексы GIN, и при этом заказы, цены и остатки остаются в нормальных таблицах с транзакциями.

Варианты ответа

  1. Перенести каталог в MongoDB: реляционная база не умеет гибкие поля
  2. Характеристики в колонке jsonb с GIN-индексом, остальное в колонкахправильный ответ
  3. Сделать отдельную колонку под каждую возможную характеристику
  4. Хранить характеристики строкой JSON в колонке text и парсить в коде

Разбор

jsonb хранит документ в разобранном бинарном виде, поддерживает операторы вхождения и индексы GIN, и при этом заказы, цены и остатки остаются в нормальных таблицах с транзакциями. Отдельная база ради одной гибкой части добавляет эксплуатацию и синхронизацию. Сотни колонок под все характеристики почти все пустые и неудобны. Текст вместо jsonb лишает индексов и проверки формата.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.