Каков наилучший способ достижения низкой нагрузки на базу данных или сервер приложений для этого варианта использования:
Допустим, я хочу создать веб-приложение, которое имеет для каждого пользователя страницу обзора.Страница обзора показывает в агрегированном виде для каждого пользователя данные пользователя.Например, если бы это было библиотечное приложение, оно показывало бы, сколько раз пользователь посетил библиотеку в целом, сколько книг он прочитал в целом, сколько книг было доставлено с задержкой в общей сложности, сколько минут он провел в здании.Каждый раз, когда пользователь посещает страницу обзора, должны отображаться актуальные значения.В то время как пользователь взаимодействует с сайтом, номера меняются.
Что я мог сделать, так это для каждого обновления страницы обзора сделать несколько подсчетов в базе данных.Но это было бы дорого.
views.py
def overview(request, userID):
booksCount = Book.objects.count()
booksReadCount = Book.objects.filter(UserID=userID, Status='read').count()
# ... many more, same way
libraryVisitedCount = LibraryVisits.objects.filter(UserID=userID).count()
# many counts like these on different tables for the user
data = {
"booksCount" : booksCount,
"booksReadCount" : booksReadCount,
# ... many more
"libraryVisitedCount" : libraryVisitedCount
}
render(..., context=data)
Я думал, что смогу сохранить объект JSON с данными, которые будут представлены на странице обзора втаблицу базы данных, и я обновляю JSON каждый раз, когда на сайте происходит событие, которое влияет на количество объектов.
Или я мог бы использовать представление с материей, но для его обновления мне пришлось бы пересчитать все данные всехпользователи каждый раз, верно?
Другие идеи?Я использую базу данных django webframework и базу данных postgres.
TL; DR: Интересно, не существует ли лучшего способа получать подсчеты, чем каждый раз в базе данных?
Спасибо.