216  /  380
Справочник

Highload-блоки

Просмотров: 81889
Дата последнего изменения: 25.05.2021
Татьяна Старкова
Сложность урока:
2 уровень - несложные понятия и действия, но не расслабляйтесь.
1
2
3
4
5
Недоступно в лицензиях:
Ограничений нет

Поскольку модуль Информационные блоки считается очень "тяжелым" для создания легких справочников или хранения большого количества данных (когда модуль может вести себя не очень оптимально), то появилась потребность в создании аналога инфоблоков (модуль Highload-блоки), но гораздо проще и "полегче". Новый модуль доступен с версии 14.0 продукта и написан на новом ядре D7. Структура данных этого модуля предполагает возможность использования в нагруженных проектах.

Примечание: Highload-блоки и традиционные инфоблоки - это разные вещи. Поэтому нет возможности конвертации традиционных инфоблоков в Highload-блоки. Это все равно как конвертировать форум в wiki. Технически можно создать какую-то аналогичную структуру и перенести данные. Но это имеет смысл только для конкретного проекта при определенной необходимости.

Highload-блоки

Highload-блоки - это быстрые справочники, без поддержки иерархии, с ограниченной поддержкой свойств. Они могут обращаться к БД в том числе и через HandlerSocket и работать с большими объёмами данных. Highload-блоки хранят элементы в своих таблицах и используют свои индексы.

Примечание: Кроме модуля Highload-блоки, в ядре D7 реализована возможность обращения к БД через HandlerSocket для всех сущностей ORM.

Раньше данные хранились с использованием модуля, который закрывал таблицы - паттерн Table Module. В Highload-блоках дополнительно создан слой, который называется Table Data Gateway, который поддерживает всю технику работы с таблицами, а бизнес-логика находится в расширяющем классе.

Highload-блоки - это логика для работы с данными, не более. Для конкретного применения данных нужно предусмотреть реализацию бизнес-логики самим приложением. Чтобы реализовать эту бизнес-логику надо расширить класс Highloadblock:

use Bitrix\Highloadblock as HL;
$hlblock   = HL\HighloadBlockTable::getById( # )->fetch();
$entity   = HL\HighloadBlockTable::compileEntity( $hlblock ); //генерация класса 
$entityClass = $entity->getDataClass();

class MyDomainObjectTable extends #entityClass# {
…//наша бизнес логика проекта, посмотрите содержимое $entityClass и впишите его в #entityClass#
} 

Преимущества Highload-блоков

  • Низкие накладные расходы (PHP, меньше запросов SQL).
  • Низкий риск блокировок в БД: так как данные хранятся в своих таблицах, нет единой, глобальной таблицы, которая может заблокироваться при больших нагрузках (выборка и одновременно импорт).
  • Тысячи, миллионы сущностей, справочники.
  • Снижение нагрузки на БД, хостинг.

О производительности и ресурсах

Highloadblock - это прослойка между пользователем и ORM. ООП само по себе ведет к бо́льшему потреблению памяти и CPU, предлагая взамен более удобную и эффективную разработку. Highloadblock предназначены для высоких нагрузок. Их преимущества лежат в области архитектуры, то есть на них проще достичь масштабируемости, проще управлять разработкой, проще учитывать риски.

Выигрыш будет именно при работе с БД. Разработчик получает:

  • отдельные таблицы для сущностей (что может стать заметным на больших объемах),
  • возможность легко расставлять индексы для нужных вам выборок,
  • возможность прозрачно использовать handlersocket, который может заметно снизить нагрузку на СУБД.


Содержание главы:

36
Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии