2014-09-10 97 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