UniSet  2.6.0
Открытые члены | Открытые статические члены | Защищенные типы | Защищенные члены | Защищенные данные
Класс uniset::DBServer_PostgreSQL

The DBServer_PostgreSQL class Реализация работы с PostgreSQL. Подробнее...

Граф наследования:uniset::DBServer_PostgreSQL:
Inheritance graph
[см. легенду]
Граф связей класса uniset::DBServer_PostgreSQL:
Collaboration graph
[см. легенду]

Полный список членов класса

Открытые члены

 DBServer_PostgreSQL (uniset::ObjectId id, const std::string &prefix)
std::shared_ptr< LogAgregatorlogAggregator ()
std::shared_ptr< DebugStreamlog ()

Открытые статические члены

static std::shared_ptr
< DBServer_PostgreSQL
init_dbserver (int argc, const char *const *argv, const std::string &prefix="pgsql")
static void help_print (int argc, const char *const *argv)

Защищенные типы

enum  Timers { PingTimer, ReconnectTimer, FlushInsertBuffer, lastNumberOfTimer }
typedef std::unordered_map
< int, std::string > 
DBTableMap
typedef std::queue< std::string > QueryBuffer
typedef std::vector
< PostgreSQLInterface::Record > 
InsertBuffer

Защищенные члены

virtual void initDBServer () override
virtual void initDB (std::shared_ptr< PostgreSQLInterface > &db)
virtual void initDBTableMap (DBTableMap &tblMap)
virtual void timerInfo (const uniset::TimerMessage *tm) override
virtual void sysCommand (const uniset::SystemMessage *sm) override
virtual void sensorInfo (const uniset::SensorMessage *sm) override
virtual void confirmInfo (const uniset::ConfirmMessage *cmsg) override
virtual void sigterm (int signo) override
bool writeToBase (const string &query)
void createTables (std::shared_ptr< PostgreSQLInterface > &db)
std::string tblName (int key)
void flushBuffer ()
void flushInsertBuffer ()

Защищенные данные

std::shared_ptr
< PostgreSQLInterface
db
int PingTime = { 15000 }
int ReconnectTime
bool connect_ok
bool activate
QueryBuffer qbuf
size_t qbufSize
bool lastRemove = { false }
std::mutex mqbuf
const std::list< std::string > tblcols = { "date", "time", "time_usec", "sensor_id", "value", "node" }
InsertBuffer ibuf
size_t ibufSize = { 0 }
size_t ibufMaxSize = { 2000 }
timeout_t ibufSyncTimeout = { 15000 }
float ibufOverflowCleanFactor = { 0.5 }

Подробное описание

The DBServer_PostgreSQL class Реализация работы с PostgreSQL.

Т.к. основная работа сервера - это частая запись данных, то сделана следующая оптимизация: Создаётся insert-буфер настраиваемого размера (ibufMaxSize). Как только буфер заполняется, он пишется в БД одним "оптимизированным" запросом. Помимо этого буфер скидывается, если прошло ibufSyncTimeout мсек или если пришёл запрос на UPDATE данных.

В случае если буфер переполняется (например нет связи с БД), то он чистится. При этом сколько записей удалять определяется коэффициентом ibufOverflowCleanFactor={0...1}. А также флаг lastRemove определяет удалять с конца или начала очереди.

Предупреждения:
Следует иметь ввиду, что чтобы не было постоянных "перевыделений памяти" буфер сделан на основе vector и в начале работы в памяти сразу(!) резервируется место под буфер. Во первых надо иметь ввиду, что буфер - это то, что потеряется если вдруг произойдёт сбой по питанию или программа вылетит. Поэтому если он большой, то будет потеряно много данных. И второе, т.к. это vector - то идёт выделение "непрерывного куска памяти", поэтому у ОС могут быть проблеммы найти "большой непрерывный кусок". Тем не менее реализация сделана на vector-е чтобы избежать лишних "перевыделений" (и сегментации) памяти во время работы.
Временно, для обратной совместимости поле 'time_usec' в таблицах оставлено с таким названием, хотя фактически туда сейчас сохраняется значение в наносекундах!

Перечисления

Элементы перечислений:
PingTimer 

таймер на переодическую проверку соединения с сервером БД

ReconnectTimer 

таймер на повторную попытку соединения с сервером БД (или восстановления связи)

FlushInsertBuffer 

таймер на сброс Insert-буфера


Методы

void DBServer_PostgreSQL::help_print ( int  argc,
const char *const *  argv 
) [static]

глобальная функция для вывода help-а

std::shared_ptr< DBServer_PostgreSQL > DBServer_PostgreSQL::init_dbserver ( int  argc,
const char *const *  argv,
const std::string &  prefix = "pgsql" 
) [static]

глобальная функция для инициализации объекта

void DBServer_PostgreSQL::sigterm ( int  signo) [override, protected, virtual]

Функция вызываемая при приходе сигнала завершения или прерывания процесса. Переопределив ее можно выполнять специфичные для процесса действия по обработке сигнала. Например переход в безопасное состояние.

Предупреждения:
В обработчике сигналов ЗАПРЕЩЕНО вызывать функции подобные exit(..), abort()!!!!

Переопределяет метод предка uniset::UniSetObject.


Данные класса

признак наличия соеднинения с сервером БД