|
| DBServer_PostgreSQL (uniset::ObjectId id, const std::string &prefix) |
|
std::shared_ptr< LogAgregator > | logAggregator () |
|
std::shared_ptr< DebugStream > | log () |
|
bool | isConnectOk () const |
|
| DBServer (uniset::ObjectId id, const std::string &prefix="db") |
|
| DBServer (const std::string &prefix="db") |
|
virtual uniset::SimpleInfo * | getInfo (const char *userparam="") override |
|
| UniSetObject (const std::string &name, const std::string §ion) |
|
| 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::SimpleInfo * | apiRequest (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< UniSetObject > | get_ptr () |
|
virtual timeout_t | askTimer (uniset::TimerId timerid, timeout_t timeMS, clock_t ticks=-1, uniset::Message::Priority p=uniset::Message::High) override |
|
timeout_t | checkTimers (UniSetObject *obj) |
|
timeout_t | getTimeInterval (uniset::TimerId timerid) const |
|
timeout_t | getTimeLeft (uniset::TimerId timerid) const |
|
virtual Poco::JSON::Object::Ptr | httpRequest (const std::string &req, const Poco::URI::QueryParameters &p) |
|
|
virtual void | initDBServer () override |
|
virtual void | initDB (std::unique_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 | onTextMessage (const uniset::TextMessage *msg) override |
|
virtual bool | deactivateObject () override |
| Деактивация объекта (переопределяется для необходимых действий при завершении работы) Подробнее...
|
|
virtual std::string | getMonitInfo (const std::string ¶ms) override |
|
bool | writeToBase (const std::string &query) |
|
void | createTables (const std::shared_ptr< PostgreSQLInterface > &db) |
|
std::string | tblName (int key) |
|
void | flushBuffer () |
|
void | flushInsertBuffer () |
|
virtual void | addRecord (const PostgreSQLInterface::Record &&rec) |
|
virtual bool | writeInsertBufferToDB (const std::string &table, const std::initializer_list< std::string_view > colname, const InsertBuffer &ibuf) |
|
virtual void | processingMessage (const uniset::VoidMessage *msg) override |
|
virtual bool | activateObject () override |
| Активизация объекта (переопределяется для необходимых действий после активизации) Подробнее...
|
|
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) |
|
virtual std::string | getTimerName (int id) const |
|
TimersList | getTimersList () const |
|
The DBServer_PostgreSQL class Реализация работы с PostgreSQL.
Т.к. основная работа сервера - это частая запись данных, то сделана следующая оптимизация: Создаётся insert-буфер настраиваемого размера (ibufMaxSize). Как только буфер заполняется, он пишется в БД одним "оптимизированным" запросом. Помимо этого буфер скидывается, если прошло ibufSyncTimeout мсек или если пришёл запрос на UPDATE данных.
В случае если буфер переполняется (например нет связи с БД), то он чистится. При этом сколько записей удалять определяется коэффициентом ibufOverflowCleanFactor={0...1}. А также флаг lastRemove определяет удалять с конца или начала очереди.
- Предупреждения
- Следует иметь ввиду, что чтобы не было постоянных "перевыделений памяти" буфер сделан на основе vector и в начале работы в памяти сразу(!) резервируется место под буфер. Во первых надо иметь ввиду, что буфер - это то, что потеряется если вдруг произойдёт сбой по питанию или программа вылетит. Поэтому если он большой, то будет потеряно много данных. И второе, т.к. это vector - то идёт выделение "непрерывного куска памяти", поэтому у ОС могут быть проблемы найти "большой непрерывный кусок". Тем не менее реализация сделана на vector-е чтобы избежать лишних "перевыделений" (и сегментации) памяти во время работы.
-
Временно, для обратной совместимости поле 'time_usec' в таблицах оставлено с таким названием, хотя фактически туда сейчас сохраняется значение в наносекундах!