Django: Кэширование объектов для результатов поиска

Я застрял на том, какой подход должен быть для кэширования сериализованных объектов в качестве части поисковых запросов. Сейчас сериализаторы выполняют дополнительные запросы, и даже при использовании prefetch_related типичный запрос занимает около 40 секунд.

            trips = (
                Trip.objects.filter(filter_query)
                .prefetch_related(
                    "trip_values",
                    "trip_values__operator_trip_field",
                    "trip_values__operator_trip_field__trip_field",
                    "operator_service_day",
                    "trip_occurrences",
                    "trip_locations",
                    "assigned_vehicle_formation",
                )
                .all()
            
            query_time = time.time() - search_start
            print("Query time: ", query_time)
            serialization_start = time.time()
            serialized = TripListSerializer(trips, many=True)
            serialization_time = time.time() - serialization_start
            print("Serialization time: ", serialization_time)

            return Response(serialized.data)

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

Действительно ли это тот подход, который я должен использовать, или есть лучшая альтернатива.

Далее, что касается регистрации времени, я заметил, что время сериализации на самом деле очень мало, но время завершения работы Response составляет большую часть времени запроса. Могу ли я что-нибудь сделать, чтобы ускорить это?

Вернуться на верх