В чем разница между родительским и ссылочным свойством в Google App Engine? - PullRequest
10 голосов
/ 19 октября 2008

Из того, что я понимаю, родительский атрибут db.Model (обычно определяется / передается в вызове конструктора) позволяет вам определять иерархии в ваших моделях данных. В результате это увеличивает размер группы объектов. Однако мне не очень понятно, почему мы хотели бы это сделать. Это строго для соответствия ACID? Я хотел бы увидеть сценарии, в которых каждый лучше всего подходит или более уместен.

Ответы [ 2 ]

15 голосов
/ 19 октября 2008

Есть несколько отличий:

  • Все сущности с одним и тем же предком находятся в одной группе сущностей. Транзакции могут влиять только на объекты внутри одной группы объектов.
  • Все записи в одну группу объектов сериализуются, поэтому пропускная способность ограничена.
  • Родительский объект устанавливается при создании и фиксируется. Ссылки могут быть изменены в любое время.
  • С помощью ссылочных свойств вы можете запрашивать только прямые отношения, но с родительскими свойствами вы можете использовать фильтр .ancestor (), чтобы найти все (прямо или косвенно), происходящее от данного предка.
  • Каждая сущность имеет только одного родителя, но может иметь несколько ссылочных свойств.
8 голосов
/ 19 октября 2008

Единственная цель групп объектов (определяется родительским атрибутом) - разрешить транзакции между различными объектами. Если вам не нужны транзакции, не используйте отношения группы объектов.

Я предлагаю вам перечитать раздел Ключи и группы сущностей документов, мне потребовалось немало чтений, чтобы понять идею.

Также посмотрите эти разговоры, среди прочего они обсуждают транзакции и группы сущностей:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...