2017-10-24 33 views
0

Google Cloud Bigtableの開発インスタンスをPythonクライアントgoogle-cloud-happybaseパッケージとともに使用しています。Google Cloud BigTableのスキャン速度

開発目的の場合: - 私のテーブルは56.5k行に18列あります。

-Myテーブルは、各行の要素の

・平均サイズの含有量が9.5バイトである1列ファミリーを有します。

行×キーは-The行キーが釣り合う平均〜35バイト

です。

テーブルにscan()関数を使用すると、各行キーの内容を取得するために使用できるジェネレータが得られます。私は発電機から内容を読み取るたびに、私は、例えば一貫性のタイミングていません。

samp = table.scan(columns = ['sample_family:ContactId']) 
for i in range(56547): 
    start_time = timeit.default_timer() 
    samp.next() 
    elapsed = timeit.default_timer() - start_time 
    append_list.append(elapsed) 

(次を呼び出すため-The期間の中央値)を4.05e-06秒

-The最大時間は、 next()を呼び出すには0.140秒かかるいくつかの呼び出しで.404秒です。

- 外れ値のため、ジェネレータのすべての要素のnext()を呼び出す合計時間は理想的には(4.05e-06)* 56,547〜0.29秒です正常に配布されました。

明らかに、パフォーマンスを捨てるいくつかの異常値があります。

それはここで見つけるメトリックと一致していないとして、私の質問は、なぜ私は、パフォーマンスのこのタイプを見ていている

https://cloud.google.com/bigtable/docs/performance

私の考え があるワークロードが大幅未満< 300ギガバイトであることから、Bigtableのは可能性があることを小さなセットのパフォーマンスを最適化するデータのバランスを取ることはできません。

また、私の開発インスタンスが17.1MBの1ノードを使用していても、これは問題ではないと思います。

- 私は、誰かが遭遇した問題や問題を洞察し、状況を改善するための可能なステップを教えてくれるのだろうかと思っていました。

答えて

0

Cloud BigtableのRead APIはストリーミングAPIです。ストリーム内の各応答は一連の行です。場合によっては、次の応答を待つ必要がありますが、ほとんどの場合、既にメモリー内にある行が取得されます。ここでは、サーバー側がレスポンスアップバッチであるため、最初の応答は常に、遅くなります

  • 考慮すべきいくつかの追加のものがあります。

  • APIは行を順番に読み取ります。要求を並列化することで、パフォーマンスが向上します。 Javaでは、一連のスキャンにどのスタート/ストップキーを使用すべきかを知るための領域を取得します。残念ながら、Table.region()は現在Pythonでは使用できません。そのため、私はraised a bugを修正しています。

  • 私はCloud Bigtable Javaクライアントの著者です。追加の応答をプリフェッチするためにいくつかのパフォーマンスの最適化を追加しました。Pythonクライアントの速度とJavaクライアントの速度を比較する必要があります。 Javaに慣れている場合は、そのクライアントと同じテストを行い、パフォーマンスを比較することを検討してください。

これが役立ちます。

関連する問題