Перейти к основному содержимому

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]]);

Преимущества реализации в нашем ядре

  1. Умное кэширование (Static Cache): Внутри метода getHlblock используется статическая переменная $cache. Если на одной странице вы вызываете хелпер 10 раз, тяжелая операция компиляции сущности Битриксом выполнится только один раз. Это экономит ресурсы процессора.
  2. Гибкость идентификации: Вам не нужно помнить ID блока (которые могут отличаться на локальной копии, тестовом сервере и проде). Можно обращаться по имени таблицы, которое всегда неизменно.
  3. Автоматический 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-блоки, если:

  1. У вас огромное количество записей (от 100 000 и выше). Например: лог транзакций, список городов мира, справочник почтовых индексов.
  2. Данные не требуют сложного оформления (не нужны анонсы, детальные описания, SEO-теги).
  3. Это технический справочник (например, сопоставление ID брендов с их логотипами для фильтра).
  4. Вам нужна высокая нагрузка на запись/чтение (например, история просмотров пользователей).

Не используйте HL-блоки для:

  • Новостей, статей, каталога товаров (где важно SEO и удобство менеджера).
  • Страниц, которые требуют сложной иерархии разделов.