0

документация (https://cloud.google.com/appengine/docs/python/ndb/) утверждает, чтоGAE Python NDB Datastore - нет необходимости в memcache.set?

NDB использует Memcache как служба кэша для "горячих точек" в данных

Я сейчас, используя memcache только следующим образом: memcache.set(key=(id), value=params, time=0)

Это довольно часто истекает (автопотоки), поэтому я хотел бы использовать NDB Datastore. Я думал, что мне придется всегда класть ключ-значение как в NDB, так и в Memcache, а затем проверять оба. Выполняется ли это автоматически NDB?

Т.е. ancestor_key = ndb.Key("Book", guestbook_name or "*notitle*")

greetings = Greeting.query_book(ancestor_key).fetch(20)

бы, что неявно устанавливается Memcache?

И когда я прочитал из NDB, негласно ли он попытался бы сделать memcache.get(key)?

Благодарим за ваше терпение.

EDIT - То, что я пробовал:

В качестве теста я пытался что-то вроде этого:

class Book(ndb.Model): 
    content = ndb.StringProperty() 

class update(webapp2.RequestHandler): 
    def post(self): 
     p1='1' 
     p2='2' 
     p3='3' 
     p4='4' 
     p5='5' 
     id='test' 
     paramarray = (p1,p2,p3,p4,p5) 

     book = Book(name=id,value=paramarray) 
     # OR likes this - book = Book(ndb.Key(id),value=paramarray)   
     book.put() 

Обе версии без ошибок. Попытка получить ключ вар id со значениями paramarray

EDIT 2 Даниэль, спасибо за все.

Имейте последующие вопросы по форматированию, задайте новый вопрос.

+0

На странице appstats будут показаны запросы rpc, чтобы вы могли проверить поведение get/set memcache. –

+0

@JoshJ Спасибо, это звучит полезно, и я попробую это. – PyGAE

ответ

1

Да; см. полную документацию по адресу ndb caching. В принципе, каждая запись кэшируется как в локальном кэше запросов, так и в основном хранилище memcached; сначала ключ будет искать в обоих кэшах, прежде чем вернуться к реальному хранилищу данных.

Редактировать Не понимаю, почему вы думаете, что ваш пример будет работать. Вы определили модель с свойством content, но затем попробуйте установить name и value свойства на нем; естественно, что это провалится.

Вы должны пройти через ndb documentation, что дает хорошее представление об использовании класса модели.

+0

Спасибо, Дэниэл, что сохраняет некоторые проверки. Не могли бы вы помочь мне с простым примером того, как установить простое значение ключа в хранилище данных? В документации я вижу 'ndb.key', но не понимаю, где это значение. Есть ли простой синтаксис, например 'memcache, set()' one? Я не хочу беспокоиться о предках или чем-то еще, просто о простых ключах и значении. – PyGAE

+0

Предполагая, что у вас есть модель книги, вы можете создать новую книгу без предка с буквой 'book = Book (name =" The Hobbit ", author =" JRR Tokien ")', а затем сохранить ее с помощью 'book.put()' , Положительный вызов возвращает ключ. –

+0

Спасибо. Здесь не хватает Pyhon. В отличие от 'memcache.set()', здесь я должен сначала создать новый 'class'? т.е. 'class Greeting (ndb.Model):' и затем использовать это в моей 'MainPage'? Не могу ли я сделать это проще, поставив простой оператор 'put' непосредственно в' MainPage'? (опять же, возвращаясь к примеру «memcache.set()», что было проще для меня. – PyGAE

Смежные вопросы