Зачем MongoDB и memcached, если есть @lru_cashe / @cashe / @cached_property в модуле functools?

Нужен "философский" ответ с небольшим примером, если понадобится. Видимо, я не все знаю о MongoDB. Его основное предназначение - как я понимаю - кеширование данных, чтобы избежать обращения к диску. Но эту же функцию выполняeт в Python декоратор @lru_cashe (Least recently used) модуля functools. Кроме того, есть еще и @cashe - который хранит все, а не последние "вычисления" функции с заданными параметрами.

Redis - другое дело. Он хранит данные распределенно и все такое, а MongoDB - насколько я знаю живет на одной машине или я ошибаюсь?

Да, знаю, можно было погуглить... Но приятно пообщаться с умными людьми...


Ответы (2 шт):

Автор решения: CrazyElf

Ну зря вы гуглить не хотите, MongoDB - это вообще-то полноценная документоориентированная БД.

И да, кэширующие декораторы - это хорошо, но они либо упираются в размер памяти (если это @lru_cache), либо всё-равно хранят и ищут данные не оптимально (если это декораторы, хранящие кэш в файлах). БД нужны для того, чтобы быстро искать по неким параметрам (и обновлять) определённые виды данных. Это совсем не тоже самое, что просто кэш объектов, задачи БД гораздо шире. Хотя некоторые БД бывает используют в качестве кэша.

→ Ссылка
Автор решения: Mike

Первое на что надо ответить при выборе кеширования: требуется ли видеть одинаковое состояние объекта при наличии нескольких python процессов.

Да, я то же предпочитаю мелкие справочники держать в памяти процессов. И если один из процессов какое то время видит старую версию объекта я не переживаю.

Но есть большой пласт задач для которых такое поведение недопустимо, требуется своевременный сброс кеша и только самая свежая версия объекта. И без внешнего общего кеша тут уже ни как не обойтись. А что выбирать memcached, Redis или еще что то тут дело вкуса и опять же некоторых тонкостей решаемых задач. У memcached есть встроенный LRU. У Redis же только таймеры жизни записей и LRU очистку придется делать самому. Но у Redis гораздо более широкий функционал, мне доводилось использовать и счетчики и различные виды очередей.

→ Ссылка