java - 谷歌应用引擎 : Why are key-only datastore queries costing me 1 READ plus 1 SMALL?

标签 java google-app-engine google-cloud-datastore

我有一个 Google App Engine java 应用程序,它可以很好地满足我的需求,但我想针对数据存储操作成本进行优化。

我知道小型数据存储操作是 free ,并且来自同一篇文章,仅键查询使用小操作...

Small datastore operations include calls to allocate datastore ids or keys-only queries

...所以我预计,如果我进行仅键查询,并使用第一个检索到的“实体”中的键来获取完整实体,那么它应该花费我 1 个小操作,加上一个(大)读取总的操作 - 只有后者需要花钱。这与 this 中使用的逻辑完全相同堆栈溢出问题。如果我仅通过执行常规查询并获取第一个实体来运行相同的操作,那么我将花费 1 + 1(大)读取。

但是...当我在我的应用程序上运行 appstats 时,我看到查询花费了我 1 Read,加上 1 small,然后我还必须为 get 付费:

@15ms datastore_v3.RunQuery real=8ms api=0ms cost=80 billed_ops=[DATASTORE_READ:1, DATASTORE_SMALL:1]

@6ms datastore_v3.Get real=7ms api=0ms cost=70 billed_ops=[DATASTORE_READ:1]

...所以与我之前所做的相比,这比我预期的多了 1 次阅读,以及 1 次额外的小操作。

Java 代码示例如下所示:

Query query = new Query(<Entity Name>).setKeysOnly();
Filter filter = new FilterPredicate(<Field Name>, Query.FilterOperator.EQUAL, <Some Value>);
query.setFilter(filter);
List<Entity> resultsSet = datastore.prepare(query).asList(FetchOptions.Builder.withLimit(<Max Rows>));
Entity entity = datastore.get(resultsSet.get(0).getKey());

问题是:我是不是实现错误了,或者我只是误解了定价的运作方式?谢谢。

最佳答案

您链接到的定价文档清楚地表明每个查询花费 1 次阅读。常规查询也会对每个实体收取 1 次读取费用,而仅键查询不会对每个实体收费。

因此,如果您想要检索一个实体,使用仅键查询然后使用 get 检索实体的成本更高。如果您检索两个实体,它会变得均匀。如果要检索数千个实体,与常规查询相比,仅键查询基本上是免费的。

关于java - 谷歌应用引擎 : Why are key-only datastore queries costing me 1 READ plus 1 SMALL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35144682/

相关文章:

Java 正则表达式从 HTML 中删除 URL

java - 使用JPA和Hibernate时如何选择id生成策略

google-app-engine - 如何添加到 Google Cloud Console 同意屏幕电子邮件地址下拉列表?

java - Intellij Idea IDE 中的 Google 应用引擎集成问题

google-app-engine - Datastore KeysOnly 在 Go 中的定价和实现

java - 如何更改JMeter的字体? (现在上部 i 与下部 L 相同)

java - Android:如何使用同一应用程序向其他用户发送推送通知?

google-app-engine - TInyPNG 与 Google App Engine 数据存储集成

google-app-engine - Google Cloud Endpoints : java. io.IOException:无法检索状态为:500 的 API 配置

java - 如何通过Objectify检索实体原始数据存储Key?