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