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 ()
 
- Открытые члены унаследованные от uniset::DBServer
 DBServer (uniset::ObjectId id, const std::string &prefix="db")
 
 DBServer (const std::string &prefix="db")
 
- Открытые члены унаследованные от uniset::UniSetObject
 UniSetObject (const std::string &name, const std::string &section)
 
 UniSetObject (uniset::ObjectId id)
 
std::shared_ptr< UniSetObjectget_ptr ()
 
virtual CORBA::Boolean exist () override
 
virtual uniset::ObjectId getId () override
 
const uniset::ObjectId getId () const
 
std::string getName () const
 
virtual uniset::ObjectType getType () override
 
const std::string getStrType ()
 
virtual uniset::SimpleInfogetInfo (const char *userparam="") override
 
virtual uniset::SimpleInfoapiRequest (const char *query) override
 
virtual void push (const uniset::TransportMessage &msg) override
 поместить сообщение в очередь Подробнее...
 
virtual Poco::JSON::Object::Ptr httpGet (const Poco::URI::QueryParameters &p) override
 
virtual Poco::JSON::Object::Ptr httpHelp (const Poco::URI::QueryParameters &p) override
 
uniset::ObjectPtr getRef () const
 
virtual timeout_t askTimer (uniset::TimerId timerid, timeout_t timeMS, clock_t ticks=-1, uniset::Message::Priority p=uniset::Message::High) override
 
- Открытые члены унаследованные от uniset::LT_Object
timeout_t checkTimers (UniSetObject *obj)
 
timeout_t getTimeInterval (uniset::TimerId timerid)
 
timeout_t getTimeLeft (uniset::TimerId timerid)
 
- Открытые члены унаследованные от uniset::UHttp::IHttpRequest
virtual Poco::JSON::Object::Ptr httpRequest (const std::string &req, const Poco::URI::QueryParameters &p)
 

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

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)
 
- Открытые статические члены унаследованные от uniset::DBServer
static std::string help_print ()
 

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

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
 
- Защищенные типы унаследованные от uniset::LT_Object
typedef std::deque< TimerInfoTimersList
 

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

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 ()
 
- Защищенные члены унаследованные от uniset::DBServer
virtual void processingMessage (const uniset::VoidMessage *msg) override
 
virtual bool activateObject () override
 Активизация объекта (переопределяется для необходимых действий после активизации) Подробнее...
 
- Защищенные члены унаследованные от uniset::UniSetObject
VoidMessagePtr receiveMessage ()
 
virtual VoidMessagePtr waitMessage (timeout_t msec=UniSetTimer::WaitUpTime)
 
void termWaiting ()
 
size_t countMessages ()
 
size_t getCountOfLostMessages () const
 
virtual bool deactivateObject ()
 Деактивиция объекта (переопределяется для необходимых действий перед деактивацией) Подробнее...
 
void terminate ()
 
void thread (bool create)
 
void offThread ()
 
void onThread ()
 
virtual void callback ()
 
void setID (uniset::ObjectId id)
 
void setThreadPriority (Poco::Thread::Priority p)
 
void setMaxSizeOfMessageQueue (size_t s)
 
size_t getMaxSizeOfMessageQueue () const
 
bool isActive () const
 
void setActive (bool set)
 
virtual Poco::JSON::Object::Ptr httpGetMyInfo (Poco::JSON::Object::Ptr root)
 
Poco::JSON::Object::Ptr request_conf (const std::string &req, const Poco::URI::QueryParameters &p)
 
Poco::JSON::Object::Ptr request_conf_name (const std::string &name, const std::string &props)
 
- Защищенные члены унаследованные от uniset::LT_Object
virtual std::string getTimerName (int id)
 
TimersList getTimersList ()
 

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

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 }
 
- Защищенные данные унаследованные от uniset::DBServer
std::shared_ptr< LogAgregatorloga
 
std::shared_ptr< DebugStreamdblog
 
std::shared_ptr< LogServerlogserv
 
std::string logserv_host = {""}
 
int logserv_port = {0}
 
const std::string prefix = { "db" }
 
- Защищенные данные унаследованные от uniset::UniSetObject
std::shared_ptr< UInterfaceui
 
std::string myname
 
std::string section
 
std::weak_ptr< UniSetManagermymngr
 
- Защищенные данные унаследованные от uniset::LT_Object
timeout_t sleepTime
 

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

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)
overrideprotectedvirtual

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

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

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

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

bool uniset::DBServer_PostgreSQL::activate
protected

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