Google App Engine:使用objectify从Keys获取大量对象的最快方法

时间:2013-03-03 17:31:11

标签: google-app-engine objectify

我想根据AlertSubscription中包含的用户ID检索大型(约20000个)对象。这在GAE上需要20多秒,我想知道是否有可能让它更快?我已经使用标准查询在5秒内检索到20000个AlertSubscriptions对象,所以我认为DeviceInfo对象应该花费20多秒才是奇怪的。

我目前的逻辑如下:

  1. 获取提醒订阅列表
  2. 获取与订阅相关联的所有DeviceInfo
  3. 为每个操作系统(Android,iOS,WP7 / 8)启动一项任务
  4. 因此,我需要一次性使用所有设备,因此使用光标无济于事。有没有办法在对象的Key中添加索引以使其更快?我没有在datastore-index.xml文件中设置索引。

        List<com.googlecode.objectify.Key<DeviceInfo>> dKeys= new ArrayList<com.googlecode.objectify.Key<DeviceInfo>>(); 
        for (AlertSubscription s: filteredSubscriptions.values()) 
        {
            dKeys.add(new com.googlecode.objectify.Key<DeviceInfo>(DeviceInfo.class,s.user));
    
        }
        log.info("Getting keys " + filteredSubscriptions.size());
        Map<com.googlecode.objectify.Key<DeviceInfo>, DeviceInfo> fetched = ofy.get(dKeys);
        log.info("Got keys, looping now");
    ...
       @PersistenceCapable(identityType = IdentityType.APPLICATION)
       public class DeviceInfo {
          @PrimaryKey
          @Persistent
          @Indexed
          private Key key;
    

1 个答案:

答案 0 :(得分:0)

这解决了我的问题:

ObjectifyOpts opts = new ObjectifyOpts();
opts.setConsistency(Consistency.EVENTUAL);
Objectify ofy = ObjectifyService.begin(opts);

https://groups.google.com/forum/?fromgroups=#!topic/objectify-appengine/1dIi-JOK_k4