存在的GQL查询:获取与密钥查询与实体查询

时间:2016-11-03 16:58:56

标签: java google-cloud-datastore gql

虽然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)

1 个答案:

答案 0 :(得分:0)

仅密钥查询更快,因为实体数据不必传输回客户端。假设您有一个具有N个属性的实体,并且这些属性(名称和值)的大小为50 KB,如果您执行仅密钥查询,则通过网络节省50 KB的数据传输。

从数据存储的角度来看,实体的实际查找方式是相同的,无论您使用仅限密钥查询,基于密钥还是Get(密钥)方法的实体查询,因为数据存储区只是根据提供的内容查找实体键。

总结一下 - 如果您需要知道的是具有给定密钥的实体是否存在,那么仅密钥查询将是您的最佳选择。