【问题标题】:What is the clear difference of a Ancestor Key and a Parent Key?祖先密钥和父密钥的明显区别是什么?
【发布时间】:2015-01-19 15:47:20
【问题描述】:

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

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

从 GAE KeyFactory 类中,我们只能看到 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 有什么区别,它们基​​本上是一样的,没有任何区别,是一样的,只是符号不同?

【问题讨论】:

    标签: google-app-engine google-cloud-datastore


    【解决方案1】:

    Parent 表示直接父级。 Ancestor 是一个更笼统的术语,包括直系父母、父母的父母、父母的父母等等——与英语中的用法完全相同。

    “实体组”,即您可以在其上请求原子事务的那种,需要由具有共同祖先的实体组成——它们不需要都具有相同(直接)父母,但他们的血统确实需要在一个共同的祖先上以某种方式“向上”相遇(不一定所有人的步数相同涉及的实体)。

    当您基于parent 密钥createKey 时,那个 父密钥可能又是由它自己的父密钥生成的——如果是这样,那么父密钥的父密钥不是它本身就是你现在正在创建的东西的父级,但是,它它的祖先。

    【讨论】:

    • 很好的解释。因此,在进行上述留言簿查询时,我可以输入直接父级的键,结果将只是我刚刚输入的那个父键的实体。但是,如果我放置一个更“老”的祖先,它会返回更多实体吗?
    • @xybrek,是的,我相信会是这样(这就是祖先查询在 Python 的 ndb 中的工作方式——我对 Java 等价物不太熟悉,但我相信功能是一样的,只是包装不同)。
    猜你喜欢
    • 2011-09-03
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    相关资源
    最近更新 更多