2017-05-22 11 views
1

Google Cloud Datastoreクエリのパフォーマンスが極端に低下しています。すべてのレコードを取得すると、Google Cloud Datastoreのクエリが遅すぎる

私のエンティティの構造は非常に単純です:

calendarId, levelId, levelName, levelValue 

そして、そこだけ約1400のレコードがあり、まだクエリがデータをお返しするために500msの-1.2秒かかります。別のエンティティに対する別のクエリは、313レコードに対して300〜400ミリ秒かかるだけです。

私はこのような遅延を引き起こしているのだろうかと思っています。誰でもこの問題をデバッグする方法や検査する要因についていくつかの指摘をしてください。

ありがとうございました。

+1

クエリにチャンクサイズを設定しましたか? –

+0

データを取得する方法を示すコードをいくつか共有できますか?これらのクエリを最適化するお手伝いができるかもしれません。 –

+0

コードはどこですか? –

答えて

0

予期しない動作が発生しています。ユーザーにページを提示するときに、多くのエンティティを取得する必要はありません。 Gmailには1000件のメールが表示されず、設定に基づいて25〜100件のメールが表示されます。小さな数字(たとえば最初の100)を取り出し、ユーザーが他のエンティティを見ることを可能にするために何らかの種類のページングを実装する必要があります。

これがバックエンド処理の場合は、エンティティを処理するのに多くの時間がかかります。これを考慮する必要があります。

エンティティを大量のバッチで取得するのが一般的ですが、1つずつではありませんが、質問の数値に基づいて既に行っているとします。

+0

そうですが、これらのテーブルにはデータがあまりないため、すべてのデータを取得しており、UIを提供するためにキャッシュが作成されています。しかし、これは膨大な量のデータではなく、検索するのに1秒以上かかります。これは本当に正常な動作ですか? – Abhishek

0

埋め込みエンティティを使用して複数のデータを1つのエンティティにパックしてみてください。埋め込みエンティティは真のエンティティではなく、ネストされたデータを許可するプロパティです。したがって、エンティティごとに4つのプロパティを持つ代わりに、4つのプロパティを持つ埋め込みエンティティのリストを格納するエンティティに配列プロパティを作成します。エンティティが持つことができる最大サイズは1MBなので、できるだけその1MBの限界に近づくように配列をパックしたいと思うでしょう。

これにより、実際のエンティティの数が少なくなり、全体的なフェッチ時間も短縮されると考えられます。

+0

実際には、データは非常に線形の種類であり、この場合エンティティを実際に埋め込むことはできません。しかし、私は一点を確認します:レコードの数は同じですが列の数が少ないとフェッチ時間が短くなります。 – Abhishek

+0

わかりません。エンティティごとのデータがより小さくなるので、私はそれを考えてみたいです。 –

関連する問題