Кеширование всех пользователей в ASP.NET - PullRequest
10 голосов
/ 26 августа 2010

Я работаю над веб-приложением в ASP.NET/C#, которое должно быть масштабируемым для обработки высокой пользовательской нагрузки (вероятно, будет работать в веб-ферме). Так как это будет обслуживать большое количество пользователей, около 1 миллиона плюс, но количество онлайн-пользователей будет около 30K-50K. Я планирую использовать кэширование (на основе провайдера), и мне было интересно:

  1. Это хорошая идея, чтобы кэшировать ВСЕХ пользователей для производительности? Я планирую кэшировать все другие общие данные, такие как настройки и т. Д., Но насколько эффективно будет кэшировать ВСЕХ пользователей в памяти? Если пользователь изменяет свой профиль, я перезагружу в кеше только этого конкретного пользователя (собрав всех пользователей). Любые предложения по этому подходу?

  2. Нужно ли беспокоиться о блокировке при использовании вышеуказанного кэша пользователей? Только один пользователь может редактировать профиль, это будет одна атомарная операция, хотя будет несколько операций чтения в разных потоках. Так что, при извлечении пользователей из кэша или обновлении конкретного пользователя я должен использовать блокировку?

Спасибо

Асиф

Ответы [ 2 ]

6 голосов
/ 26 августа 2010

Помещение в Global Cache всего, что полезно только для одного пользователя, обычно является плохой идеей и снижает производительность. Оптимизируйте запросы к базе данных, и вы будете в гораздо лучшей форме.

Как общее практическое правило, вы должны хранить в кэше только те вещи, которые дорого получать из базы данных, и более чем один пользователь захочет увидеть эту информацию одновременно. Например, список 100 лучших продуктов или что-то в этом роде. Небольшие объемы данных, которые относительно дешево получить из базы данных и которые полезны только одному человеку, должны оставаться там, где они есть.

Кэширование значительно увеличивает сложность, и тем более в веб-ферме. Не вводите ненужную сложность, если только вам это не нужно. Подождите, пока у вас не возникнет проблема фактическая производительность, прежде чем пытаться ее решить.

0 голосов
/ 26 августа 2010

Кэширование пользователей, вероятно, хорошая идея. Но это зависит от того, сколько данных вы собираетесь кешировать для каждого пользователя, и стоимости извлечения этих данных из любого места, где они хранятся.

Для блокировки - может ли кто-нибудь еще редактировать профиль пользователя (например, admininstrator)? Это было бы обычным явлением? Если это так, вы можете сделать некоторые блокировки. Иначе, если бы только пользователь мог редактировать свои собственные вещи, я бы не стал беспокоиться.

...