(DBServer_MySQL) Реализация сервиса ведения БД на основе MySQL

Общее описание работы DBServer_MySQL

Сервис предназначен для работы с БД MySQL. В его задачи входит сохранение всех событий происходищих в системе в БД. К этим событиям относятся изменение состояния датчиков, различные логи работы процессов и т.п. К моменту запуска, подразумевается, что неободимые таблицы уже созданы, все необходимые настройки mysql сделаны.
При работе с БД, сервис в основном пишет в БД. Обработка накопленных данных ведётся уже другими программами (web-интерфейс).
Для повышения надежности DBServer переодически ( DBServer_MySQL::PingTimer ) проверяет наличие связи с сервером БД. В случае если связь пропала (или не была установлена при старте) DBServer пытается вновь каждые DBServer::ReconnectTimer произвести соединение. При этом все запросы которые поступают для запии в БД, но не мгут быть записаны складываются в буфер (см. Защита от потери данных).
Предупреждения:
При каждой попытке восстановить соединение DBServer заново читает конф. файл. Поэтому он может подхватить новые настройки.
Необходимо сделать:
Может не сохранять текст, если задан код... (для экономии в БД)

Настройка DBServer

Объект DBServer берёт настройки из конфигурационного файла из секции <LocalDBServer>. Возможно задать следующие параметры:

Защита от потери данных

Для того, чтобы на момент отсутствия связи с БД данные по возможности не потерялись, сделан "кольцевой" буфер. Размер которго можно регулировать параметром "--dbserver-buffer-size" или параметром bufferSize=".." в конфигурационном файле секции "<LocalDBSErver...>".

Механизм построен на том, что если связь с mysql сервером отсутствует или пропала, то сообщения помещаются в колевой буфер, который "опустошается" как только она восстановится. Если связь не восстановилась, а буфер достиг максимального заданного размера, то удаляются более ранние сообщения. Эту логику можно сменить, если указать параметр "--dbserver-buffer-last-remove" или bufferLastRemove="1", то терятся будут сообщения добавляемые в конец.

Таблицы MySQL

К основным таблицам относятся следующие:
DROP TABLE IF EXISTS ObjectsMap;
CREATE TABLE ObjectsMap (
  name varchar(80) NOT NULL default '',
  rep_name varchar(80) default NULL,
  id int(4) NOT NULL default '0',
  msg int(1) default 0,
  PRIMARY KEY  (id),
  KEY rep_name (rep_name),
  KEY msg (msg)
) TYPE=MyISAM;


DROP TABLE IF EXISTS AnalogSensors;
CREATE TABLE AnalogSensors (
  num int(11) NOT NULL auto_increment,
  node int(3) default NULL,
  id int(4) default NULL,
  date date NOT NULL default '0000-00-00',
  time time NOT NULL default '00:00:00',
  time_usec int(3) unsigned default '0',
  value int(6) default NULL,
  PRIMARY KEY  (num),
  KEY date (date,time,time_usec),
  KEY node (node,id)
) TYPE=MyISAM;


--
-- Table structure for table `DigitalSensors`
--
DROP TABLE IF EXISTS DigitalSensors;
CREATE TABLE DigitalSensors (
  num int(11) NOT NULL auto_increment,
  node int(3) default NULL,
  id int(4) default NULL,
  date date NOT NULL default '0000-00-00',
  time time NOT NULL default '00:00:00',
  time_usec int(3) unsigned default '0',
  state char(1) default NULL,
  confirm time NOT NULL default '00:00:00',
  PRIMARY KEY  (num),
  KEY date (date,time,time_usec),
  KEY node (node,id),
  KEY confirm(confirm)
) TYPE=MyISAM;


DROP TABLE IF EXISTS SensorsThreshold;
CREATE TABLE SensorsThreshold (
  sid int(11) NOT NULL default '0',
  alarm int(8) NOT NULL default '0',
  warning int(8) NOT NULL default '0'
) TYPE=MyISAM;

Документация по UniSet. Последние изменения: Tue Jul 10 20:46:20 2012. Создано системой  doxygen 1.5.5