Модули/MySQL

This page is a translated version of the page Modules/MySQL and the translation is 100% complete.

Other languages:
English • ‎российский • ‎українська
Constr.png The translation checking and actualizing
Модуль Имя Версия Лицензия Источник Языки Платформы Тип Автор Описание
MySQL БД MySQL 2.8 GPL2 bd_MySQL.so en,uk,ru,de x86,x86_64,ARM БД Роман Савоченко Модуль БД. Предоставляет поддержку БД MySQL.

Contents

Модуль "MySQL" предоставляет в OpenSCADA поддержку БД MySQL. БД MySQL является мощной реляционной и многоплатформенной БД, доступной по свободной лицензии. Настоящим разработчиком БД MySQL является Корпорация Oracle. Полностью свободной реализацией MySQL является проект MariaDB. Модуль основан на библиотеке API БД MySQL на языке "С". Модуль позволяет выполнять действия над базами данных, таблицами и содержимым таблиц.

1 Операции над БД

Поддерживаются операции открытия и закрытия БД с возможностью создания новой БД при открытии и удаления существующей при закрытии. В терминах подсистемы "БД" системы OpenSCADA открытием БД является её регистрация для последующего использования в системе. Также поддерживается операция запроса списка таблиц в БД.

БД MySQL адресуется строкой следующего типа: "{host};{user};{pass};{db};{port}[;{u_sock}[;{charset-collation}[;{tms}]]]". Где:

В случае локального доступа к БД, в пределах одного хоста, нужно использовать UNIX сокет. Например: ";roman;123456;OpenSCADA;;/var/lib/mysql/mysql.sock;utf8-utf8_general_ci-MyISAM;5,2,2"

В случае удалённого доступа к БД нужно использовать имя хоста и порт сервера БД. Например: "server.nm.org;roman;123456;OpenSCADA;3306"

2 Операции над таблицей

Поддерживаются операции открытия, закрытия таблицы с возможностью создания новой таблицы при открытии и удаления существующей при закрытии, а также запрос структуры таблицы.

3 Операции над содержимым таблицы

API подсистемы "БД" предполагает доступ к содержимому таблицы по значению ключевого(ых) поля(ей). Так, операция запроса записи подразумевает предварительную установку ключевых колонок объекта TConfig, по которым будет выполнен запрос. Создание новой записи(строки) производится операцией установки значений записи, которая отсутствует.

Модуль позволяет динамически изменять структуру таблиц БД MySQL. Так, в случае несоответствия структуры таблицы и структуры устанавливаемой записи, структура таблицы будет приведена к требуемой структуре записи. В случае запроса значений записи и несоответствия структур записи и таблицы, будут получены только значения общих элементов записи и таблицы. Модуль не отслеживает порядок расположения элементов в записи и структуре таблицы!

Модулем реализуется механизм поддержки многоязыковых текстовых переменных. Для полей с многоязыковой текстовой переменной создаются колонки отдельных языков в формате {lang}#{FldID} (en#NAME). При этом базовая колонка содержит значение для базового языка. Колонки отдельных языков создаются по надобности, в момент сохранения в БД и при исполнении OpenSCADA в соответствующей локали. В случае отсутствия значения для конкретного языка будет использоваться значение для базового языка.

Типы элементов БД MySQL следующим образом соответствуют типам элементов системы OpenSCADA:

Типы полей системы OpenSCADA Типы полей БД MySQL
TFld::String char(n), text, mediumtext
TFld::Integer int(n), DATETIME [для полей с флагом TFld::DateTimeDec]
TFld::Real double(n,m)
TFld::Boolean tinyint(1)

4 Доступ к БД

БД MySQL содержит мощный механизм разделения доступа, который заключается в выборочном указании доступа пользователя БД к отдельным SQL-командам. В таблице ниже перечислены операции над БД и требуемый доступ к командам для этих операций.

Операция SQL-команды
Создание БД и таблиц CREATE
Удаление БД и таблиц DROP
Добавление записей INSERT
Удаление записей DELETE
Получение значений записей SELECT
Установка значений записей UPDATE
Манипуляция структурой таблицы ALTER

Кратко рассмотрим процедуру первичной настройки сервера MySQL с целью подключения к нему с помощью данного модуля:

5 Производительность БД

Замер производительности БД выполнялся тестом "БД" модуля системных тестов "SystemTests", путём выполнения операций над записями структурой: "name char (20), descr char (50), val double (10.2), id int (7), stat bool, reqKey string, reqVal string".

Operation Nokia N800, MySQL 5.0.89 MyISAM WLAN

AMD Turion L625 1.6, 2G, MySQL
[5.0.51 MyISAM 100Base-TX; WLAN];
[5.1.62 MyISAM local; 100Base-TX];
[5.5.41 MyISAM local; InnoDB; MyISAM 100Base-TX; InnoDB]

Intel(R) Core(TM) i3 CPU 1.33GHz, 3G, HDD
[5.5.49 MyISAM 100Base-TX; InnoDB]

Creation of the 1000 records (sec.): 4.53 [1.1; 3.6]; [0.7; 1.00]; [0.57; 0.73; 2.1; 2.0] [1.68; 1.56]
Updating of the 1000 records (sec.): 4.2 [1.12; 3.8]; [0.7; 1.07]; [0.6; 0.66; 2.0; 2.0] [1.75; 1.87]
Getting of the 1000 records (sec.): 2.88 [0.8; 2.1]; [0.38; 0.69]; [0.38; 0.4; 1.3; 1.4] [1.056; 1.12]
Seeking of the 1000 records (sec.): - - [1.89; 2.23]
Seeking in preload of the 1000 records (sec.): - - [0.03; 0.03]
Deleting of the 1000 record (sec.): 1.47 [0.43; 1.7]; [0.27; 0.42]; [0.23; 0.2; 0.79; 0.6] [0.66; 0.67]