2016-07-17 7 views
0

Google Datastoreを使用して、25のプロパティを持つ特定の種類のエンティティをクエリしています。この種のデータストアには5つのエンティティしかありませんが、これらのエンティティをクエリすると、新しいクエリを作成するのに平均2秒、クエリを準備するのに4秒かかります。その後のフェッチでは、プロセス全体で500msしかかかりません。この種のエンティティには2つのインデックスがあります。最初のフェッチのパフォーマンスを向上させる方法はありますか?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秒かかります。コードインジェクションなどの複雑なアプリは、はるかに時間がかかることがあります。

この起動時間が重要な場合は、スケーリングモデルを「自動」から「基本」または「手動」に切り替えて、少なくとも1つのインスタンスを常に使用可能にすることができます。 2番目のインスタンスなどを開始する必要がある場合でもこの問題に直面する可能性がありますが、この問題の重要性はインスタンスの数とともに急速に消えます(インスタンスの実行で10,000人のアクティブなユーザーがサポートされている場合、この遅延)。

また、自動スケーリングのインスタンスは、15分の非アクティブ後にシャットダウンすることにも注意してください。繰り返しになりますが、アプリがシャットダウンすることのない十分なユーザーを持っている場合、大部分のユーザーはこの遅延に直面しません。

関連する問題