虽然Google Cloud Client Library具有许多内置功能,但在查询基于其ID的Entity存在时,我找不到任何可用的内容。根据我的理解,创建一个关键查询比这样的实体查询更有效。
SELECT __key__ FROM User WHERE __key__ = Key(User, 1)
如果可能,在Java应用程序中,使用get(Key key)
功能会更好。
Datastore datastore = DatastoreOptions.getDefaultInstance().getService();
KeyFactory keyFactory = datastore.newKeyFactory().setKind(User);
Key key = keyFactory.newKey(1);
Entity entity = datastore.get(key);
如果我有一个实例,我的实体也有祖先,当查询只有父ID的祖先的存在时,哪三个会更有效?
我假设实体查询(SELECT * From Parent WHERE __key__ = Key(Parent, 1)
)总是比关键查询慢,但是当与get相比时呢?
什么时候祖先的路径链接得更长? 然后,关键查询可能变成以下类似的东西:
SELECT __key__ FROM Grandchild WHERE __key__ = Key(Parent, 1, Child, 1, Grandchild, 1)
答案 0 :(得分:0)
仅密钥查询更快,因为实体数据不必传输回客户端。假设您有一个具有N个属性的实体,并且这些属性(名称和值)的大小为50 KB,如果您执行仅密钥查询,则通过网络节省50 KB的数据传输。
从数据存储的角度来看,实体的实际查找方式是相同的,无论您使用仅限密钥查询,基于密钥还是Get(密钥)方法的实体查询,因为数据存储区只是根据提供的内容查找实体键。
总结一下 - 如果您需要知道的是具有给定密钥的实体是否存在,那么仅密钥查询将是您的最佳选择。