Ответ 1
Предки иерархичны - их можно использовать, когда у вас есть иерархические отношения между вещами (например, в системе форума у вас может быть Forum
, у которых есть Topic
, которые, в свою очередь, имеют Post
s).
KeyProperty
не является по сути иерархическим - он просто предоставляет ссылку. Он должен использоваться для неиерархических связей между элементами. Повторяя пример форума из предыдущего абзаца, можно использовать KeyProperty
, чтобы связать a Post
с User
, который его создал, потому что User
не находится в иерархии форума-темы-сообщения. Они связаны со всеми 3 (например, User
может создавать сообщение, создавать тему и/или модерировать форум).
В конце концов, однако, основной компромисс между предками и ключами является согласованностью и пропускной способностью: запросы на основе предков дают вам сильную согласованность относительно последних обновлений, но налагают ограничение в 1 модификацию в секунду для любой данной группы сущностей и ограничение максимального размера для группы из-за отсутствия распределения.