From OpenSCADAWiki
Jump to: navigation, search
This page is a translated version of the page Modules/FireBird and the translation is 100% complete.

Other languages:
English • ‎российский • ‎українська
Модуль Имя Версия Лицензия Источник Языки Платформы Тип Автор Описание
FireBird БД FireBird 2.2 GPL2 bd_FireBird.so en,uk,ru,de x86,x86_64,ARM БД Роман Савоченко Модуль БД. Предоставляет поддержку СУБД FireBird.

Модуль предоставляет в OpenSCADA поддержку СУБД FireBird, и InterBase, которая является небольшой и встраиваемой СУБД с функциями сетевой и поддержкой SQL-запросов. FireBird построена на основе коммерческой СУБД Interbase и она распространяется по свободной лицензии. Ознакомиться с СУБД можно на сайте http://www.firebirdsql.org. Модуль основан на библиотеке API производителя СУБД на языке "С" и он позволяет выполнять действия над базами данных, таблицами и содержимым таблиц.

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

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

СУБД FireBird адресуется путём указания имени файла БД, пользователя и пароля. В общем адрес БД записывается таким образом: {file};{user};{pass}[;{conTm}]. Где:

  • file — полное имя файла БД;
  • user — пользователь БД, от имени которого производится доступ;
  • pass — пароль пользователя, от имени которого производится доступ;
  • conTm — таймаут подключения, секунд.

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

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

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

  • сканирование записей таблицы;
  • запрос значений указанных записей;
  • установка значений указанных записей;
  • удаление записей.

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

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

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

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

Типы полей OpenSCADA Типы полей FireBird
TFld::String VARCHAR, BLOB SUBTYPE TEXT
TFld::Integer INTEGER
TFld::Real DOUBLE
TFld::Boolean SMALLINT

4 Доступ к БД

Права доступа к БД определяются правами файла БД.

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

  • Установка СУБД FireBird в виде пакета или сборкой.
  • Запуск СУБД:
    # Запуск классического сервера
    $ service firebird start
    # Запуск в суперсервере
    $ service xinetd restart
  • Установка нужного пароля для системного пользователя "sysdba":
    $ gsec -user sysdba -pass masterkey -mo sysdba -pw 123456
  • Подключение к СУБД с помощью данного модуля, введя адрес БД: "/var/tmp/test.fbd;sysdba;123456"

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

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

Operations for 1000 records, seconds FireBird 2.5
AMD Turion L625 1.6, 2G, FireBird [2.1.3 Local SuperServer; 100Base-TX; 2.5.2 100Base-TX SuperServer ForcedWrites=Off; ForcedWrites=On]
Intel(R) Core(TM) i3 CPU 1.33GHz, 3G, HDD [2.5.2 100Base-TX SuperServer ForcedWrites=Off; ForcedWrites=On]
FireBird 3
Intel(R) Core(TM) i7 CPU 2.6GHz, 12G, FastSSD, Local network
Creating: [0.93; 1.15; 4.4; 5.2]; [3.68; 4.67] 0.5
Updating: [2.74; 2.94; 5.1; 5.2]; [3.88; 4.54] 0.47
Getting: [1.64; 2.22; 5.0; 27.8]; [3.69; 28.8] 2.95
Seeking: - ; [5.36; 32] 3.3
Seeking in preload: - ; [0.045; 0.065] 0.047
Deleting: [0.65; 1.04; 2.0; 2.4]; [1.69; 1.66] 0.17

6 Замечания

СУБД FireBird имеет много архитектурных ограничений и проблем в виду наследственности InterBase и родительской ОС MS Windows, которые препятствуют её широкому использованию для многих задач. Известные проблемы:

  • СУБД медленнее в сравнении с MySQL или PostgreSQL, см. предыдущий раздел. Особенно в режиме ForcedWrites On(sync).
  • СУБД имеет фиксированное ограничение на размер выражения SQL в 65536 КБ, которое препятствует размещению большого содержимого исключительно посредством SQL.
  • Классический сервер на Linux, в режиме выключения ForcedWrites, может намертво зависать.
  • Отсутствует контроль за лимитами времени подключения, что приводит к продолжительному и неконтролируемому ожиданию в клиентских приложениях.