Форум сайта python.su
Есть сайт построенный на базе фреймворка Django. Сайт использует собственную базу данных MySQL, но часть запросов идёт к удаленному серверу (также MySQL) не посредством стандартного механизма ORM, а прямыми запросами на выполнение процедур на этом сервере. Есть потребность кэшировать данные с этого сервера (процедуры тяжелые и выполняются медленно). Подскажите как такое можно сделать. Любая идея будет полезна, так как у меня мыслей как такое реализовать - совсем нет.
Офлайн
Мне кажется надо копать где-то тут
Офлайн
Я так понимаю в этом решении инвалидация кэша может происходить только по таймауту?
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.>>> cache.set('my_key', 'hello, world!', 30)
>>> cache.get('my_key')
'hello, world!'
Офлайн
на стороне удаленной БД есть что-то (скрипт, етс) что может инициализировать инвалидацию?
если есть, то я бы сделал пуш события к нам на бэкэнд и тут инвалидировал memcached.
если нет - данные изменяются напрямую в БД - то все сложнее и нужно сделать такой скрипт, иначе как узнать что данные изменились?
вариант - скрипт по крону, который проверяет например кол-во строк, и пушит на бэкэнд. можно кстати не пушить, можно организовать табличку в БД и писать туда время… О! идея.
На мускульном сервере организовать табличку last_changes в которой некому ключу сопоставляется время последнего изменения. Ключ идентифицирует блок изменяющихся данных. Написать хранимую процедуру, которая по изменении данных будет обновлять last_changes.
На бэкэнде при каждом запросе селектить last_changes и если ничего не изменилось - отдавать из кэша, иначе - тянуть с мускуля, записывать в кэш, отдавать.
Ктт.
Офлайн