ASP.NET MVC 3 хранилище данных в памяти - PullRequest
2 голосов
/ 30 сентября 2011

У меня есть проект, который предоставляет пользователям список текущих задач, которые необходимо выполнить.Любой пользователь может выполнить любую задачу, и поэтому для обеспечения того, чтобы только один пользователь работал над задачей одновременно, мне нужно иметь возможность «заблокировать» ее.Я использую SignalR для этого, поэтому пользователь запрашивает блокировку задачи, и если они успешны (то есть, если никто не заблокировал ее), то они смогут получить доступ к дополнительной информации, которая им нужна.

Моя проблема в том, как сохранить список заблокированных задач.Первоначально планировалось просто добавить дополнительное битовое поле «IsLocked» в таблицу «Задачи» и обновить его, когда пользователь запросил блокировку и когда задача была разблокирована.Однако у нас около 300 одновременно работающих пользователей, и задача занимает всего 3-4 минуты, что означает огромное количество дополнительных - и крошечных - запросов к базе данных.Поэтому мы задавались вопросом о хранении в памяти, просто сохраняя список идентификаторов задач в списке «lockedTasks».

Я рассмотрел вопрос об использовании кэширования, но не уверен в лучших способах сделать это или дажесуществуют лучшие альтернативы.Если у кого-то есть опыт в этом, то несколько советов было бы здорово, спасибо

Ответы [ 3 ]

2 голосов
/ 30 сентября 2011

Рассматривали ли вы фильтры с отслеживанием состояния?

Проверьте эту ссылку для получения дополнительной информации:

2 голосов
/ 30 сентября 2011

Я бы полностью избежал памяти , поскольку IIS не так уж хорош с этим, если вы по какой-то причине обнаружили, что нуждаетесь в IIS для обновления пула приложений, ваш список просто исчез!

Может быть Система MemCache ? Если он не потеряет вещи вышеуказанным способом, но ...

Я бы посоветовал быть посередине, IO File быстро запрашивает данные в базе данных, особенно если он не на одной машине (ведь по соображениям безопасности это никогда не должно быть), так что ... почему бы и нет, и просто для хранения вашего списка, вы не используете одну из известных в настоящее время баз данных NoSQL ?

MongoDB - это база данных документов, в которой имеется .NET Library , и она проста в использовании, она не такая быстрая, как Memmory, но чрезвычайно быстрая, чем Физические базы данных для того, что вы хотите.

Обычно база данных NoSQL размещается в папке App_Data, поэтому доступ к ней будет очень быстрым, и вы можете просто удерживать там task_id и user_id всех заблокированных задач.

0 голосов
/ 30 сентября 2011

Извините, но если ваше приложение не может обрабатывать один запрос каждые 3-4 минуты x 300 пользователей, то вы делаете что-то очень неправильно.Просто просмотр сайта обычно генерирует на порядки больше запросов, чем это.

...