Модуль: | SQLite |
Имя: | БД SQLite |
Тип: | БД |
Источник: | bd_SQLite.so |
Версия: | 2.3 |
Автор: | Роман Савоченко |
Описание: | Модуль БД. Предоставляет поддержку БД SQLite. |
Лицензия: | GPL |
Модуль <SQLite> предоставляет в систему OpenSCADA поддержку БД SQLite. БД SQLite является небольшой, встраиваемой БД поддерживающей SQL-запросы. БД SQLite распространяется по свободной лицензии. Ознакомиться с БД можно на сайте БД — http://sqlite.org. Модуль основан на библиотеке API производителя БД языка "C". Модуль позволяет выполнять действия над базами данных, таблицами и содержимым таблиц.
Поддерживаются операции открытия и закрытия БД, с возможностью создания новой БД при открытии и удаления существующей при закрытии. В терминах подсистемы "БД", системы OpenSCADA, открытием БД является её регистрация для последующего использования в системе. Также, поддерживается операция запроса перечня таблиц в БД.
БД SQLite адресуется путём указания имени файла БД в формате: [<FileDBPath>]. Где:
Поддерживаются операции открытия, закрытия таблицы, с возможностью создания новой таблицы при открытии и удаления существующей при закрытии, а также запрос структуры таблицы.
API подсистемы "БД" предполагает доступ к содержимому таблицы по значению ключевого(ых) полей. Так, операция запроса записи подразумевает предварительную установку ключевых колонок объекта TConfig, по которым будет выполнен запрос. Создание новой записи(строки) производится операцией установки значений записи, которая отсутствует.
Модуль позволяет динамически менять структуру таблиц БД SQLite, путём создания новой БД с требуемой структурой и копирование в неё данных из старой. Так, в случае несоответствия структуры таблицы и структуры устанавливаемой записи, структура таблицы будет приведена к требуемой структуре записи. В случае запроса значений записи и несоответствия структур записи и таблицы, будут получены только значения общих элементов записи и таблицы. Модуль не отслеживает порядка расположения элементов записи и структуры таблицы!
Модулем реализуется механизм поддержки многоязыковых текстовых переменных. Для полей с многоязыковой текстовой переменной создаются колонки отдельных языков в формате <lang>#<FldID> (en#NAME). При этом базовая колонка содержит значение для базового языка. Колонки отдельных языков создаются по надобности, в момент сохранения в БД и при исполнении OpenSCADA в соответствующей локали. В случае отсутствия значения для конкретного языка будет использоваться значений для базового языка.
Типы элементов БД SQLite следующим образом соответствуют типам элементов системы OpenSCADA:
Типы полей системы OpenSCADA | Типы полей БД SQLite |
TFld::String | TEXT |
TFld::Integer, TFld::Boolean | INTEGER |
TFld::Real | DOUBLE |
Права доступа к БД определяются правами доступа к отдельно взятому файлу БД. Модулем поддерживается работа с файлами БД SQLite в режиме только для чтения, например, в демонстрациях.
Замер производительности БД выполнялся тестом "БД", модуля системных тестов "SystemTests", путём выполнения операций над записями структурой: <name char (20), descr char (50), val double (10.2), id int (7), stat bool, reqKey string, reqVal string>.
Operation | Nokia N800, SD 4GClass6 Nokia N900 | RPi2 Debian8 Class10 UHS1; RPi3 Debian8 Class10 UHS1; OrangePiZero Debian8 Class2 | AMD Turion L625 1.6, 2G [HDD; SSD] Intel(R) Core(TM) i3 CPU 1.33GHz, 3G [HDD; SSD]; Intel(R) Core(TM) i7 CPU 2.6GHz, 12G FastSSD |
Creation of the 1000 records (sec.): | 3.3; 1.96 | 0.78; 0.43; 0.48 | [0.49; 0.2]; [0.39; 0.22]; 0.056 |
Updating of the 1000 records (sec.): | 3.2; 2.47 | 0.7; 0.41; 0.45 | [0.48; 0.19]; [0.40; 0.21]; 0.053 |
Getting of the 1000 records (sec.): | 2.6; 1.81 | 0.69; 0.38; 0.45 | [0.36; 0.19]; [0.31; 0.21]; 0.051 |
Seeking of the 1000 records (sec.): | 3.1; 1.48 | 0.76; 0.42; 0.51 | [-; 0.22]; [0.21; 0.22]; 0.052 |
Seeking in preload of the 1000 records (sec.): | 0.53; 0.29 | 0.13; 0.071; 0.088 | [-; 0.028]; [0.027; 0.028]; 0.0073 |
Deleting of the 1000 record (sec.): | 1.18; 0.43 | 0.20; 0.10; 0.13 | [0.08; 0.058]; [0.067; 0.069]; 0.012 |