Я работаю над приложением регистрации данных .NET, которое должно принимать данные от большого числа клиентов и сохранять их в базе данных.
Клиент отправляет событие запуска на сервер, а затем отправляетсобытия сердцебиения, вызывающие время последнего обновления данных.Я не могу использовать конечное событие, потому что клиентское приложение может быть закрыто без возможности отправить такое событие.
Простой подход заключается в том, чтобы сделать вставку БД в событие запуска, а затем обновить БД вкаждое сердцебиение, но оно будет очень интенсивным, с сердцебиением каждые несколько секунд от каждого из большого числа клиентов.Обновления также стали бы дорогостоящими, поскольку таблица базы данных становится большой.
Таким образом, я смотрю на кэширование данных в памяти и затем сбрасываю их в базу данных, когда клиент перестает отправлять тактовые импульсы.
Поэтому мне нужна подходящая структура данных и стратегия для:
- Создание объекта сеанса при отправке клиентом события запуска
- Эффективное обновление объектов при получении событий сердцебиения
- Идентификация сеансов с истекшим временем ожидания и сохранение их в базе данных
Я думаю о чем-то вроде хеш-таблицы в памяти, которая периодически повторяется событием, запускаемым таймером, для проверки истечения времени ожиданиясессий.
Имеет ли это смысл или есть лучший подход к проблеме такого рода?