На сервере в памяти хранятся данные, по запросу клиента изменяются, рассылаются другим клиентам. Данные небольшие и операции относительно простые, поэтому все работает быстро и надежно.
Но эти данные нужно сначала достать из базы данных, а потом как-то сохранить. И здесь начинаются тормоза. В частности, сохранение графа объектов происходит в общем случае дольше, чем интервал между соседними изменениями данных (пользователь довольно быстро кликает мышью по кнопке, либо несколько пользователей одновременно). В итоге сервер параллельно сохраняет в базе несколько слегка разных версий одного и того же набора данных, что в худшем случае приводит к дедлокам транзакций. Как в такой ситуации правильно организовать загрузку и сохранение данных? Загружать один раз и держать в памяти как можно дольше? Сохранять как можно реже, когда данные никто не трогает?
Не могу придумать простое решение, по которому сразу можно было бы сказать, что оно работает, и не терзаться сомнениями вида "а что, если?" Как вообще принято делать? Задача выглядит абсолютно стандартной, но что-то ничего толкового не гуглится.