"Ну, а что у вас конкретно тормозит? Выборка из базы, передача, процессинг или обновление "хранилища"?" -- решения готового пока нет.
На данный момент приложение Мониторинга делает запросы в БД с которой работает логика бизнес приложения. Запросов очень много и они очень развесистые(да мы их оптимизировали как могли) и занимают чуть ли ни 70% времени БД
Исходя из этого появилась необходимость в промежуточном хранилище.
"Попробуйте все промежуточные данные о событии хранить в key-value базе типа redis." : уже думали об этом, но не совсем подходит(не распределяем из коробки, плохо кластеризуется, да и данные выбирать надо по запросам а для этого hash не подходит)
UPD : можно ограничить число потоков имеющих возможность взять блокировку на файл, но как только один из потоков инициировал release(unlock файла), необходимо запретить взятие блокировки новыми писателями,дождаться когда все, взявшие блокировку писатели закончат писать и только тогда отпустить блокировку файла.