Я создаю сервер erlang. Пользователи отправляют HTTP-запросы на сервер для обновления своего статуса. Процесс запроса HTTP на сервере сохраняет сообщение о статусе пользователя в памяти. Каждую минуту сервер отправляет все сообщения на удаленный сервер и очищает память. Если пользователь обновляет свой статус несколько раз в минуту, последнее сообщение отменяет предыдущее. Важно, что между чтением всех сообщений и их очисткой никакой другой процесс не будет иметь возможность написать сообщение о состоянии.
Каков наилучший способ его реализации?
-
gen_server с dict. Ключ будет идентификатором пользователя. dict: store/3 обновит или создаст статус. Gen_server решает проблему "транзакции".
-
таблица mnesia с ram_copies. Обработайте транзакции, и мне не нужно реализовывать gen_server. С этим решением слишком много накладных расходов?
-
Таблица ETS, которая имеет более легкий вес и имеет gen_server. Можно ли совершить транзакцию в ETS? Чтобы заблокировать таблицу между чтением всех сообщений и их очисткой?
Спасибо