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 составляет большую часть времени запроса. Могу ли я что-нибудь сделать, чтобы ускорить это?