|
| 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) |
|
The DBServer_PostgreSQL class Реализация работы с PostgreSQL.
Т.к. основная работа сервера - это частая запись данных, то сделана следующая оптимизация: Создаётся insert-буфер настраиваемого размера (ibufMaxSize). Как только буфер заполняется, он пишется в БД одним "оптимизированным" запросом. Помимо этого буфер скидывается, если прошло ibufSyncTimeout мсек или если пришёл запрос на UPDATE данных.
В случае если буфер переполняется (например нет связи с БД), то он чистится. При этом сколько записей удалять определяется коэффициентом ibufOverflowCleanFactor={0...1}. А также флаг lastRemove определяет удалять с конца или начала очереди.
- Предупреждения
- Следует иметь ввиду, что чтобы не было постоянных "перевыделений памяти" буфер сделан на основе vector и в начале работы в памяти сразу(!) резервируется место под буфер. Во первых надо иметь ввиду, что буфер - это то, что потеряется если вдруг произойдёт сбой по питанию или программа вылетит. Поэтому если он большой, то будет потеряно много данных. И второе, т.к. это vector - то идёт выделение "непрерывного куска памяти", поэтому у ОС могут быть проблемы найти "большой непрерывный кусок". Тем не менее реализация сделана на vector-е чтобы избежать лишних "перевыделений" (и сегментации) памяти во время работы.
-
Временно, для обратной совместимости поле 'time_usec' в таблицах оставлено с таким названием, хотя фактически туда сейчас сохраняется значение в наносекундах!