Банк данных
Сервис используется для хранения пользовательских данных в Платформе с использованием СУБД MSSQL или PostgreSQL.
Важно
Ознакомьтесь с требованиями к версиям используемых СУДБ в разделе Ограничения и рекомендации.
В случае неуспешного подключения Банка данных к Базе данных причина ошибки указывается в ЦМ на вкладке Основные в деталях состояния или на вкладке Журнал.
Создание сервиса
Чтобы создать сервис Банк данных:
В ЦН перейдите в раздел Сервисы.
Нажмите на кнопку + над таблицей сервисов. В рабочей области страницы отобразится интерфейс создания / редактирования сервиса, содержащий две вкладки: Основные и Параметры сервиса.
На вкладке Основные заполните следующие поля:
Название: произвольное название сервиса, необязательно для заполнения.
Имя: уникальное имя сервиса, обязательно для заполнения.
Комментарий: описание сервиса, необязательно для заполнения.
Для активации сервиса установите флажок Включен.
Для создания сервиса выберите вариант Банк данных в разделе Настройка сервисов:
На вкладке Параметры сервиса произведите следующие действия:
Выберите используемую СУБД:
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. В результате поле Пароль отображаться не будет.
Нажмите на кнопку перехода в режим редактора конфигурации:
Установите параметры сервиса: databaseType, serverAddress, serverPort, serverInstance, database, account, name, description.
Нажмите на кнопку Сохранить изменения.
Нажмите на кнопку Применить конфигурацию.
Убедитесь, что в диспетчере задач появился процесс банка - 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 $$;