В чем разница между родительским и ссылочным свойством в Google App Engine?

StackOverflow https://stackoverflow.com/questions/215570

  •  03-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top