Открыть меню
Toggle preferences menu
Открыть персональное меню
Вы не представились системе
Your IP address will be publicly visible if you make any edits.

Хранение данных. Классы

Материал из Платформа Эра. Документации
Предыдущая статья курса: Быстрый старт

Общая информация

Раздел Classes приложения Builder

Классы являются основой всех систем и приложений, разрабатываемых на платформе Эра. Набор классов в пакетее реализует структуру данных, с которой взаимодействуют остальные элементы пакета. Каждый класс определяется набором параметров, полей и действий. Параметры класса определяют его наименование, поведение, способ хранения данных, структуру наследования и т.д. Обзор параметров класса будет произведен ниже в данной статье.

Набор полей определяет структуру данных класса, а также формирует связь объектов этого класса с другими классами (в рамках всех пакетов системы).

Набор действий может определять некоторые операции, которые могут производиться над объектами данного класса. С помощью действий может реализовываться часть логики работы с классом. Также для реализации логики работы с данными можно использовать обработчики (handlers) и сервисы (services).

При создании модели класса, указывается его тип (classKind):

  • entity - сущность, объект для хранение данных
  • object -
  • interface - интерфейс для взаимодействия других классов (не хранит данные, только определяет структуру).

Классы могут наследовать поля и действия от других, родительских классов.

Для каждого класса, после активации пакета создается хранилище, соответствующее настройкам класса.

Хранилище может размещаться в оперативной памяти, в распределенной объектной БД, в реляционной БД Postgres (с партициями для исторических данных и без), в брокере Kafka, а также сохранять данные в аналитической колоночной БД Clickhouse.

Класс может быть абстрактным (abstract), или интерфейсом (interface) в этом случае, для него не генерируются хранилище. Данные вариации классов не хранят в себе данные, и используются для взаимодействия между другими классами и описания структур данных.

Параметры класса

Окно редактирования параметров класса

У класса достаточно большой набор настраиваемых параметров. Для удобства, рассмотрим их в порядке группировки в окне редактирования.

Блок Name and Location


Name and Location

Параметры класса
Название параметра Значение по-умолчанию Комментарий
package [текущий выбранный пакет] Определяет, к какому пакету будет относиться данный класс
folderName Определяет имя папки для группировки классов
name Системное наименование класса в единственном числе (используется в API)
multiName Системное наименование класса во множественном числе числе (используется в API)
fullName [package]/[folderName]/[name] Формируется автоматически, используется для доступа к данным через API
fullMultiName [package]/[folderName]/[multiName] Формируется автоматически, используется для доступа к данным через API
caption Заголовок класса, используется для отображения данных пользователю (напр., при отображении карточки редактирования)
multiCaption Заголовок класса, используется для отображения данных пользователю (напр., при отображении реестра данных класса)
Блок Data

Data

Параметры класса
Название параметра Значение по-умолчанию Комментарий
storageMode category Определяет тип хранилища, создаваемого для класса

ram/runtime/category/history

  • ram - хранение в распределенной объектной БД (mnesia on ram only). Не сохраняет данные на диск. Целостность и сохранность данных обеспечивается пока доступен один из экземпляров группы микросервисов, ответственной за обслуживание класса. Производительность операций доступа по ключу и операций записи ~10000 в секунду в расчете на один свободный поток обработчик.
  • runtime - хранение в распределенной объектной БД (mnesia on disc+ram). Сохраняет данные на диск и под нагрузкой значительно загружает дисковую подсистему на запись. Производительность операций доступа по ключу и операций записи ~10000 в секунду в расчете на один свободный поток обработчик.
  • category - хранение в реляционной БД postgresql без партицирования. Скорость до 10000 операций в секунду в режиме параллельной обработки, ~3000 операций в секунду в синхронном режиме.
  • history - хранение в реляционной БД postgresql с партицированием по дате. Требует указания размерности партишена (год, месяц, день), и поля со значением для патицирования.
  • transactionlog - отправка данных в кластер Kafka. При обнаружении storage с type=clickhouse с тем же значением instance автоматически генерирует таблицу-приемщик из Kafka в ClickHouse (ReplicatedReplacingMergeTree), и делает доступными операции чтения.
storageInstance Используется только для storage_mode = category, history, transactionlog

Данным параметром задается ключ инстанса для хранения данных. При отсутствии настроенного хранилища с кодом 'auto' класс автоматически привязывается к модельной базе ('era_model_DOMAIN'), созданной через основное подключение к БД Postgres домена).

section Имя секции для выбора экземпляра DMS
integrityMode sync_fast_notify Режим обеспечения целостности (приоритетность применения изменений в хранилище и рассылки уведомлений)
  • async - N(=10) очередей чтения с распределением по хешам идентификаторов, очередь чтения не используется.
  • sync - одна очередь записи, одна очередь чтения.
  • sync_fast_read - N(=10) очередей чтения с распределением по хешам идентификаторов, M(=10) очередей чтения. Отправка уведомления после сохранения в БД. Читатели ждут завершения более ранних операций записи.
  • sync_fast_notify - N(=10) очередей чтения с распределением по хешам идентификаторов, M(=10) очередей чтения. Отправка уведомления об изменении перед сохранением в БД. Читатели не ждут завершения более ранних операций записи.
partitionPropertyName Используется только для storage_mode = history, transactionlog

Является опциональным для режима history, и обязательным для transactionlog В данном параметре определяется имя поля (с типом datetime), которое будет использоваться для построения партиции в Postgresql / префикса ключа в Kafka+Clickhouse

maxLimit Максимальное количество строк при чтении одной страницы. Используется в API при пагинации данных
realtime Обеспечение обновлений данных в реальном времени (путем подписки на изменения). Данный параметр в том чилсе, влияет на работу в интерфейсе (когда два пользователя пытаются изменять один и тот же объект этого класса).
serverCacheMode none Режим кэширования данных на сервере (слой платформы, роль DMS)
  • full - кэшируется весь объем данных. Применимо только для type=category. Чтение производится из кэша - поиск по идентификатору в кэше быстрый, но выборка при большом объеме может быть медленнее чем в оригинальном движке БД. Не применяется для storage_mode = 'transactionlog'
  • temp - кэшируется последнее используемое в ограниченном объеме. Удаляется автоматически при переполнении кэша. Поиск по идентификатору в кэше быстрый, выборка всегда производится в оригинальном хранилище БД.
  • none - кэш не используется.
clientCacheMode temp Режим кэширования данных на клиенте (в приложениях и микросервисах продуктового слоя).

Возможные значения аналогичны serverCacheMode

classDataSource model Источник данных класса

Возможные значения:

  • model - данные из хранилища
  • view - данные из представления (только в режиме category и history)
  • root - данные из сервиса
restURL URL сервиса для получения данных. Используется только при dataSource = root
dataFactoryServiceName Имя сервиса, который используется в качестве фабрики данных (вместо классического REST)
dataFactoryMethodName Имя метода сервиса, который используется в качестве фабрики данных (вместо классического REST)
tuningOptions Дополнительные опции (opts) для design/classes

Полный список опций доступен в документации к классу

Блок Class

Class

Параметры класса
Название параметра Значение по-умолчанию Комментарий
classKind entity Тип класса (сущность, объект или интерфейс)
parent Родительский класс (для наследования свойств и действий)
abstract False Для абстрактных классов не создаются таблицы в хранилищах, они предназначены для дальнейшего наследования
unionContents Список дочерних классов для объединения в единую коллекцию
onlyAddProperties Предполагается, что класс уже существует (создан на слое платформы), но в него необходимо добавить недостающие поля

Autodelete

Параметры класса
Название параметра Значение по-умолчанию Комментарий
expiresMode none Режим автоматического удаления устаревших объектов (по истечении времени жизни)

Только для storage_mode = runtime.

  • none - режим автоудаления не используется.
  • modify - таймштамп выставляется автоматически в момент любой модификации сущности.
  • create - таймштамп выставляется автоматически только при создании сущности.
  • custom - таймштамп выставляется только вручную с помощью REST.
expiresTimestampPropertyName Имя поля, относительно которого рассчитывается время жизни (timestamp, в миллисекундах unix time * 1000)
expiresTimeToLivePropertyName Имя поля, содержащего время жизни объекта (в секундах)