2016-08-25 82 views
0

我们正在从数据存储中获取命名空间的列表,该数据存储的数量高达30k。Google Appengine数据存储超时异常

每天运行提取命名空间的cron。但有一天它工作正常,有一天它抛出数据存储超时异常。

com.google.appengine.api.datastore.DatastoreTimeoutException:所述数据存储 操作超时,或者数据是暂时 不可用。

相关代码:

DatastoreService ds = DatastoreServiceFactory.getDatastoreService(); 
FetchOptions options = FetchOptions.Builder.withChunkSize(150); 
Query q = new Query(Entities.NAMESPACE_METADATA_KIND); 

for (Entity e : ds.prepare(q).asIterable(options)){ 
    // A nonzero numeric id denotes the default namespace; 
    // see Namespace Queries, below 
    if (e.getKey().getId() != 0){ 
     continue; 
    }else{ 
     namespaces.add(e.getKey().getName()); 
    } 
} 

可能是什么问题?

回答

1

根据官方文档:

DatastoreTimeoutException被抛出时,数据存储操作时间 出来。当您试图放置,获取或删除太多实体或具有太多属性的实体时,或者数据存储区 过载或遇到问题时,可能会发生这种情况。

这意味着数据存储有麻烦与您的请求。尝试处理该错误,如:

import com.google.appengine.api.datastore.DatastoreTimeoutException;  
    try { 
     // Code that could result in a timeout 
    } catch (DatastoreTimeoutException e) { 
     // Display a timeout-specific error page 
    } 
相关问题