Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 26, 2011 10:20:34

LestatCheb
От:
Зарегистрирован: 2009-06-09
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

shared object for processes via memcached

с лок файлами тоже не хотелось бы сделать, таких разных статистик уже 6 штук, и возможно будут увеличиваться :)
впрочем тоже решение, да.

хм, я тут подумал, тут еще один глюк может быть:
2 процесса одновременно забирают объект статистики из memcached, и одновременно его обновляют на +1.
в итоге статистика обновится всего лишь на +1, а не на +2.



Офлайн

#2 Янв. 26, 2011 12:06:37

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

shared object for processes via memcached

LestatCheb
хм, я тут подумал, тут еще один глюк может быть:
2 процесса одновременно забирают объект статистики из memcached, и одновременно его обновляют на +1.
в итоге статистика обновится всего лишь на +1, а не на +2.
Насколько я помню у memcache есть atomic increment. Вы разве не его пользуете?



Офлайн

#3 Янв. 26, 2011 13:53:01

LestatCheb
От:
Зарегистрирован: 2009-06-09
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

shared object for processes via memcached

Ed
LestatCheb
хм, я тут подумал, тут еще один глюк может быть:
2 процесса одновременно забирают объект статистики из memcached, и одновременно его обновляют на +1.
в итоге статистика обновится всего лишь на +1, а не на +2.
Насколько я помню у memcache есть atomic increment. Вы разве не его пользуете?
мм.. а atomic increment только для чисел ведь,
а у меня в memcached питоновский объект с параметрами shows и clicks.
я могу конечно переделать на числа, скажем bstat_id_555_clicks и bstat_id_555_shows и делать им инкремент.
но это будет ли правильным? а если у объекта было бы 100 параметров, то держать 100 чисел в memcached?
или скажем нужно было не число менять, а список или текст изменять.

извините если задаю глупые вопросы :(
просто хочется разобраться как такие вещи решаются.



Офлайн

#4 Янв. 26, 2011 14:50:43

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

shared object for processes via memcached

Не хотите atomic increment - вспомните, что memcache держит compare and swap



Офлайн

#5 Янв. 26, 2011 22:06:34

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

shared object for processes via memcached

LestatCheb
мм.. а atomic increment только для чисел ведь,
а у меня в memcached питоновский объект с параметрами shows и clicks.
я могу конечно переделать на числа, скажем bstat_id_555_clicks и bstat_id_555_shows и делать им инкремент.
но это будет ли правильным? а если у объекта было бы 100 параметров, то держать 100 чисел в memcached?
или скажем нужно было не число менять, а список или текст изменять.
Для объектов на одном хосте я бы попользовал http://docs.djangoproject.com/en/dev/topics/cache/#local-memory-caching
Там есть локи. Либо расширил бы memcached бэкэнд, добавив туда работу с вызовом cas (Compare and swap).

Да, то, что вы объекты там держите - это хорошо, но нужно понимать, что memcached - это key-value store, то есть ваши объекты сереализуются перед попаданием туда и десереализуются после доставания оттуда. Тут atomic-ом и не пахнет. Чудес не бывает.



Офлайн

#6 Янв. 27, 2011 11:32:17

LestatCheb
От:
Зарегистрирован: 2009-06-09
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

shared object for processes via memcached

хм, нашел на просторах интернета такую вещь http://jbq.caraldi.com/2010/08/simple-distributed-lock-with-memcached.html
сейчас проверил, вроде работает, думаю остановиться пока на ней.



Офлайн

#7 Янв. 27, 2011 17:30:39

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

shared object for processes via memcached

Поосторожнее там с expiration time, иначе если процесс, поставивший лок, умрет, то остальные будут ждать эти 60000 секунд пока ключ не заэкспайрится.



Офлайн

#8 Янв. 27, 2011 20:38:47

LestatCheb
От:
Зарегистрирован: 2009-06-09
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

shared object for processes via memcached

Ed
Поосторожнее там с expiration time, иначе если процесс, поставивший лок, умрет, то остальные будут ждать эти 60000 секунд пока ключ не заэкспайрится.
хм, и правда, тогда уменьшу это значение.

вообще там лок по идее идет не больше секунды.

спасибо!



Отредактировано (Янв. 27, 2011 20:38:58)

Офлайн

#9 Янв. 28, 2011 12:34:10

LestatCheb
От:
Зарегистрирован: 2009-06-09
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

shared object for processes via memcached

все-таки на рабочем сервере не прокатило, слишком медленно,
переделал сбор статистики на асинхронные задания в Celery и все полетело :)



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version