Схема и взаимодействие базы данных

Схема базы данных SberMobile Server полностью динамическая, новые таблицы оперативно создаются и удаляются сервером, таким образом отражая создание, удаление и обновление системных ресурсов.

Тем не менее, в каждой инсталляции существует несколько основных таблиц:

Таблица

Описание

ag_properties

Содержит значения всех постоянных переменных контекста сервера. SberMobile Server генерирует в этой таблице относительно малое количество запросов ВСТАВИТЬ и УДАЛИТЬ, когда создаются или разрушаются системные объекты. Количество запросов ВЫБРАТЬ также относительно мало из-за серверного кэширования памяти. При этом таблица ag_properties часто ОБНОВЛЯЕТСЯ, потому что значения постоянных свойств ресурса меняются, и сервер сохраняет измененные значения в базе данных.

Например, устройства, использующие постоянное значение кэша, вызывают большое количество обновлений ag_properties в период синхронизации.

Поля:

ag_events

Содержит все события контекста сервера, кроме тех, которые хранятся в других (настраиваемых) таблицах. Внизу приведен подробный список Событий Контекста в Памяти.

Поля:

  • контекст - полный путь контекста, в котором было запущено событие

  • имя - имя события (т.е. тип события)

  • время создания - временная отметка появления события (или последнее появление события, если было зарегестрировано множество его дубликатов)

  • срок действия - временная отметка запланированного срока действия события

  • уровень - уровень события

  • права доступа - пользовательские права, необходимые для доступа к экземпляру события, или ноль, если должны использоваться права, обозначенные в определении события

  • число - количество зарегистрированных дубликатов события

  • подтверждение - закодированный список подтверждений появления события

  • обогащение - закодированный список обогащений события

  • формат - закодированный формат события или ноль, если должен использоваться формат, обозначенный в определении события

  • данные - таблица данных, представляющая данные события, закодированные в виде строки с использованием невидимых разделителей

ag_data

Содержит двоичные блоки данных, встроенные в значения переменных контекста. Эти блоки извлекаются в отдельную таблицу, когда значение переменной сохраняется в таблице ag_properties. Однако двоичные блоки не загружаются сразу после того, как загружается значение переменной из ag_properties. Блоки загружаются только по запросу, т.е. при помощи явного запроса модулей SberMobile Serverа, клиентов внешних приложений.

Память событий контекста

Большая инсталляция SberMobile может хранить миллиарды событий контекста в базе данных. Эти события динамически распределяются между различными таблицами, чтобы оптимизировать память и производительность запроса.

Формат всех таблиц событий соответствует формату таблицы ag_events, описанной выше.

Доступ к таблицам событий обычно состоит из множества операций ВСТАВИТЬ. Новая запись вставляется каждый раз, когда регистрируется постоянное событие сервера. Сообщение УДАЛЕНО передается поверх таблицы событий в двух случаях:

  • Если системный ресурс со всеми соответствующими событиями удален

  • Если просроченные события стираются периодической задачей-планировщиком

Количество запросов ВЫБРАТЬ в таблицах событий относительно мало. События загружаются в следующих случаях:

  • Если события напрямую загружаются при помощи функции получить () контекста Событий

  • Если история переменных загружается при помощи функции ИсторияПеременных() контекста Утилитов

  • В период начальной визуализации диаграммы виджетов, которая сконфигурирована так, чтобы включать в себя хронологические события или значения переменных

  • В нескольких других подобных случаях

Несмотря на то, что события загружаются редко, количество загружаемых за один запрос событий не ограничено платформой, поскольку определенные инсталляции требуют миллионов событий, загружаемых за раз. Архитекторы системы, разрабатывающие решения на основе SberMobile, должны помнить о максимальном количестве загружаемых событий при выстраивании серверных цепочек обработки данных и визуализирующих панелей инструментов.

Попытка загрузить слишком большое количество событий за раз вызовет у SberMobile Serverа исчерпывание памяти в виде значительного снижения производительности, вызванного сборкой мусора Виртуальной Машины Java, и может привести к полному зависанию сервера или внутренним ошибкам памяти.

Список таблиц событий, представленный в этой документации, не полон. Различные модули и плагины SberMobile Serverа могут запросить создание других выделенных таблиц событий, которые здесь не упомянуты.

Все события, которые не были явно сконфигурированы для использования настраиваемой таблицы, записываются в таблице ag_events. Приведенный ниже список описывает таблицы базы данных, которые обычно создаются для хранения событий различных типов.

Таблица

Описание

ag_info

Содержит события категории Инфо.

ag_alerts

Содержит события категории Тревоги.

ag_xxx_change

Содержит все Изменения событий, представляя изменения переменных в одном контексте устройтва (соответствующие устройству xxx). Обратите внимание, что имя таблицы может быть усечено из-за ограничения длины имени таблицы, отражающей базу данных всего сервера.

Прямой доступ к базе данных %ls%а

Прямой доступ сторонних приложений к базе данных SberMobile Serverа не приветствуется. SberMobile - мощная платформа, предлагающая полноценный пакет разработки программ (SDK) и различные виды программных интерфейсов приложения (API) для локального и удаленного доступа ко всем элементам данных, содержащимся в базе данных сервера. При этом доступ на основе программных интерфейсов приложения будет всегда наследовать надлежащие блокировки, проверку прав доступа и оптимизацию производительности.

Прямая модификация данных, содержащихся в базе данных SberMobile Serverа, в большинстве случае вызовет некорректное поведение системы. Тем не менее, прямое чтение (ВЫБРАТЬ) операций можно использовать в редких случаях.

Пожалуйста, свяжитесь с SberMobileом для получения информации о том, как избежать прямого доступа к базе данных.