Из того, что я понимаю, родительский атрибут db.Model(обычно определенный/переданный в вызове конструктора) позволяет вам определять иерархии в ваших моделях данных. В результате это увеличивает размер группы объектов. Однако мне не очень понятно, почему мы хотели бы это сделать. Это строго для соответствия ACID? Я хотел бы видеть сценарии, где каждый лучше всего подходит или более уместен.
Какая разница между родительским и ссылочным свойством в Google App Engine?
Ответ 1
Существует несколько отличий:
- Все объекты с одним и тем же предком находятся в одной группе сущностей. Транзакции могут влиять только на объекты внутри одной группы сущностей.
- Все записи в одну группу объектов сериализуются, поэтому пропускная способность ограничена.
- Родительский объект устанавливается на создание и фиксируется. Ссылки могут быть изменены в любое время.
- С помощью ссылочных свойств вы можете запрашивать только прямые отношения, но с родительскими свойствами вы можете использовать фильтр .ancestor(), чтобы найти все (прямо или косвенно) от определенного предка.
- Каждый объект имеет только один родительский элемент, но может иметь несколько ссылочных свойств.
Ответ 2
Единственная цель групп сущностей (определяемых родительским атрибутом) - включить транзакции между разными объектами. Если вам не нужны транзакции, не используйте отношения группы объектов.
Я предлагаю вам перечитать раздел "Группы ключей и сущностей" в документах, мне потребовалось всего несколько раз прочитать эту идею.
Также смотрите эти разговоры, среди прочего, они обсуждают транзакции и группы сущностей: