GQL存在查询:Get、键查询、实体查询



虽然谷歌云客户端库有很多内置功能,但我还没有发现任何可以使用的基于id查询实体存在的功能。据我所知,键查询比这样的实体查询要高效得多。

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)

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

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

总而言之——如果你只需要知道一个实体是否存在给定的键,那么仅键查询将是你最好的选择。

最新更新