如果我想从数据存储区加载或删除对象。最好先检查它是否存在?我读过小型操作是免费的。检查是否存在对未存在的对象的潜在读取操作?
if (StatusObj.ofy().load().type(Object.class).filterKey(key).count() != 0) {
StatusObj.ofy().load().key(key).now();
}
答案 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或仅键查询的调用,这些操作都是免费的。