Статический список <User>VS База данных для онлайн-пользователей в Asp.Net? - PullRequest
3 голосов
/ 27 февраля 2011

Я создаю ASP.Net MVC приложение «своего рода Игра», которое очень много работает с онлайн-пользователями .

Я отправлял Ajax-запрос каждые "10s" некоторым Actionдержать пользователя онлайн, когда он держит сайт открытым.это Action обновление LastActivityDate для этого User - ((в статическом списке и базе данных)).

Итак, вопрос в следующем:

  • Лучше ли хранить онлайн-пользователей в статическом списке и писатьнекоторый код, когда пользователь входит в систему, чтобы добавить его в этот список и затем продолжать управлять этим списком каждые "10s", чтобы исключить офлайн-пользователей.
  • Или лучше всего загружать онлайн-пользователей из базы данных всякий раз, когда я хочу OnlineUsers.

примечание: Я использую технику из этого SO Вопрос , чтобы периодически выполнять некоторые задачи, такие как повторное управление статическим списком OnlineUsers.

Ответы [ 3 ]

2 голосов
/ 27 февраля 2011

Если вы планируете иметь большое количество пользователей и вам нужно будет часто извлекать данные из БД, может быть лучше сохранить список пользователей в Cache. Очевидно, что это будет храниться в памяти сервера, поэтому вам не захочется хранить большое количество объектов, но если это просто простой список онлайн-пользователей, это не должно быть проблемой.

2 голосов
/ 27 февраля 2011

Во-первых, вы бы не использовали List<User> для этого, а скорее Dictionary<int,User>, используя идентификатор пользователя в качестве ключа, чтобы вы могли немедленно найти пользователя для обновления. Во-вторых, я думаю, что это, вероятно, смесь обоих. Вы сохраняете кэшированную копию текущих пользователей, периодически обновляющуюся из БД, и сохраняете данные (асинхронно, если необходимо) в БД. Возможно, вы захотите подумать о пользовательском классе персистентности для пользователей, который инкапсулирует это поведение, если вы обнаружите, что выполняете такие операции в различных местах вашего кода.

1 голос
/ 27 февраля 2011

Область действия static всегда является областью процесса, который выполняется в операционной системе.Так что в настольном приложении использование статики имеет смысл.Тем не менее, я считаю использование static немного произвольным для серверных приложений, потому что вы не контролируете процессы.Это веб-сервер, который делает это.Что если процесс неожиданно завершится?Или что, если есть много процессов, которые обслуживают ваше приложение?

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

...