Найти - Пользователи
Полная версия: Кэширование MySQL.
Начало » Django » Кэширование MySQL.
1
slepov
Есть сайт построенный на базе фреймворка Django. Сайт использует собственную базу данных MySQL, но часть запросов идёт к удаленному серверу (также MySQL) не посредством стандартного механизма ORM, а прямыми запросами на выполнение процедур на этом сервере. Есть потребность кэшировать данные с этого сервера (процедуры тяжелые и выполняются медленно). Подскажите как такое можно сделать. Любая идея будет полезна, так как у меня мыслей как такое реализовать - совсем нет.
FishHook
Мне кажется надо копать где-то тут
slepov
Я так понимаю в этом решении инвалидация кэша может происходить только по таймауту?

>>> cache.set('my_key', 'hello, world!', 30)
>>> cache.get('my_key')
'hello, world!'
The timeout argument is optional and defaults to the timeout argument of the appropriate backend in the CACHES setting (explained above). It’s the number of seconds the value should be stored in the cache. Passing in None for timeout will cache the value forever. A timeout of 0 won’t cache the value.

Я рассматривал подобные варианты напрямую с memcached и redis.

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

И вот как подобное сделать, совсем мыслей нет.
Suguby27
на стороне удаленной БД есть что-то (скрипт, етс) что может инициализировать инвалидацию?
если есть, то я бы сделал пуш события к нам на бэкэнд и тут инвалидировал memcached.
если нет - данные изменяются напрямую в БД - то все сложнее и нужно сделать такой скрипт, иначе как узнать что данные изменились?
вариант - скрипт по крону, который проверяет например кол-во строк, и пушит на бэкэнд. можно кстати не пушить, можно организовать табличку в БД и писать туда время… О! идея.

На мускульном сервере организовать табличку last_changes в которой некому ключу сопоставляется время последнего изменения. Ключ идентифицирует блок изменяющихся данных. Написать хранимую процедуру, которая по изменении данных будет обновлять last_changes.
На бэкэнде при каждом запросе селектить last_changes и если ничего не изменилось - отдавать из кэша, иначе - тянуть с мускуля, записывать в кэш, отдавать.

Ктт.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB