繁体   English   中英

检查谷歌应用引擎数据存储区中是否存在实体。

[英]Checking if Entity exists in google app engine datastore.

检查实体是否存在于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();

资料来源:[1]: http//groups.google.com/group/google-appengine-java/browse_thread/thread/b1d1bb69f0635d46/0e2ba938fad3a543?pli = 1

您可以使用仅包含一个KeyList<Key>获取, 该方法返回Map<Key, Entity> ,您可以检查它是否包含实际值或null ,例如:

Entity e = datastoreService.get(Arrays.asList(key)).get(key);

一般来说,虽然我认为在try / catch中包装get()更容易,如果捕获到EntityNotFoundException则返回null

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM