Я работаю над приложением, которое имеет аналогичную логику как SO в отношении того, когда пользователь был в последний раз замечен. Я столкнулся с концептуальной проблемой, которую я надеюсь, что некоторые из вас, Гуру, могут мне помочь.Как написать логику «Последнее посещение» как на переполнении стека
Вся активность регистрируется в таблице ActivityLog в базе данных
Когда зарегистрированный пользователь попадет на сайт и создан новый сеанс, я обновить журнал активности с UserID и некоторые очень родовой информацией. То же самое происходит, когда они создают новую запись, обновляют свой профиль и т. Д.
Проблема, с которой я столкнулся, заключается в следующем.
Если я использую самый последний элемент активности, перейдите на страницу моей личной учетной записи, «Последнее посещение» появится как 1 секунда назад, потому что я просто ударил db при запуске сеанса ... Это не хорошо, потому что я хочу видеть, что я был «последним» там, а не когда я там «сейчас».
Однако, если я использую Skip(1).Take(1)
, чтобы получить вторую запись в базе данных, тогда, когда кто-то другой просмотрит мой профиль, пока я могу «просто» подписаться ... они увидят, что я говорил неделю назад а не сегодня.
Какую логику вы бы использовали, чтобы иметь ваш торт и есть его?
Я использую ASP.NET MVC2 и Linq для SQL, но я думаю, что этот вопрос является скорее агностиком языка.
is это проще и меньше системных издержек, чтобы поместить «текущую» и «последнюю» в таблицу пользователя, а также сохранить журнал активности? Это похоже на большую работу, так как я должен поддерживать два расположения записей. Я использую журнал активности для других вещей, поэтому я не хочу его удалять. –
также, так как я использую LINQ to SQL с IQueryable уровнем репозитория, я не думаю, что извлечение данных из журнала активности будет слишком интенсивно, даже если журнал растет. Поиск в основном делает OrderBy и Select Top 1 (или Second) –
также, также ... Как раз сказать, я думаю, что это может быть самый простой ответ до сих пор ... часть о отображении SECOND для текущего пользователя и FIRST для всех o пользователей. –