Влияние no_cache () на querySet в Mongoengine - PullRequest
0 голосов
/ 03 декабря 2018

В официальной документации mongoengine говорится, что начиная с 0.8, no_cache () добавляется в mongoengine.Какую пользу это может принести нам?На что распространяется типичный сценарий no_cache?

1 Ответ

0 голосов
/ 04 июня 2019

Поддерживающий Mongoengine здесь - по умолчанию (и исторически) mongoengine кэширует все результаты набора запросов во время его итерации.Это дает преимущество в том, что вы не запускаете запрос, если вы повторяете одну и ту же переменную, но имеет недостаток - хранить все в памяти.То есть:

class User(Document):
    pass

users = User.objects()         # users is a queryset, it didn't hit the db yet

_ = [us for us in in users]    # hits the db and caches all user instances in the users object
_ = [us for us in in users]    # does not hit the db anymore, user the users cached data


users = User.objects().no_cache()
_ = [us for us in in users]    # hits the db and caches all user instances
_ = [us for us in in users]    # hits the db again

Звучит неплохо, если вы используете кеш, но на практике вы редко выполняете итерацию по одному и тому же набору запросов 2 раза, и потребление памяти может стать проблемой, если вы выполняете итерации по очень большим коллекциям.

Обратите внимание, что в будущем он может измениться на использование версии no_cache по умолчанию

...