谷歌应用引擎JPA祖先查询

时间:2014-04-18 15:09:44

标签: google-app-engine jpa

我想知道使用祖先查询是否有任何成本/性能差异。

Query q = em.createQuery("SELECT FROM File f WHERE f.parentID = :parentID AND f.someOtherNumber > :xx");
q.setParameter("parentID", KeyFactory.createKey("User", 2343334443334L));
q.setParameter("xx",233);

//File class with ancestors
@Entity
class File{
    @Id
    @....
    public Key ID;

    @Extension(vendorName = "datanucleus", key = "gae.parent-pk", value ="true")
public Key parentID;
};

OR

Query q = em.createQuery("SELECT FROM File f WHERE f.parentID = :parentID AND f.someOtherNumber > :xx");
q.setParameter("parentID", 2343334443334L);
q.setParameter("xx",233);

//File class without ancestors
@Entity
class File{
    @Id
    @....
    public Key ID;

public long parentID;
}; 

我正在测试一些东西,如果我使用祖先查询,我的索引不包括parentID(它用祖先说)它的非祖先版本。 索引/数据存储读/写成本是否存在差异?

1 个答案:

答案 0 :(得分:1)

写作成本可能略低(索引属性减少一个),但存储成本可能略高(每个子实体的密钥包括其所有祖先)。

在任何一种情况下,除非您有十亿条记录,否则差异无关紧要。根据您的数据访问模式(即大多数时间访问数据的方式),您将面临更严重的性能/成本差异。