AppEngine - 优化POST请求的读/写计数

时间:2012-05-31 07:20:41

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

我需要优化我正在使用的POST请求的读/写次数。

有关请求的一些信息:

  • 用户发送约100个项目的JSON数组
  • servlet需要使用单个long属性检查任何收到的项是否比数据存储区中的对应项更新
  • 我正在使用JDO

我目前所做的是(伪代码):

 foreach(item : json.items) {
     storedItem = persistenceManager.getObjectById(item.key);
     if(item.long > storedItem.long) {
         // Update storedItem
     }
 }

这显然会导致每个请求有~100个读取请求。

减少此逻辑的读取计数的最佳方法是什么?使用JDO Query?我读到使用“IN”-Queries只会导致多个查询一个接一个地执行,所以我认为这不会对我有所帮助:(

还有PersistenceManager.getObjectsById(Collection)。这有什么用?无法找到有关这将发出多少请求的任何文档。

2 个答案:

答案 0 :(得分:1)

我认为您可以使用以下调用来执行批量获取:

Query q = pm.newQuery("select from " + Content.class.getName() + " where contentKey == :contentKeys");   

上述查询之类的内容将返回您需要的所有对象。 你可以从这里处理所有其余的事情。

答案 1 :(得分:0)

最好的选择是

pm.getObjectsById(ids);

因为它用于在调用中获取多个对象(特别是因为你有id,因此键)。当然,当前代码(2.0.1及更高版本)应该为getEntities()执行单个数据存储区调用。见this issue