2016-11-06 12 views
3

(マイクロ)計算エンジンからGoogle Cloud Datastoreにクエリを実行しようとすると、通常、返信には800ms以上かかります。私が得た最高のものは450msで、最悪のものは3秒以上でした。Google Cloud Datastore slow(> 800ms)、計算エンジンからの簡単なクエリ付き

レイテンシははるかに低く(20-80msのように)低くなければならないという印象を受けていたので、間違っていると思います。

この

は私が(ちょうど単一のエンティティで、単純なデータストアから)照会に使用しています(Node.jsの)コードです:それは、関連するのですが、場合

const Datastore = require('@google-cloud/datastore'); 
const projectId = '<my-project-id>'; 

const datastoreClient = Datastore({ 
    projectId: projectId 
}); 

var query = datastoreClient.createQuery('Test').limit(1); 

console.time('query'); 
query.run(function (err, test) { 
    if (err) { 
    console.log(err); 
    return; 
    } 
    console.timeEnd('query'); 
}); 

わからない私のアプリ-Engineプロジェクトクエリを実行している計算エンジンと同様に、米国中部地域にあります。

UPDATE

いくつかのより多くのテストの後、私は、Googleが提供しているのNode.jsライブラリを使用しているときあなたが得るデフォルトの認証が(トークン?)、約4分後に期限切れになることが分かりました。
つまり、同じプロセスを使用してもリクエスト間で4分以上待つと、クエリ時間は> 800msに戻ります。
キーファイルを使用した認証も試みましたが、これはうまくいくようでした。次の要求はまだ高速ですが、最初の要求は半分(> 400ms)しかかかりません。

+0

タイミングを追加するリクエストを試すことはできますか?最初のAPI要求には、認証トークンのフェッチにいくらかのオーバーヘッドがあります。 – Stephen

+0

1回のコールでパフォーマンスをテストしないでください。ループで包み込み、それぞれの時間を記録してから、平均、P50、P90、P95などを見ることができます。 –

+0

あなたのコメントをありがとう! 実際、ループでクエリを実行すると、最初のクエリ対連続クエリのパフォーマンスが非常に明確に把握できます。 最初のクエリは> 800msで、後続のクエリは単純なクエリの場合は<100ms、より複雑なクエリの場合は<250msです。 私の使用例は、ページリクエスト後の単一のクエリです。最初のリクエストをスピードアップできる方法はありますか?認証され、オンデマンドでデータをフェッチする長期実行プロセスを作成する必要がありますか? – Reynaerde

答えて

1

データストアへの最初のリクエストで見られるこの待ち時間は、キャッシュがウォーミングアップされている可能性が高いためです。 Datastoreは分散アーキテクチャを使用してスケーリングを管理します。これにより、クエリを結果セットのサイズに合わせてスケーリングすることができます。より多くの同じクエリを実行することで、データストアの準備が整えばクエリが処理され、結果のスピードはより一貫します。

データストアのアクセス速度が低い場合でも同様の結果を得るには、独自のキャッシングレイヤーを設定することをお勧めします。 Google App EngineにはMemcacheが提供されており、データストアでの使用に最適化されています。 Compute Engineからリクエストを行っているので、RedisMemcachedなどの他のサードパーティのソリューションを使用できます。

関連する問題