Highload-блоки (HL-блоки)
Highload-блоки — технология 1С-Битрикс для работы с большими объемами данных. Это абстракция над произвольными таблицами в базе данных, которая позволяет работать с ними через ORM (D7).
Главное отличие от инфоблоков — плоская структура хранения, что обеспечивает максимальную скорость работы.
Архитектура: Инфоблоки vs Highload-блоки
Способы хранения данных:
- Инфоблоки (EAV-модель):
Данные одного элемента разбросаны по нескольким таблицам (название в одной, описание в другой, свойства в третьей). Чтобы собрать один товар, Битрикс делает сложные
JOINзапросы. Это гибко, но медленно при миллионах записей. - Highload-блоки (Flat-модель):
Каждый HL-блок — это одна отдельная таблица в базе данных. Все поля (свойства) этой записи находятся в этой же таблице в виде отдельных столбцов. Битрикс делает один простой
SELECT *, что работает молниеносно.
Структура данных и поля
В HL-блоках нет стандартных полей, все поля, которые вы создаете, являются Пользовательскими полями (User Fields).
- ID: Единственное системное поле, которое создается автоматически.
- Префикс UF_: Все ваши поля обязаны начинаться с этого префикса (например,
UF_NAME,UF_LINK,UF_SORT). - Типы полей: Поддерживаются стандартные типы: строка, число, дата/время, файл, привязка к пользователю, привязка к элементам ИБ и даже привязка к другим HL-блокам.
Работа с Highload-блоками через Xpage Core
В стандартном Bitrix D7 для работы с HL-блоком нужно пройти 4 этапа: подключить модуль, найти данные блока, скомпилировать сущность и получить класс. Модуль Xpage\Core сводит это к одному вызову.
Хелпер Hlblock.php (Синтаксический сахар)
Класс \Xpage\Core\Hlblock является оберткой, которая берет на себя всю рутину по инициализации Highload-блока.
- Метод:
Hlblock::getHlblock(string|int $hlblock) - Что принимает: Либо числовой ID, либо строковое Название таблицы (например,
my_custom_data). - Что возвращает: Объект
DataManager, готовый к выполнению запросов.
Сравнение подходов
Использование Xpage Core
Код становится чистым:
use Xpage\Core\Hlblock;
// Инициализация одной строкой (по названию таблицы или ID)
$hl = Hlblock::getHlblock('b_hlbd_orders');
$result = $hl::getList(['filter' => ['UF_ACTIVE' => 1]]);
Преимущества реализации в нашем ядре
- Умное кэширование (Static Cache):
Внутри метода
getHlblockиспользуется статическая переменная$cache. Если на одной странице вы вызываете хелпер 10 раз, тяжелая операция компиляции сущности Битриксом выполнится только один раз. Это экономит ресурсы процессора. - Гибкость идентификации: Вам не нужно помнить ID блока (которые могут отличаться на локальной копии, тестовом сервере и проде). Можно обращаться по имени таблицы, которое всегда неизменно.
- Автоматический Loader:
Вам не нужно каждый раз писать
Loader::includeModule('highloadblock'), хелпер сделает это сам.
Примеры типовых операций через ядро
Благодаря тому, что метод возвращает DataManager, вам доступны все методы ORM Bitrix:
Получение всех данных (Select)
$hl = \Xpage\Core\Hlblock::getHlblock('my_table_name');
$items = $hl::getList([
'select' => ['ID', 'UF_NAME', 'UF_XML_ID'],
'filter' => ['UF_TYPE' => 'news'],
'order' => ['ID' => 'DESC']
])->fetchAll();
Добавление новой записи (Add)
$hl = \Xpage\Core\Hlblock::getHlblock(2); // Обращение по ID, лучше вытаскивать по имени use Xpage\Core\Hlblock; Hlblock::getHlblock($hlBlockName)
$result = $hl::add([
'UF_NAME' => 'Новый отзыв',
'UF_USER_ID' => 45,
'UF_DATE' => new \Bitrix\Main\Type\DateTime()
]);
if ($result->isSuccess()) {
$newId = $result->getId();
}
4. Сравнительная таблица
| Особенность | Инфоблоки (Iblock) | Highload-блоки (HL) |
|---|---|---|
| Скорость выборки | Средняя / Низкая | Очень высокая |
| Структура БД | Сложная (много таблиц) | Простая (одна таблица) |
| Визуальный редактор | Есть (удобно для контента) | Упрощенный (список в админке) |
| Стандартные компоненты | Очень много (news.list и т.д.) | Практически нет |
| ЧПУ (URL) | Поддерживается из коробки | Нужно писать роутинг вручную |
| SEO-поля | Есть встроенные | Нет |
Когда использовать HL-блоки?
Используйте HL-блоки, если:
- У вас огромное количество записей (от 100 000 и выше). Например: лог транзакций, список городов мира, справочник почтовых индексов.
- Данные не требуют сложного оформления (не нужны анонсы, детальные описания, SEO-теги).
- Это технический справочник (например, сопоставление ID брендов с их логотипами для фильтра).
- Вам нужна высокая нагрузка на запись/чтение (например, история просмотров пользователей).
Не используйте HL-блоки для:
- Новостей, статей, каталога товаров (где важно SEO и удобство менеджера).
- Страниц, которые требуют сложной иерархии разделов.