Russian Qt Forum

Qt => Базы данных => Тема начата: Vamireh от Март 01, 2015, 23:00



Название: Идеологический вопрос по БД
Отправлено: Vamireh от Март 01, 2015, 23:00
Допустим, есть список устройств в таблице. Каждый клиент выбирает себе устройство, с которым будет работать (id в переменную кладет, например). Нужно запретить работу с этим устройством параллельно другим клиентам. Как лучше сделать? Блокировка строк - вроде бы не мой случай. Пока добавил булевый столбец для проверки... Но, как минимум недостаток: если клиент аварийно завершится, то устройство так и останется "занятым", т.к. флаг не сбросится


Название: Re: Идеологический вопрос по БД
Отправлено: Vamireh от Март 01, 2015, 23:12
Пока идея есть написать небольшой сервер для этой цели....


Название: Re: Идеологический вопрос по БД
Отправлено: deMax от Март 19, 2015, 11:16
Пока идея есть написать небольшой сервер для этой цели....
Можно без сервера, в интовый столбец писать время работы с устройством и постоянно обновлять(раз в минуту). Если в столбце время не обновляется обнулить.


Название: Re: Идеологический вопрос по БД
Отправлено: AzazelloAV от Март 26, 2015, 02:39
Но, как минимум недостаток: если клиент аварийно завершится, то устройство так и останется "занятым", т.к. флаг не сбросится

Интересная, и в тоже время сложная задача.

Если это не скады системы я бы пошёл в лоб - каждый клиент сам подтверждает свое присутсвие. Т.е в вашем случае каждый клиент посылает раз в минуту о своём присутствии. Если уж делать очень примитивно, то два поля в БД - бул и время. Бул по расписанию сбрасывается раз в 2 минуты, если время больше 1 минуты (поле время), так вы отловите отвалившихся клиентов.

ЗЫ: более подробное описание ответа выше