在GAE数据存储区上访问项目之前检查项目是否存在更便宜?

时间:2014-12-24 22:06:48

标签: performance google-app-engine google-cloud-datastore

如果我想从数据存储区加载或删除对象。最好先检查它是否存在?我读过小型操作是免费的。检查是否存在对未存在的对象的潜在读取操作?

if (StatusObj.ofy().load().type(Object.class).filterKey(key).count() != 0) {
   StatusObj.ofy().load().key(key).now();
}

1 个答案:

答案 0 :(得分:3)

是。但是,网络延迟不可忽略,如果实体存在,您应用的响应时间几乎会翻倍。

来自:https://cloud.google.com/appengine/docs/python/datastore/entities#Python_Batch_operations

两个键的批处理操作需要两次读取,即使其中一个键不存在也是如此。例如,执行仅检索1000个密钥的密钥查询,然后对其中的500个进行获取,比直接对所有1000进行常规(而非仅密钥)查询更经济:

查询返回1000个密钥+获取500个实体:

$ 0.0000007(基本查询成本)+ $ 0.0001(每键查询成本)+ 0.00035(实体获取) = $ 0.0004507 获取1000个实体:

$ 0.0000007(基本查询成本)+ $ 0.0007(每实体查询成本) = $ 0.0007007

来自定价页面(https://cloud.google.com/appengine/pricing):小型数据存储区操作包括分配数据存储区ID或仅键查询的调用,这些操作都是免费的。