2016-07-17 45 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分钟不活动后闭嘴。同样,如果你的应用程序有足够的用户永远不会关闭,绝大多数用户永远不会面对这种延迟。