[Devel] Информация для DBServer'а

Evgeny Sinelnikov sin на etersoft.ru
Чт Сен 16 13:25:43 MSD 2010


Здраствуйте,

16 сентября 2010 г. 11:59 пользователь Ilya Shpigor
<shpigor на etersoft.ru> написал:
>> 3. О квитировании знает только журнал, т.к. только в нём известно
>> какое именно сейчас сообщение требует квитирования
>> (т.е. какое именно сейчас читает оператор).
>> Поэтому он посылал специальное сообщение ConfirmMessage DBServer-у,
>> в котором передавалась информация (id, время срабатывания, тип сообщения и
>> т.п.), того датчика который квитируем..
>> По этой информации DBServer делал
>> UPDATE confirm_time='confirm.time'... WHERE id=confirm.id AND
>> time=confirm.time AND time_msec=confirm.time_msec AND type=confirm.type
>> Это конечно "псевдокод" запроса, но смысл в том, что, что для внесения
>> информации о квитировании (UPDATE) не обязательно знать id-записи.. Запись
>> можно найти по другим полям.
>
> Тогда вопрос к sin на .
>
> Если мы будем делать UPDATE записи в БД по приходу сообщения о квитировании,
> такая структура таблицы main_confirm не подойдет:
>

Да, не подойдёт. Это расхождение между тем подходом, который я хотел и
тем, который прелагает Паша. Вынужден согласиться, что один запрос
лучше, чем два.

> +--------+---------+------+-----+---------+-------+
> | Field  | Type    | Null | Key | Default | Extra |
> +--------+---------+------+-----+---------+-------+
> | id     | int(11) | NO   | PRI | NULL    |       |
> | log_id | int(11) | NO   |     | NULL    |       |
> | time   | time    | YES  |     | NULL    |       |
> +--------+---------+------+-----+---------+-------+
>
> Т.к. нужно ориентироваться не на id записи в main_history, а непосредственно
> на id датчика.
>
> Какая тогда должна быть структура таблицы main_confirm?
>

Да, на придётся добавить поле confirm в таблицу main_history.

Компромисс, при этом будет таким. По умолчанию, значение поля confirm
равно NULL. DBServer при отправке в базу проверяет нет ли
необходимости квитирования датчика по configure.xml (если это тяжёлая
операция, то вовремя загрузки делаем std::map<ObjectID,bool>). Если
квитирование требуется, то указываем время как -1. Далее UPDATE, если
приходит сообщение от журнала, меняет значение confirm на время
потдверждения по ключу датчик:время (нужно индексы в базе включить для
быстрого доступа).

Все записи в базе с confirm = -1 отражают по каким-либо причинам не
заквитированные оператором сообщения.

-- 
Sin (Sinelnikov Evgeny)


Подробная информация о списке рассылки Devel