Как наилучшим образом избежать проверки пользовательских данных (платежи, статус лицензии) на каждое действие каждый раз? - PullRequest
0 голосов
/ 13 февраля 2019

Когда пользователь входит на наш сайт, мы хотим проверить некоторые вещи:

  • Они уже подтвердили свой адрес электронной почты?
  • Есть ли у него в настоящее времяу нас есть лицензия, или срок действия их лицензии истек, и нужно ли им получать новую?
  • Если у них есть лицензия, и это платная лицензия, заплатили ли они вовремя?
  • Приняли ли они последние условия обслуживания?
  • Что еще нужно настроить в своей учетной записи?(Например, первая конфигурация приложения в соответствии с их потребностями.)

В настоящее время это довольно глупая реализация.Сначала все это проверялось на каждой странице.Скорее дорого, поэтому сейчас только на критических страницах.Многократные поездки в базу данных и т. Д. И т. Д. *

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

  1. Добавить пару столбцов в пользовательскую таблицу, а именно LastCheckedOpenTasksTimeStamp и LastOpenTask и ForceReCheck.Недостаток: Каждый раз, когда в приложении происходит что-либо, связанное с такой задачей (например, оплата), мы должны установить ForceReCheck или какой-либо другой механизм аннулирования.Кажется, склонны к ошибкам для меня.

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

Я уверен, что должен быть лучший способ, которого я не вижу.Какие могут быть лучшие альтернативы для этого?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

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

И логика извлечения, которая определяет, является ли переменная кэша нулевой, вы пересчитываете ее.

Здесь вы можете увидеть несколько подходов, в зависимости от того, насколько надежным или расширяемым вы хотите быть: Как кэшировать данные в приложении MVC

0 голосов
/ 14 февраля 2019

Использовать сеанс.

Пользователь входит в систему, вы нажимаете на БД один раз и устанавливаете:

Session["emailVerified"] = checkEmailVerified();
Session["licenseType"] = getLicenseType();
Session["expirationDate"] = getSubExpDate();
// etc.

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

Вы можете вернуться к БД, если какая-либо из переменных сеанса не оценивается так, как вы этого хотите.


Я бы специальноне используйте Cache, потому что ваши данные привязаны к пользователю для каждого входящего в систему пользователя. Более полное объяснение здесь , но самый важный бит:

Первое основное отличиемежду сеансом и кэшированием: сеанс основан на пользователя, но кэширование не на пользователя. Так что это значит?Данные сеанса хранятся на уровне пользователя, но данные кэширования хранятся на уровне приложения и используются всеми пользователями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...