【问题标题】:GQL Query for Existence: Get vs. Key Query vs. Entity Query存在的 GQL 查询:Get vs. Key Query vs. Entity Query
【发布时间】:2017-03-17 09:03:39
【问题描述】:

虽然 Google Cloud 客户端库具有许多内置功能,但在根据 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)

【问题讨论】:

    标签: java google-cloud-datastore gql


    【解决方案1】:

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

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

    总而言之 - 如果您只需要知道具有给定键的实体是否存在,那么仅键查询将是您的最佳选择。

    【讨论】:

    • 如果我分别拥有种类和标识符怎么办?使用 get() 方法更好还是构造键字面量/使用参数绑定更好?
    猜你喜欢
    • 1970-01-01
    • 2011-07-16
    • 2013-04-02
    • 1970-01-01
    • 2018-09-13
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多