检查 google-app-engine 数据存储中是否存在实体的最佳/最快方法是什么?现在我正在尝试通过键获取实体并检查 get() 是否返回错误。
我不知道在数据存储中获取实体的过程。有没有更快的方法只做这个检查?
检查 google-app-engine 数据存储中是否存在实体的最佳/最快方法是什么?现在我正在尝试通过键获取实体并检查 get() 是否返回错误。
我不知道在数据存储中获取实体的过程。有没有更快的方法只做这个检查?
您提出的确实是了解您的实体是否存在的最快方法。唯一让你慢下来的是获取和反序列化你的实体所花费的时间。如果您的实体很大,这可能会减慢您的速度。
如果此操作(检查是否存在)是您的主要瓶颈并且您拥有大型实体,您可能希望通过使用两个实体来滚动您自己的检查系统 - 首先您将拥有包含数据的现有实体,以及第二个实体要么存储对真实实体的引用,要么存储一个空实体,其中键只是您可以计算的原始实体键的变体。您可以使用第二个实体快速检查是否存在,然后仅在需要数据时才获取第一个实体。
我认为更好的方法是设计你的密钥,这样你就知道不会有重复,或者你的操作是幂等的,这样即使旧实体被覆盖,也没关系。
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();
您可以使用List<Key>
仅包含 one的 a 进行获取Key
,该方法返回 aMap<Key, Entity>
您可以检查它是否包含实际值或null
,例如:
Entity e = datastoreService.get(Arrays.asList(key)).get(key);
一般来说,虽然我认为将它包装get()
在一个 try/catch 中会更容易,null
如果它EntityNotFoundException
被捕获则返回。