我想知道使用祖先查询是否有任何成本/性能差异。
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(它用祖先说)它的非祖先版本。 索引/数据存储读/写成本是否存在差异?
答案 0 :(得分:1)
写作成本可能略低(索引属性减少一个),但存储成本可能略高(每个子实体的密钥包括其所有祖先)。
在任何一种情况下,除非您有十亿条记录,否则差异无关紧要。根据您的数据访问模式(即大多数时间访问数据的方式),您将面临更严重的性能/成本差异。