Ancestor Key 和 Parent Key 的明显区别是什么?

What is the clear difference of a Ancestor Key and a Parent Key?

祖先密钥和父密钥的明显区别是什么?

基本一样吗? 它对 get() 方法和 Query 方法有何不同影响?

从 GAE KeyFactory class,我们只能看到 Key 父代而没有这样的祖先 Key

public static Key createKey(Key parent, String kind, String name) {
    return createKey(parent, kind, name, (AppIdNamespace)null);
}

然后像这样使用密钥:

Entity e = new Entity(key); // key may include a parent Key

在典型的查询中,例如在留言簿应用中。我们可以创建一个 Key 作为祖先,这样我们就可以拥有不同的留言簿,可以将实体保存到其中,例如:

Key guestbookKey = KeyFactory.createKey("Guestbook", guestbookName);
Query q = new Query(kind, guestbookKey); // guestbookKey = ancestor

那么Parent和Ancestor有什么不同呢,他们是不是基本上是同一个东西,没有任何区别,只是符号不同而已?

A Parent 表示 立即 parent。 Ancestor 是一个更通用的术语,包括直接 parents、parents of parents、parents of parents of parents,等等——与英语中的用法完全相同。

一个 "entity group",你可以在其上请求原子交易的那种,需要由具有共同 祖先 的实体组成——它们不不需要所有人都具有相同的(直接)parent,但他们的血统确实需要在一个共同的祖先处相遇方式 "up the line"(所涉及的所有实体的步骤数不一定相同)。

当您 createKey 基于 parent 键时,那个 parent 键可能反过来用它自己的 parent -- 如果是这样,那么 parent 的 parent 本身并不是您现在创建的 parent,而是 它的祖先。