Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 9, 2015 09:12:22

slepov
Зарегистрирован: 2015-04-04
Сообщения: 11
Репутация: +  1  -
Профиль   Отправить e-mail  

Кэширование MySQL.

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

Офлайн

#2 Апрель 9, 2015 09:28:37

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Кэширование MySQL.

Мне кажется надо копать где-то тут



Офлайн

#3 Апрель 9, 2015 13:22:33

slepov
Зарегистрирован: 2015-04-04
Сообщения: 11
Репутация: +  1  -
Профиль   Отправить e-mail  

Кэширование MySQL.

Я так понимаю в этом решении инвалидация кэша может происходить только по таймауту?

>>> 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.

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

И вот как подобное сделать, совсем мыслей нет.

Офлайн

#4 Апрель 9, 2015 15:40:11

Suguby27
Зарегистрирован: 2015-04-07
Сообщения: 26
Репутация: +  4  -
Профиль   Отправить e-mail  

Кэширование MySQL.

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

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

Ктт.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version