我想根据AlertSubscription中包含的用户ID检索大型(约20000个)对象。这在GAE上需要20多秒,我想知道是否有可能让它更快?我已经使用标准查询在5秒内检索到20000个AlertSubscriptions对象,所以我认为DeviceInfo对象应该花费20多秒才是奇怪的。
我目前的逻辑如下:
因此,我需要一次性使用所有设备,因此使用光标无济于事。有没有办法在对象的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;
答案 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