Банк данных

Сервис используется для хранения пользовательских данных в Платформе с использованием СУБД MSSQL или PostgreSQL.

Важно

Ознакомьтесь с требованиями к версиям используемых СУДБ в разделе Ограничения и рекомендации.

В случае неуспешного подключения Банка данных к Базе данных причина ошибки указывается в ЦМ на вкладке Основные в деталях состояния или на вкладке Журнал.

../../_images/module_databank311.png

Создание сервиса

Чтобы создать сервис Банк данных:

  1. В ЦН перейдите в раздел Сервисы.

  2. Нажмите на кнопку + над таблицей сервисов. В рабочей области страницы отобразится интерфейс создания / редактирования сервиса, содержащий две вкладки: Основные и Параметры сервиса.

  3. На вкладке Основные заполните следующие поля:

  • Название: произвольное название сервиса, необязательно для заполнения.

  • Имя: уникальное имя сервиса, обязательно для заполнения.

  • Комментарий: описание сервиса, необязательно для заполнения.

  1. Для активации сервиса установите флажок Включен.

  1. Для создания сервиса выберите вариант Банк данных в разделе Настройка сервисов:

    ../../_images/ServiceBank.png
  2. На вкладке Параметры сервиса произведите следующие действия:

    • Выберите используемую СУБД:

      • MSSQL

        Примечание

        Если на сервере СУБД MSSQL отключен параметр оптимизированных запросов FILESTREAM, в журнале работы сервиса будет регистрироваться соответствующее предупреждение, не блокирующее работу сервиса. Для нормальной работы сервиса с оптимизированными запросами включите параметр FILESTREAM на стороне сервера СУБД. Если работа с оптимизированными сервисами не требуется, отключите параметр useMemoryOptimizedTable в конфигурации Банка данных для избежания регистрации предупреждений.

      • PostgreSQL

        Внимание

        Особенности работы с версии 3.1.1.0

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

        Примечание

        Для работы сервиса с CУБД PostgreSQL пользователь должен обладать правами Вход разрешен (Can login) и Создание баз (Create databases).

        Примечание

        Параметр integratedSecurity отвечает за возможность проверки подлинности Windows при подключении к СУБД. В связи с техническими особенностями данный функционал не поддерживается на СУБД PostgreSQL.

    • Установите флажок Регистрация действий, если действия в банке данных должны журналироваться в таблицу masterjournal базы данных (по умолчанию флажок не установлен). После установки флажка появляется возможность выбрать период хранения журнала действий; значение по умолчанию: 0 (Не ограничено).

    • Заполните следующие поля:

      • Сервер

      • Экземпляр

      • Порт

      • Имя базы данных

        Примечание

        Если база данных, указанная в настройках банка данных, не существует, Платформа самостоятельно создаст базу данных с указанным именем.

        Имя СУБД PostgreSQL не должно содержать буквы в верхнем регистре, в противном случае подключение Платформы к СУБД будет невозможно. Начиная с версии 3.1.0 для корректного подключения необходимо переименовать СУБД и указать новое имя базы данных в настройках сервиса до применения конфигурации

    • Настройте параметры аутентификации:

      • Установите флажок Вход по имени пользователя и паролю

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

      • Если данные пользователя хранятся в сервисе Управление пользователями, установите флажок Получать пароль из модуля Credential. В результате поле Пароль отображаться не будет.

      ../../_images/authorization.png
  3. Нажмите на кнопку перехода в режим редактора конфигурации:

    ../../_images/image801.png
  4. Установите параметры сервиса: databaseType, serverAddress, serverPort, serverInstance, database, account, name, description.

  5. Нажмите на кнопку Сохранить изменения.

  6. Нажмите на кнопку Применить конфигурацию.

  7. Убедитесь, что в диспетчере задач появился процесс банка - DatareonPlatformDataBank.

Пример конфигурации сервиса банка данных:

{
        "$type": "DT.ClusterConfiguration.NodeModule, DT_Core",
        "config": {
                "$type": "DT.ConfigurationRepository.Configuration.ModuleConfiguration.StorageConfig,
        DT_ConfigurationRepository",
                "changeLog": false,
                "storeDay": 0,
                "databaseConfiguration": {
                        "$type": "DT.ClusterConfiguration.DBConnectionConfig, DT_Core",
                        "databaseType": "MsSql",
                        "useConnectionString": false,
                        "useUsernameAndPassword": true,
                        "serverAddress": "DTplatform31",
                        "serverPort": 1433,
                        "serverInstance": "sqlexpress",
                        "database": "MyDB",
                        "account": {
                                "$type": "DT.ClusterConfiguration.Account, DT_Core",
                                "userName": "Testing",
                                "useCredential": false
                        },
                        "integratedSecurity": false,
                        "pooling": true,
                        "minimumPoolSize": -1,
                        "maximumPoolSize": -1,
                        "connectionLifetime": -1,
                        "properties": [],
                        "setDbOptimizeOptions": true
                },
                "sendingStrategy": ""
        },
        "isActive": true,
        "folderId": null,
        "entityId": "e24de33c-a25f-494c-a97c-042b8775c21c",
        "clusterId": "140e7996-8609-4ebd-a783-ca63855dbb9a",
        "name": "Банк_данных",
        "description": "Банк данных",
        "comment": "",
        "version": 1,
        "tagsCollection": [],
        "fieldsFromGlobalBusiness": {
                "$type": "System.Collections.Generic.Dictionary`2[[System.String, System.Private.CoreLib],[System.String, System.Private.CoreLib]], System.Private.CoreLib"
        },
        "className": "DataBank",
        "classNameStr": "Банк данных"
}

Основные параметры:

