2014-09-10 104 views
0

我们正在开发一个使用Google Cloud Datastore的应用程序,这是一个重要的细节:它不是一个gae应用程序! 一切正常使用正常工作。我们设计了一个测试,获取了30000条记录,但是,当我们试图运行测试,我们得到了以下错误:是否可以增加Google Cloud Datastore请求的超时时间?

java.net.SocketTimeoutException: Read timed out 

我们发现,超时异常30秒后出现,所以这解释了错误。 我有两个问题:

  • 有没有办法增加这个超时?
  • 是否可以使用分页查询数据存储?我们发现,当你有一个应用程序可以使用光标,但我们的应用程序不是。

回答

2

您可以使用与使用Datastore的GAE应用完全相同的方式使用游标。看看this page for info

特别是,ResultQueryBatch对象有一个.getEndCursor()方法,您可以在重新发出QuerysetStartCursor(...)时使用该方法。以下是上述页面的代码片段:

Query q = ... 
if (response.getBatch().getMoreResults() == QueryResultBatch.MoreResultsType.NOT_FINISHED) { 
    ByteString endCursor = response.getBatch().getEndCursor(); 
    q.setStartCursor(endCursor); 
    // reissue the query to get more results... 
} 

您应该明确地使用游标来确保您获得所有结果。 rpc有额外的时间限制,比如总的rpc大小,所以你不应该依赖一个rpc来回答你的整个查询。

+0

您能否提供更多关于“不依赖于单个rpc回答您的整个查询”的信息?就像我怎样才能使用多一个?参考将是好的! – 2014-09-11 13:55:37