检查Google-app-engine数据存储区中是否存在实体的最佳/最快方法是什么?现在我试图通过键获取实体并检查get()是否返回错误。
我不知道在数据存储区上获取实体的过程。有没有更快的方法只做这个检查?
答案 0 :(得分:6)
您提出的建议确实是了解您的实体是否存在的最快方法。减慢速度的唯一因素是获取和反序列化实体所需的时间。如果您的实体很大,这可能会让您失望。
如果此操作(检查是否存在)是您的主要瓶颈并且您拥有大型实体,则可能需要使用两个实体来推送自己的检查系统 - 首先,您将拥有包含数据的现有实体,以及第二个实体,它存储对真实实体的引用,或者可能是一个空实体,其中键只是您可以计算的原始实体键的变体。您可以使用第二个实体快速检查是否存在,然后仅在需要数据时才获取第一个实体。
我认为更好的方法就是设计你的密钥,你知道它们不会重复,或者你的操作是幂等的,所以即使旧的实体被覆盖,也没关系。
答案 1 :(得分:4)
com.google.appengine.api
已被弃用,以支持App Engine GCS客户端。
您是否考虑过使用查询?猜测和检查不是一种可扩展的方法来查找数据存储中存在的实体。可以创建查询以从数据存储中检索满足指定条件集的实体:
https://developers.google.com/appengine/docs/java/datastore/queries
编辑:
仅限密钥查询怎么样?仅键查询比返回完整实体的查询运行得更快。要仅返回键,请使用Query.setKeysOnly()方法。
new Query("Kind").addFilter(Entity.KEY_RESERVED_PROPERTY, FilterOperator.EQUAL, key).setKeysOnly();
答案 2 :(得分:3)
您可以使用只包含一个List<Key>
的{{1}}获取,that method返回Key
,您可以检查它是否包含实际值或Map<Key, Entity>
,例如:
null
一般情况下,如果Entity e = datastoreService.get(Arrays.asList(key)).get(key);
被捕获,我认为将get()
包装在try {catch}中会更容易返回null
。