Начало » Использование СУБД » Firebird, HQbird, InterBase » Сервис диагностики 100500 устройств (организация транзакций с использованием ibpp 2.x) 
	
		
		
			| Сервис диагностики 100500 устройств [сообщение #4082] | 
			Thu, 18 January 2024 11:31   | 
		 
		
			
				
				
				
					
						  
						wolverin
						 Сообщений: 44 Зарегистрирован: 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
						 Сообщений: 44 Зарегистрирован: August 2023 
						
					 | 
					Member  | 
					 | 
		 
		 
	 | 
 
	
		каждую минуту нет, но в течении 10-15 минут может, в любом случае получается весь список нужен не чаще этого интервала (а возможно придется и больше делать адаптивно, если предыдущий опрос не будет успевать) 
про очередь ответов надо подумать, спасибо, но больше вопрос взаимодействия 2х достаточно частых транзакций на изменение одних и те же данных - т.е. вы делаете очередь больше, но и блокировка становится дольше.
		
		
		[Обновления: Thu, 18 January 2024 15:45] Известить модератора  
 |  
	| 
		
	 | 
 
 
 |  
	| 
		
 |  
	| 
		
 |  
	| 
		
 |  
	| 
		
 |  
	| 
		
 |  
	| 
		
 |  
	| 
		
 |  
	| 
		
 |  
	| 
		
 |  
	| 
		
 |  
	| 
		
 |  
	
		
		
			| Re: Сервис диагностики 100500 устройств [сообщение #4142 является ответом на сообщение #4140] | 
			Mon, 22 January 2024 13:11    | 
		 
		
			
				
				
				
					
						  
						wolverin
						 Сообщений: 44 Зарегистрирован: 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
						 Сообщений: 100 Зарегистрирован: June 2022  Географическое положение: Калуга
						
					 | 
					Senior 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
						 Сообщений: 44 Зарегистрирован: 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
						 Сообщений: 152 Зарегистрирован: 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
						 Сообщений: 100 Зарегистрирован: June 2022  Географическое положение: Калуга
						
					 | 
					Senior Member  | 
					 | 
		 
		 
	 | 
 
	
		wolverin писал(а) Tue, 23 January 2024 11:35дак они все в итоге переписываются каждый раз, есть только вариант делать историю "в ширину", т.е. хранить за дельту времени все значения. 
если они бесконтрольно перезаписываются - зачем их вообще писать? 
 
нужны отсечки изменения состояния - то в среднем слое при получении изменения состояния - сразу писать 
 
нужны средние за период (термометр) - накапливать за минуту и писать 
 
пиковый ахтунг (пороговое) - писать немедленно
		
		
		
 |  
	| 
		
	 | 
 
 
 |   
Переход к форуму:
 
 Текущее время: Tue Nov 04 06:11:58 GMT+3 2025 
 Общее время, затраченное на создание страницы: 0.02566 секунд 
 |