|
Айлурофил
|
|
Взаимодействие копий программы31.05.2023, 04:43. Показов 2926. Ответов 40
Метки нет (Все метки)
Не знаю, в какой раздел этот вопрос, но, поскольку программа будет на Lazarus, то и вопрос сюда.
Есть где-то на сервере база данных (пусть PostgreSQL, хотя это неважно). В базе данных есть некоторое количество сущностей. Есть рабочие станции, на которых стоят копии программы. Каждая копия программы может читать одну сущность в память своей станции, оператор будет работать с ней какое-то время, а затем может записать измененную сущность обратно, а может и не записать. Вопрос в следующем: можно организовать так, что программа при доступе к сущности будет получать информацию о том, что кто-то с сущностью уже работает? И самое главное: чтобы это было корректно. Добавлено через 6 минут Поясню, что значит корректно. Первая мысль, которая приходит в голову - это в БД для каждой сущности завести поле, в котором каждая копия программы при доступе к сущности увеличивает счётчик на 1, а когда покидает - уменьшает на единицу. Но эта мысль не предусматривает форс-мажоры. Допустим программа открыла сущность, а станция вырубилась, погас свет, оператор завершил программу аварийно и т.д. Признак доступа остался висеть, хотя реально это не так. Это некорректно.
0
|
|
| 31.05.2023, 04:43 | |
|
Ответы с готовыми решениями:
40
Ограничение на кол-во запущенных копий программы Перезагрузка программы с учетом запрета запуска нескольких копий
|
|
Markiz Red Devil
171 / 296 / 26
Регистрация: 11.08.2022
Сообщений: 3,868
|
||
| 31.05.2023, 09:11 | ||
|
Коллизия возникает только при записи. Но вы записывайте данные построчно.
0
|
||
|
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
|
|||
| 31.05.2023, 09:37 | |||
|
0
|
|||
|
Айлурофил
|
||
| 31.05.2023, 09:44 [ТС] | ||
|
0
|
||
|
Markiz Red Devil
171 / 296 / 26
Регистрация: 11.08.2022
Сообщений: 3,868
|
||
| 31.05.2023, 10:01 | ||
|
Всё держится на доверии к администратору. Вот и надо поделить данные на важные - доступные только для администратора, и менее важные, доступные для простого оператора. Добавлено через 5 минут И подумайте, как вы будете маркировать занятые блоки данных в базе на время работы с ними оператора. Добавлено через 7 минут Или Mission impossible?
0
|
||
|
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
|
||
| 31.05.2023, 10:20 | ||
|
- Либо считывает новые данные, изменённые другим оператором, и предлагает сравнить. - Либо не глядя перезаписывает поверх изменённых данных. - Либо, если данные уже кто-то открыл, то второму оператору данные открываются только для чтения, чтобы он не мог изменить их. И при нажатии на кнопку "Обновить" программа ещё раз пытается их прочитать, и если данные никем не заняты, то уже открывает в режиме для изменения.
0
|
||
|
Markiz Red Devil
171 / 296 / 26
Регистрация: 11.08.2022
Сообщений: 3,868
|
|
| 31.05.2023, 10:42 | |
|
Можно поделить ваши данные на блоки фиксированной длины - сотни или тысячи строк.
И отсчёт вести от нуля или единицы по идентификатору. И при доступе к очередной порции данных ставить флажок "занято" во вспомогательную таблицу. Тогда следующий клиент будет знать, что данные заняты. А при окончании работы с блоком этот флажок снимается.
0
|
|
|
Айлурофил
|
||
| 31.05.2023, 11:22 [ТС] | ||
|
-Петрович, ты что там на объекте Х делаешь? -Да просто смотрю. -А, ну тогда я записываю. -Давай. Тогда нужно не только знание, что объект занят, а ещё и кем занят.
0
|
||
|
Markiz Red Devil
171 / 296 / 26
Регистрация: 11.08.2022
Сообщений: 3,868
|
||
| 31.05.2023, 11:27 | ||
|
Итого - номер блока, логин оператора, время начала работы, время окончания работы, флажок занято сейчас - чисто для удобства. Добавлено через 1 минуту Или даже вместо номера блока два столбца - идентификатор начала блока, идентификатор конца блока.
0
|
||
|
Айлурофил
|
||
| 31.05.2023, 11:28 [ТС] | ||
|
Но это не значит, что её не нужно предусмотреть.
0
|
||
|
Markiz Red Devil
171 / 296 / 26
Регистрация: 11.08.2022
Сообщений: 3,868
|
||
| 31.05.2023, 11:30 | ||
|
Ненатурально как-то получается.
0
|
||
|
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
|
||
| 31.05.2023, 11:31 | ||
|
А при открытии только для чтения можно периодически проверять время последнего обновления данных и при его изменении автоматически перечитывать данные.
1
|
||
|
Markiz Red Devil
171 / 296 / 26
Регистрация: 11.08.2022
Сообщений: 3,868
|
|
| 31.05.2023, 11:34 | |
|
Как Галилео в своё время - а всё-таки она вертится!
Всё-таки надо упростить модель работы и обеспечить неколлизионность данных транзакциями. Пересмотреть весь подход к анализу.
0
|
|
|
Айлурофил
|
|
| 31.05.2023, 11:38 [ТС] | |
|
0
|
|
|
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
|
||
| 31.05.2023, 11:44 | ||
|
0
|
||
|
|
||
| 31.05.2023, 13:05 | ||
|
0
|
||
|
Айлурофил
|
||||||
| 22.06.2023, 23:29 [ТС] | ||||||
|
Ну, вот, с СУБД PostgreSQL как-то так получается:
0
|
||||||
|
Айлурофил
|
||||||
| 05.01.2024, 11:20 [ТС] | ||||||
|
Возращаюсь к вопросу - реализовал идею в коде, работает, но есть нюансы. Проблема в том, что по таймеру происходит запись очередной временнОй метки в таблицу,
0
|
||||||
|
Айлурофил
|
|
| 06.01.2024, 02:56 [ТС] | |
|
В общем, лучше всего оказалось останавливать таймер на время транзакции.
0
|
|
|
156 / 64 / 16
Регистрация: 12.12.2023
Сообщений: 395
|
|
| 06.01.2024, 14:48 | |
|
Вычисляете хэш от идентификатора сущности и вызываете pg_advisory_lock или pg_try_advisory_lock. В первом случае вы зависнете в ожидании получения права на редактирование сущности, во втором сразу получаете отлуп что кто-то уже ее редактирует прямо сейчас. В случае если приложение умирает - эти локи сами освободятся при потере коннекта постгреса с клиентом
Или вы хотите успешно начать редактировать и только при попытке закомитить изменения получить отлуп что у вас это не выйдет, потому-что за это время ее уже кто то редактировал? Это делается даже проще - update ... where field1=:oldField1 and field2=... и так сравнение всех полей какими они были до начала редактирования. Если что то поменялось то апдейт не пройдет и вернется 0 измененных записей Но по моему лучше все-таки получать отлуп до начала редактирования а не по завершении
0
|
|
|
Айлурофил
|
|
| 06.01.2024, 16:09 [ТС] | |
|
Почитайте внимательнее. Мне не нужно ни зависание, ни отказ.
0
|
|
| 06.01.2024, 16:09 | |
|
Одновременный запуск только 5 копий программы Ограничение кол-ва запущенных копий программы. Проверка сколько копий программы запущенно Поиск копий файлов и удаление найденных копий
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|