我们正在开发一个使用Google Cloud Datastore的应用程序,重要的细节:它不是一个gae应用程序! 一切正常使用都可以。我们设计了一个可以获取超过30000条记录的测试,但是当我们尝试运行测试时,我们收到了以下错误:
java.net.SocketTimeoutException: Read timed out
我们发现30秒后发生超时异常,因此这解释了错误。 我有两个问题:
答案 0 :(得分:2)
您可以使用与使用数据存储区的GAE应用程序完全相同的方式使用游标。看看this page for info。
特别是,ResultQueryBatch
对象具有.getEndCursor()
方法,您可以在使用Query
重新发出setStartCursor(...)
时使用该方法。以下是上页中的代码段:
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来回答你的整个查询。