[Devel] Информация для DBServer'а
Evgeny Sinelnikov
sin на etersoft.ru
Пт Сен 17 00:42:07 MSD 2010
16 сентября 2010 г. 20:32 пользователь Pavel Vaynerman
<vpashka на gmail.com> написал:
>> Компромисс, при этом будет таким. По умолчанию, значение поля confirm
>
>> равно NULL. DBServer при отправке в базу проверяет нет ли
>
>> необходимости квитирования датчика по configure.xml (если это тяжёлая
>
>> операция, то вовремя загрузки делаем std::map<ObjectID,bool>). Если
>
>> квитирование требуется, то указываем время как -1. Далее UPDATE, если
>
>> приходит сообщение от журнала, меняет значение confirm на время
>
>> потдверждения по ключу датчик:время (нужно индексы в базе включить для
>
>> быстрого доступа).
>
>>
>
>> Все записи в базе с confirm = -1 отражают по каким-либо причинам не
>
>> заквитированные оператором сообщения.
>
> ---
>
> Если вспомнишь наше обсуждение, то мой подход был немного в другом..
>
> Должна быть сделана отедльная таблица с информацией о том, какие
> датчики-значения требуют квитирования.. Это статическая информация, парсится
> из configure, ровно так же как и Actions,Messages и т.п.
>
Действительно. Идея - перенести логику постобработку.
> ----
>
> Если необходимо просмотреть все незаквитированные сообщения, то
> соответственно
>
> идёт (типичный) щапрос к двум таблицам и вынимаются записи которые есть
>
> в Confirm(Table) (key=value) и у которых при этом confirm=NULL.
>
В таком случае дополнительная таблица не нужна. Запрос всех
квтириуемых сообщений выглядит, как обычный запрос Списка сообщений по
таблице SensorMessages с дополнительным ограничением - mtype не равным
0. Незаквитированные сообщения отличаются от заквитированных по тому
оавно ли поле confirm Null или нет.
> ----
>
> При этом не нужно делать по умолчанию NULL, а потом менять на -1..
>
> Зачем..
>
Да, действительно. Эту обработку может проводить верхний уровень,
интерпретируя содержимое базы.
> ------
>
> Смысл в всё в том же, чтобы DBServer не занимался никакими обработками
> квитирования. Его задача проста - получил SensorMessage и сохранил в DB.
>
> Никакой обработки или логики..
>
Жаль, конечно, что в целях оптимизации приходится терять информацию, а
потом её восстанавливать. В таком случае всё ещё проще. Сообщение
передаётся, базу одновляет, а хеша и работы с configure.xml для
квитирования в коде DBServer'а нет. Этот код переносится в
web-интерфейс.
--
Sin (Sinelnikov Evgeny)
Подробная информация о списке рассылки Devel