2016-07-17 44 views
0

我正在與Google Datastore一起查詢某種具有25個屬性的實體。我在這種類型的數據存儲中只有5個實體,但是當我查詢這些實體時,平均需要2秒來創建新的查詢,4秒來準備查詢。在後續提取中,整個過程僅需要500ms。我在這種實體上有兩個索引。有什麼辦法來提高初始獲取的性能嗎?Google Datastore Long Query Time

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); 
Query q = new Query("Producers").setFilter(new FilterPredicate("name", FilterOperator.EQUAL, searchName)); 
List<Entity> producers = datastore.prepare(q).asList(FetchOptions.Builder.withDefaults()); 
+0

在部署它之後,它是初始查詢還是初始請求到您的實例?你如何區分「初始」查詢和「後續」查詢? –

+0

最初的查詢是當一個實例沒有運行並需要啓動時。隨後的查詢是在請求發出時實例已經運行。 – user3705359

回答

2

您面臨的問題與您的查詢,實體或索引數量無關。即使您將代碼減少到System.out.print("Hello!"),實例啓動和響應也需要6-8秒的時間。使用代碼注入等的複雜應用程序可能需要更長的時間。

如果此啓動時間對您很重要,您可以將縮放模型從「自動」切換到「基本」或「手動」,以使至少一個實例始終可用。即使這樣,當需要啓動第二個實例等時,您可能會遇到此問題,但此問題的重要性很快會隨着實例數量而消失(例如,如果運行實例支持10,000個活動用戶,則只有10,001個具有經驗的用戶這個延遲)。

另請注意,自動縮放實例會在~15分鐘不活動後閉嘴。同樣,如果你的應用程序有足夠的用戶永遠不會關閉,絕大多數用戶永遠不會面對這種延遲。