Highload-блоки на практике - справочники и их данные
Highload-блок - хранилище для однотипных записей: брендов, цветов, городов, характеристик. Здесь собраны решения по работе с ними.
Что общего у этих задач
Highload-блок - это своя таблица с интерфейсом. Структуру задают пользовательскими полями, данные правят через административную часть, а работа из кода идёт через сгенерированный класс сущности.
Он берётся там, где инфоблок избыточен. Справочнику из десяти тысяч цветов не нужны разделы, права на элементы и версии - ему нужны быстрый поиск и компактное хранение.
Связь со свойством товара идёт через внешний код. Свойство типа «справочник» хранит код записи, а не её название, и это то же правило, что и у остальных ссылочных типов.
Индексы в такой таблице создаёт разработчик. Платформа заводит только первичный ключ, и первый же фильтр по внешнему коду на большом справочнике читает таблицу целиком.
С чего начать
Начинают с выбора хранилища. Если записям нужны разделы, права и версии - это инфоблок; если нужен быстрый однотипный справочник - highload-блок.
Дальше задают имя сущности и имя таблицы, понимая, что менять их потом нельзя. По имени сущности собирается класс, и переименование ломает весь код вокруг справочника.
Последним думают об объёме: сколько записей будет через год, какие фильтры нужны витрине и как эти данные попадут на боевой сайт при выкладке.
Решения подтемы
- Highload-блок на практике: создание, поля, привязка к свойству - создание блока, класс сущности, справочник у свойства.
- Справочник в выборках: вывод значений, фильтр, кэш - названия одним запросом и фильтр по коду.
- Highload-блок на объёме: индексы, заливка, выкладка структуры - индексы под фильтры, заливка пачками, перенос структуры.
- Справочник не отдаёт значения: разбор причин - код без записи, чужой блок, печать кода, кэш, переименование.
Частые вопросы
Когда брать highload-блок вместо инфоблока?
Когда записей много, они однотипные и им не нужны разделы с правами. Справочники и журналы - типовые случаи.
Можно ли использовать его как свойство товара?
Да, свойством типа «справочник». Оно хранит внешний код записи, а показывает её название.
Есть ли у него готовый интерфейс?
Да, список и форма правки в административной части появляются сами. Это главное отличие от своей таблицы.
Переносятся ли данные при выкладке?
Нет, как и любые данные: переносят структуру, а записи заливают отдельно. Об этом забывают чаще всего.
Связанные темы
- Highload-блоки - устройство хранилища
- Свойства-привязки: элемент, раздел и обратная выборка - соседний способ ссылаться
- Своя таблица на ORM: сущность, запросы, изменение структуры - когда интерфейс не нужен
- Количество товаров в фильтре: фасетный индекс и пустые значения - справочники в фильтрации
- Раздел Инфоблоки