Нет ничего встроенного, чтобы сделать это, но вы можете сделать это самостоятельно, с одной оговоркой: если вы выполните запрос in
и вернете 30 результатов, это будет 30 записей, которые сортируют по наименьшей степени согласно вашим критериям сортировкипо всем подзапросам.Однако если вы хотите собрать набор результатов из отдельных кэшированных запросов, то вам придется кэшировать столько результатов для каждого пользователя, сколько и всего набора результатов (например, 30), и отбрасывать большинство этих результатов, или вы 'нам придется хранить меньше результатов для каждого пользователя, и согласиться с тем, что иногда вы будете отбрасывать новые результаты от одного пользователя в пользу более старых результатов от другого.
Тем не менее, вот как вы можете это сделать:
- Выполните
memcache.get_multi
, чтобы получить кэшированные наборы результатов для всех пользователей - Для каждого пользователя, у которого нет кэшированного набора результатов, выполните отдельный запрос, выбирая наибольшее количество результатов.тебе нужно.Используйте
memcache.set_multi
для кэширования наборов результатов. - Выполните объединение слиянием для всех наборов результатов и возьмите первые n результатов в качестве окончательного набора результатов.Поскольку имя пользователя предположительно не является полем списка (например, у каждого комментария есть один автор), вам не нужно беспокоиться о дубликатах.
В настоящее время in
запросы выполняются последовательно, поэтомуподход не будет медленнее, чем выполнение запроса in
, даже если ни один из результатов не будет кэширован.Это может измениться в будущем, хотя.Если вы хотите улучшить производительность сейчас, вы, вероятно, захотите использовать проект Guido NDB , который позволит вам выполнять все подзапросы параллельно.