2013-06-19 5 views
10

Я сохраняю ключ объекта как свойство другого, чтобы связать их. На этом этапе проекта мы находимся на стадии рефакторинга, поэтому я думал о введении предков. Есть ли разница в производительности между двумя подходами? Любые определенные преимущества, которые я мог бы получить, если мы представим предков?Google Appengine NDB ancestor vs key query

class Book(ndb.Model): 
    ... 

class Article(ndb.Model: 
    book_key = ndb.KeyProperty(kind=Book, required=True) 


book_key = ndb.Key("Book", 12345) 

первый подход предок запрос

qry = Article.query(ancestor=book_key) 

2ст простой ключ подход запрос

qry = Article.query(book_key=book_key) 

ответ

15

Запрос предок всегда будут полностью соответствовать. С другой стороны, запрос с book_key не обязательно будет последовательным: вы можете обнаружить, что последние изменения не будут отображаться в этом запросе.

С другой стороны, введение предка налагает ограничение на количество обновлений: вы можете делать только одно обновление в секунду любой группе сущностей (т. Е. Предку и его дочерним элементам).

Это компромисс для вас, который более важен в вашем приложении.

+0

Я не видел этого предела (1 обновление/сущность группы/секунды) в документах - можете ли вы предоставить ссылку? Что-то страшная квота! – rattray

+2

Вы должны ожидать 1 запись в секунду, хотя это может быть немного больше на практике. Мне не удалось найти таблицу с этим номером, но посмотрите последний абзац на https://developers.google.com/appengine/docs/python/datastore/structuring_for_strong_consistency и обсудите здесь https: // groups .google.com/форум/#! тема/Google-AppEngine/llEXU-B3dQ4 –

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