Начало » Использование СУБД » Firebird, HQbird, InterBase » Сервис диагностики 100500 устройств (организация транзакций с использованием ibpp 2.x)
Сервис диагностики 100500 устройств [сообщение #4082] |
Thu, 18 January 2024 11:31 |
wolverin
Сообщений: 42 Зарегистрирован: August 2023
|
Member |
|
|
Приветствую.
Вопрос не сугубо про FB, но в организации 2х-поточного чтения-записи из одного бинарника.
Сцуть - нужно взять кучу идентификаторов из БД и, посылая на железку запрос, отмечать что запрос послан, во втором потоке приходит ответ, информацию о котором записывается в БД - для простоты одна таблица структурой поле количество посланных запросов и поле количество полученных ответов.
Вопросы
1. нужно ли держать 2 коннекта читающий ид-ы и пишущий отметку о посылке, с учетом того, что второй поток произвольно пишет ответы или лучше в первом потоке выгружать, например, все в std::vector и потом в другой транзакции последовательно записывать запросы?
2. с учетом того, что железок тысячи, а опрос всех предварительно предполагаю каждые 10-15 минут, то как бы организовать транзакции, чтобы они друг другу не мешали, но и не оборачивать в транзакцию хотя бы каждый каждый запрос железки?
есть отдалено похожий скрипт на bash с использованием isql-fb, который оборачивает запись запросов в одну транзакцию, что приводит периодически к блокировкам остальных изменений, но там это не так критично в силу небольших объемов и блокировки обрабатываются на стороне пользовательского интерфейса.
|
|
|
|
|
Re: Сервис диагностики 100500 устройств [сообщение #4092 является ответом на сообщение #4087] |
Thu, 18 January 2024 15:44 |
wolverin
Сообщений: 42 Зарегистрирован: August 2023
|
Member |
|
|
каждую минуту нет, но в течении 10-15 минут может, в любом случае получается весь список нужен не чаще этого интервала (а возможно придется и больше делать адаптивно, если предыдущий опрос не будет успевать)
про очередь ответов надо подумать, спасибо, но больше вопрос взаимодействия 2х достаточно частых транзакций на изменение одних и те же данных - т.е. вы делаете очередь больше, но и блокировка становится дольше.
[Обновления: Thu, 18 January 2024 15:45] Известить модератора
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Re: Сервис диагностики 100500 устройств [сообщение #4142 является ответом на сообщение #4140] |
Mon, 22 January 2024 13:11 |
wolverin
Сообщений: 42 Зарегистрирован: August 2023
|
Member |
|
|
pastor писал(а) Mon, 22 January 2024 12:17
на препарированных запросах на 2.5 получается до 40 000/сек по 4кб на запись
вопрос же не в количестве записей в секунду (что определяется вообщем то железом), а в количестве транзакций, вы оформите каждую запись в транзакцию и тогда сколько будет?
повторюсь - 2 конкурирующих потока делают update одной и той же таблицы.
сейчас просто первую статистику получил на 150 железках, когда 2 потока складывают в 3ий и уже только он пишет пачкой.
[Обновления: Mon, 22 January 2024 13:24] Известить модератора
|
|
|
Re: Сервис диагностики 100500 устройств [сообщение #4143 является ответом на сообщение #4142] |
Mon, 22 January 2024 13:50 |
pastor
Сообщений: 83 Зарегистрирован: June 2022 Географическое положение: Калуга
|
Member |
|
|
wolverin писал(а) Mon, 22 January 2024 13:11pastor писал(а) Mon, 22 January 2024 12:17
на препарированных запросах на 2.5 получается до 40 000/сек по 4кб на запись
вопрос же не в количестве записей в секунду (что определяется вообщем то железом), а в количестве транзакций, вы оформите каждую запись в транзакцию и тогда сколько будет?
повторюсь - 2 конкурирующих потока делают update одной и той же таблицы.
сейчас просто первую статистику получил на 150 железках, когда 2 потока складывают в 3ий и уже только он пишет пачкой.
можно и на одной записи в час дедлок словить
пишется пакетами?
вам же плевать на данные?
сделайте семафор. потоки будут переписывать данные по очереди
если потоки не пересекаются по устройствам - то откуда дедлоки?
[Обновления: Mon, 22 January 2024 13:51] Известить модератора
|
|
|
|
|
Re: Сервис диагностики 100500 устройств [сообщение #4153 является ответом на сообщение #4143] |
Mon, 22 January 2024 18:33 |
wolverin
Сообщений: 42 Зарегистрирован: August 2023
|
Member |
|
|
pastor писал(а) Mon, 22 January 2024 13:50
если потоки не пересекаются по устройствам - то откуда дедлоки?
запрос может пересечься с ответом и они попытаются обновить одну и ту же строку.
пробовал поштучно опрашивать с ожиданием ответа, так cron успевает еще 2-3 раза начать задания крутить из за значительного времени ожидания ответа с медленных железок.
предметно говоря - отправляю я mqtt сообщение на железку, а она мне должна прислать снимок с камеры как получится
[Обновления: Mon, 22 January 2024 18:36] Известить модератора
|
|
|
|
|
|
|
|
|
Re: Сервис диагностики 100500 устройств [сообщение #4171 является ответом на сообщение #4168] |
Tue, 23 January 2024 11:26 |
fraks
Сообщений: 140 Зарегистрирован: June 2022 Географическое положение: Новосибирск
|
Senior Member |
|
|
wolverin писал(а) Tue, 23 January 2024 11:11тогда придется каждый раз пересчитывать 100500 железок * на количество записей и удалять все бесполезное позже какого то периода другим потоком с каким то интервалом, а так получается всегда записана текущее значение "уровня сигнала" на железке - т.е. нагрузка существенно возрастет.
Если это было мне - то я ничо не понял. Чего пересчитывать, что такое "удалять бесполезное"... Чем отличается "бесполезное" в твоем варианте от "бесполезного" в моем варианте. Если что - в моем варианте количество данных ровно такое же, просто они не в ширину а в высоту.
[Обновления: Tue, 23 January 2024 11:27] Известить модератора
|
|
|
|
|
|
Re: Сервис диагностики 100500 устройств [сообщение #4187 является ответом на сообщение #4173] |
Tue, 23 January 2024 17:19 |
pastor
Сообщений: 83 Зарегистрирован: June 2022 Географическое положение: Калуга
|
Member |
|
|
wolverin писал(а) Tue, 23 January 2024 11:35дак они все в итоге переписываются каждый раз, есть только вариант делать историю "в ширину", т.е. хранить за дельту времени все значения.
если они бесконтрольно перезаписываются - зачем их вообще писать?
нужны отсечки изменения состояния - то в среднем слое при получении изменения состояния - сразу писать
нужны средние за период (термометр) - накапливать за минуту и писать
пиковый ахтунг (пороговое) - писать немедленно
|
|
|
Переход к форуму:
Текущее время: Sun Dec 22 13:26:57 GMT+3 2024
Общее время, затраченное на создание страницы: 0.01471 секунд
|