Кеширование объектов Datastore в memcache

49 views
Skip to first unread message

Rekby

unread,
Nov 4, 2011, 3:43:52 AM11/4/11
to google-ap...@googlegroups.com
Есть какие-то готовые библиотеки, чтобы не изобретать велосипед?

Lacrima

unread,
Nov 5, 2011, 10:05:26 AM11/5/11
to Google App Engine Russian
А никакого велосипеда нет. Просто сериализуете необходимые объекты
Datastore в Memcache, вот и вся магия.

Но если речь о библиотеке, то в ndb поддерживается автоматическое
кэширование в Memcache.
http://code.google.com/p/appengine-ndb-experiment/
Начиная с релиза 1.6 ndb будет вклечен в SDK.

Rekby

unread,
Nov 5, 2011, 4:53:57 PM11/5/11
to google-ap...@googlegroups.com
Понятно, что можно делать это вручную, но задача вполне общая и возможно есть какая-то библиотека с прослойкой для db.Model например, которая сохраняет объекты и в memcache и в базе, следит за более-менее согласованным состоянием (частые чтения, редкие изменения) и возможно кеширует в memcache данные для каких-то простых запросов.

Lacrima

unread,
Nov 6, 2011, 5:44:30 AM11/6/11
to Google App Engine Russian
Я бы в этом случае рекомендовал использовать ndb.
Но если уже все модели завязаны на db.Model и нет возможности
мигрировать на ndb, то тогда вот эта статья очень поможет:
http://blog.notdot.net/2009/9/Efficient-model-memcaching

Rekby

unread,
Nov 7, 2011, 2:53:04 AM11/7/11
to google-ap...@googlegroups.com
Нет, ничего пока не завязано. NDB похоже именно то, что нужно.

на экспериментальность ndb можно внимания не обращать - он хорошо работает?

Lacrima

unread,
Nov 7, 2011, 4:29:14 AM11/7/11
to Google App Engine Russian
ndb уже включен в состав 1.6.0 Prerelease SDK, и его цель заменить в
долгосрочной перспективе текущую db библиотеку.
ndb работает отлично. Если есть баги, то они фиксятся очень быстро.
Тем более создателем ndb является сам Гвидо ван Россум.

Rekby

unread,
Nov 7, 2011, 4:19:58 PM11/7/11
to google-ap...@googlegroups.com
Здорово, значит ndb это как раз то, о чем я спрашивал :)

Спасибо.

Rekby

unread,
Nov 8, 2011, 1:05:04 AM11/8/11
to google-ap...@googlegroups.com
попробовал, получил странную ошибку:

from google.appengine.api import channel

class ChannelInfo(BaseModel):
    InternalID = model.StringProperty(indexed=False)
    Creation = model.DateTimeProperty()
    User = model.StringProperty()

def create():
    id = uuid.uuid4().hex
    token = channel.create_channel(id)
    ch_info = ChannelInfo(id=token)
    ch_info.InternalID=id
    ch_info.Creation = datetime.datetime.utcnow()
    ch_info.User = users.get_current_user()
    ch_info.LastPing = datetime.datetime.utcnow()
    ch_info.put()
    return {'id' : id, 'token' : token }

RuntimeError: Deadlock waiting for <Future 6b88750 created by tasklet_wrapper(tasklets.py:906) for tasklet put(context.py:627); pending>

погулив нашел http://code.google.com/p/appengine-ndb-experiment/issues/detail?id=82 с выводом, что у человека был плохо python 2.5, у меня python 2.7

Lacrima

unread,
Nov 8, 2011, 3:35:51 AM11/8/11
to Google App Engine Russian
http://groups.google.com/group/appengine-ndb-discuss/browse_thread/thread/10f711eb58874d03

Там есть ссылка на фикс для пайтон27. Или можно подождать официального
1.6.0 релиза. Там ndb будет работать нормально с пайтон27.

Stas Vovk

unread,
Nov 8, 2011, 4:24:30 AM11/8/11
to google-ap...@googlegroups.com
уже не нужно ждать релиза)) http://code.google.com/intl/en/appengine/downloads.html

2011/11/8 Lacrima <lacrim...@gmail.com>
--
Вы получили это сообщение, поскольку подписаны на группу Google App Engine Russian.

Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу google-ap...@googlegroups.com.
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу google-appengin...@googlegroups.com.
О дополнительных функциях можно узнать в группе по адресу http://groups.google.com/group/google-appengine-ru?hl=ru.




--
Best regards,

Stas Vovk

Rekby

unread,
Nov 8, 2011, 4:30:42 AM11/8/11
to google-ap...@googlegroups.com
Патч применил, спасибо.

Заодно в группу ndb вступил. Странно почему google не нашел этого.

и пока писал сообщение увидел, что и релиз вышел, заодно пошел качать релиз 1.6

Mikhail Kashkin

unread,
Nov 8, 2011, 6:20:42 AM11/8/11
to google-ap...@googlegroups.com
Только не тупите и храните в памяти proto_buffer, а не всю модель. В каком-то докладе об этом рассказывал. 

2011/11/5 Lacrima <lacrim...@gmail.com>

А никакого велосипеда нет. Просто сериализуете необходимые объекты
Datastore в Memcache, вот и вся магия.

--
Mikhail Kashkin
http://www.xen.ru/ 
http://www.vurt.ru/ - блог об App Engine

Stas Vovk

unread,
Nov 8, 2011, 6:29:45 AM11/8/11
to google-ap...@googlegroups.com
еще бы ссылочку на тот доклад...

2011/11/8 Mikhail Kashkin <mkas...@gmail.com>

--
Вы получили это сообщение, поскольку подписаны на группу Google App Engine Russian.
Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу google-ap...@googlegroups.com.
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу google-appengin...@googlegroups.com.
О дополнительных функциях можно узнать в группе по адресу http://groups.google.com/group/google-appengine-ru?hl=ru.
Reply all
Reply to author
Forward
0 new messages