Немного предыстории: я работаю над веб-приложением, которое требует довольно много времени для подготовки/сжатия данных, прежде чем дать пользователю возможность редактировать/манипулировать. Задача запроса данных ~ 15/20 секунд для завершения и пара секунд для обработки. Когда-то там пользователь может манипулировать vaules на лету. Любая манипуляция значениями потребует полной обработки данных.
Обновление. Чтобы избежать путаницы, я делаю только один раз запрос данных (с 15-секундным ударом), а затем хочу сохранить результаты в памяти, чтобы мне не пришлось повторять его, пока пользователь не выполнит 100% работая с ним. Таким образом, первое нажатие займет некоторое время, но, используя Ajax, я собираюсь использовать данные в памяти для постоянного обновления и сохранения времени отклика примерно на 2 секунды (надеюсь).
Чтобы сделать это эффективным, я перемещаю интуитивные данные в память и используя Ajax-обратные вызовы на сервер, чтобы я мог сократить время обработки, чтобы обработать перерасчет, который происходит с обновлениями этого пользователя.
Вот мой вопрос, с учетом производительности, что было бы лучшим способом хранения этих данных, предполагая, что только один пользователь будет работать с этими данными в любой момент.
Кроме того, пользователь может потенциально работать в этом процессе в течение нескольких часов. Когда пользователь работает с данными, мне понадобится какое-то безотказное сохранение текущих данных пользователя (либо в db, либо в сериализованном двоичном файле), если их сеанс будет прерван каким-то образом. Другими словами, мне понадобится решение, у которого есть подходящий крючок, чтобы позволить мне выгружать данные объекта памяти в случае, если пользователь слишком долго отключается/отвлекается.
До сих пор вот мои размышления:
Состояние сеанса - за: заблокировано для одного пользователя. Имеет событие окончания сеанса, которое удовлетворит мои отказоустойчивые требования. Минусы: самый медленный из моих текущих вариантов. Событие окончания сеанса иногда сложно сделать, чтобы оно срабатывало должным образом.
Кэширование - Плюсы: Хороший Перф. Имеет доступ к зависимостям, которые могут быть бонусом позже по строке, но не очень полезны в текущей области. Минусы: нет простого безопасного шага, отличного от записи, основанной на временных интервалах. Глобальный охват - должен обеспечить, чтобы пользователи не сталкивались с работой /.
Статический - Плюсы: Лучший Перф. Легко поддерживать, поскольку я могу напрямую использовать мои текущие структуры классов. Минусы: нет простого безопасного шага, отличного от записи, основанной на временных интервалах. Глобальный охват - должен обеспечить, чтобы пользователи не сталкивались с работой /.
Есть ли у кого-нибудь предложения/комментарии о том, какой вариант я должен выбрать?
Спасибо!
Обновление: забыл упомянуть, я использую VB.Net, Asp.Net и Sql Server 2005 для выполнения этой задачи.