UniSet 2.32.1
Открытые члены | Открытые статические члены | Статические открытые данные | Защищенные типы | Защищенные члены | Защищенные данные | Полный список членов класса
Класс uniset::DBServer_PostgreSQL

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

#include <DBServer_PostgreSQL.h>

Граф наследования: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 ()
 
bool isConnectOk () const
 
- Открытые члены унаследованные от uniset::DBServer
 DBServer (uniset::ObjectId id, const std::string &prefix="db")
 
 DBServer (const std::string &prefix="db")
 
virtual uniset::SimpleInfogetInfo (const char *userparam="") override
 
- Открытые члены унаследованные от uniset::UniSetObject
 UniSetObject (const std::string &name, const std::string &section)
 
 UniSetObject (uniset::ObjectId id)
 
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::SimpleInfoapiRequest (const char *query) override
 
virtual void push (const uniset::TransportMessage &msg) override
 поместить сообщение в очередь
 
virtual void pushMessage (const char *msg, ::CORBA::Long mtype, const ::uniset::Timespec &tm, const ::uniset::ProducerInfo &pi, ::CORBA::Long priority, ::CORBA::Long consumer) 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
 
std::shared_ptr< UniSetObjectget_ptr ()
 
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) const
 
timeout_t getTimeLeft (uniset::TimerId timerid) const
 
- Открытые члены унаследованные от uniset::UHttp::IHttpRequest
virtual Poco::JSON::Object::Ptr httpRequest (const std::string &req, const Poco::URI::QueryParameters &p)
 

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

static std::shared_ptr< DBServer_PostgreSQLinit_dbserver (int argc, const char *const *argv, const std::shared_ptr< uniset::SharedMemory > &ic=nullptr, const std::string &prefix="pgsql")
 
static void help_print (int argc, const char *const *argv)
 
- Открытые статические члены унаследованные от uniset::DBServer
static std::string help_print ()
 

Статические открытые данные

static constexpr std::string_view tblcols = { "date,time,time_usec,sensor_id,value,node" }
 

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

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 onReconnect (std::unique_ptr< PostgreSQLInterface > &db)
 
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 onTextMessage (const uniset::TextMessage *msg) override
 
virtual bool deactivateObject () override
 Деактивация объекта (переопределяется для необходимых действий при завершении работы)
 
virtual std::string getMonitInfo (const std::string &params) override
 
bool writeToBase (const std::string &query)
 
std::string tblName (int key)
 
void flushBuffer ()
 
void flushInsertBuffer ()
 
virtual void addRecord (const PostgreSQLInterface::Record &&rec)
 
virtual bool writeInsertBufferToDB (const std::string &table, std::string_view colname, const InsertBuffer &ibuf)
 
- Защищенные члены унаследованные от uniset::DBServer
virtual void processingMessage (const uniset::VoidMessage *msg) override
 
virtual bool activateObject () override
 Активизация объекта (переопределяется для необходимых действий после активизации)
 
- Защищенные члены унаследованные от uniset::UniSetObject
VoidMessagePtr receiveMessage ()
 
VoidMessagePtr waitMessage (timeout_t msec=UniSetTimer::WaitUpTime)
 
void termWaiting ()
 
size_t countMessages ()
 
size_t getCountOfLostMessages () const
 
void uterminate ()
 
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_configure (const std::string &req, const Poco::URI::QueryParameters &p)
 
Poco::JSON::Object::Ptr request_configure_get (const std::string &req, const Poco::URI::QueryParameters &p)
 
Poco::JSON::Object::Ptr request_configure_by_name (const std::string &name, const std::string &props)
 
Poco::JSON::Object::Ptr request_params (const std::string &req, const Poco::URI::QueryParameters &p)
 
virtual Poco::JSON::Object::Ptr request_params_get (const std::string &req, const Poco::URI::QueryParameters &p)
 
virtual Poco::JSON::Object::Ptr request_params_set (const std::string &req, const Poco::URI::QueryParameters &p)
 
- Защищенные члены унаследованные от uniset::LT_Object
virtual std::string getTimerName (int id) const
 
TimersList getTimersList () const
 

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

std::unique_ptr< PostgreSQLInterfacedb
 
- Защищенные данные унаследованные от 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::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' в таблицах оставлено с таким названием, хотя фактически туда сейчас сохраняется значение в наносекундах!

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

◆ Timers

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

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

ReconnectTimer 

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

FlushInsertBuffer 

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

Методы

◆ confirmInfo()

void DBServer_PostgreSQL::confirmInfo ( const uniset::ConfirmMessage * cmsg)
overrideprotectedvirtual

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

◆ deactivateObject()

bool DBServer_PostgreSQL::deactivateObject ( )
overrideprotectedvirtual

Деактивация объекта (переопределяется для необходимых действий при завершении работы)

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

◆ getMonitInfo()

string DBServer_PostgreSQL::getMonitInfo ( const std::string & params)
overrideprotectedvirtual

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

◆ help_print()

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

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

◆ init_dbserver()

std::shared_ptr< DBServer_PostgreSQL > DBServer_PostgreSQL::init_dbserver ( int argc,
const char *const * argv,
const std::shared_ptr< uniset::SharedMemory > & ic = nullptr,
const std::string & prefix = "pgsql" )
static

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

◆ initDBServer()

void DBServer_PostgreSQL::initDBServer ( )
overrideprotectedvirtual

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

◆ onTextMessage()

void DBServer_PostgreSQL::onTextMessage ( const uniset::TextMessage * msg)
overrideprotectedvirtual

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

◆ sensorInfo()

void DBServer_PostgreSQL::sensorInfo ( const uniset::SensorMessage * sm)
overrideprotectedvirtual

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

◆ sysCommand()

void DBServer_PostgreSQL::sysCommand ( const uniset::SystemMessage * sm)
overrideprotectedvirtual

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

◆ timerInfo()

void DBServer_PostgreSQL::timerInfo ( const uniset::TimerMessage * tm)
overrideprotectedvirtual

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