[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