Параметры работы Банка данных:

  • changeLog (boolean): UI настройка Регистрация действий.

  • storeDay (integer): UI настройка Период хранения журнала действий, указывается цифра в днях.

  • sendingStrategy (string): UI настройка Правило обработки очередей.

Параметры работы банка с СУБД:

  • databaseType (enum): UI настройка СУБД.

  • useConnectionString (boolean): подключение к данным.

  • useUsernameAndPassword (boolean): UI настройка Вход по имени пользователя и паролю.

  • serverAddress (string): UI настройка Сервер.

  • serverPort (integer): UI настройка Порт.

  • serverInstance (string): UI настройка Экземпляр.

  • database (string): UI настройка Имя базы данных.

  • userName (string): UI настройка Имя пользователя.

  • useCredential (boolean): UI настройка Получать пароль из модуля Credential.

  • integratedSecurity (boolean): значение всегда false, при попытке поменять в режиме конфигурации будет выходить ошибка Ошибка в JSON.

  • pooling (boolean): управление использования пула соединений. По умолчанию установлено true (включена пуловая обработка соединений, то есть соединения с БД повторно используются), true рекомендуется для повышения производительности.

  • minimumPoolSize (integer): минимальное количество соединений в пуле. Значение -1 означает использование значения по умолчанию (0).

  • maximumPoolSize (integer): максимальное количество соединений в пуле. Значение -1 означает использование значения по умолчанию (100).

  • connectionLifetime (integer): максимальное время жизни соединения (в секундах). После истечения времени соединение будет закрыто и заменено новым. Значение -1 соответствует значению по умолчанию (3600 секунд = 1 час).

  • properties (array): дополнительные свойства. Позволяет задавать специфические параметры для разных СУБД в виде массива объектов типа ключ-значение.

Например:

properties: [
{
        "Application Name": "MyApp",
        "Connect Timeout" : 30,
        "Packet Size": 4096
}
]
  • setDbOptimizeOptions (boolean) - включение оптимизационной настройки для MS SQL

    SET AUTO_CLOSE OFF;
    ALTER DATABASE [DBName] SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT ON;
    

Технические параметры:

  • isActive (boolean): UI настройка Включен (Основные).

  • folderId (string): ID папки.

  • entityId (string): ID Сервиса, присваивается системно.

  • clusterId (string): ID Кластера, присваивается системно.

  • name (string): UI настройка Имя (Основные).

  • description (string): UI настройка Название (Основные).

  • comment (string): UI настройка Комментарий (Основные).

  • version (integer): номер версии конфигурации.

  • tagsCollection (array): набор тегов, массив.

  • className (enum): тип сервиса.

  • classNameStr (enum): наименование типа сервиса.

Настройка триггеров

Триггеры используются при массовой загрузке данных в базу.

Управление осуществляется путем редактирования конфигурации банка данных:

"databankParams": {
        "$type": "DT.DatabankParams, DT_Core",
        "search_TableBulkAfter": 300,
        "search_TableInsertAfter": 30,
        "insert_BatchSize": 30,
        "delete_BatchSize": 100,
        "insert_BulkAfter": 2,
        "bulkCopyTimeout": 600,
        "checkBatchSize": 300,
        "commandTimeout": 0,
        "useMemoryOptimizedTable": true,
        "createDataViews": false,
        "fireTriggers": false
}

Основные параметры:

  • search_TableInsertAfter: количество строк для разделения записей.

  • insert_BulkAfter: предельное количество записей, при превышении которого будет применен метод массовой загрузки BulkInsert.

  • bulkCopyTimeout: таймаут для операции массового копирования.

  • commandTimeout: таймаут для всех операций.

  • useMemoryOptimizedTable: использование таблиц, оптимизированных в MSSQL.

  • fireTriggers: включение / выключение триггеров, значение по умолчанию - false.

Важно

Определение необходимости вставки данных через bulk или нет осуществляется по формуле:

"***количество записей (количество заполняемых полей(колонок) в таблице + 5)***".

Мониторинг

Сообщения из логгера ConveyorDataWatchService для банка данных отображаются в разделе ЦМ DebugCoveyor.

Чтобы сообщения начали поступать в журнал банка данных, необходимо выбрать конвейер DebugConveyor в настройках соответствующего кластера на вкладке Логирование в выпадающем списке Дополнительные разделы журнала, сохранить изменения и применить конфигурацию.

Устранение ошибок

При понижении версии Платформы может возникнуть ошибка работы банка Версия структуры базы не соответствует ожидаемой.

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

СУБД MSSQL

BEGIN TRY
        BEGIN TRAN
                IF EXISTS(SELECT TOP 1 1 FROM [dbo].[masterhash] WHERE LEN([guidpath]) > 300)
                BEGIN
                        RAISERROR('Найдены значения поля guidpath, превышающие максимальное ограничение. Откат на предыдущую версию невозможен.', 16, 1)
                END
                ALTER TABLE [dbo].[masterhash] ALTER COLUMN [guidpath] [nvarchar](300)
                UPDATE [dbo].[__MdmMigrations] SET [Version] = 1 WHERE [Name] = 'MasterHash'
        COMMIT
END TRY
BEGIN CATCH
        ROLLBACK
END CATCH

СУБД PostgreSQL

DO $$
BEGIN
        IF EXISTS(SELECT FROM "public"."masterhash" WHERE LENGTH("guidpath") > 300) THEN
                RAISE EXCEPTION 'Найдены значения поля guidpath, превышающие максимальное ограничение. Откат на предыдущую версию невозможен.';
        END IF;
        ALTER TABLE "public"."masterhash" ALTER COLUMN "guidpath" TYPE varchar(300);
        UPDATE "public"."__mdmmigrations" SET "version" = 1 WHERE "name" = 'MasterHash';
        COMMIT;
END
$$;