8

短いバージョン:パフォーマンスを桁違いに向上させるために、マルチスレッド方式で数十または数百のテーブルパーティションから読み取ることができますか?

長いバージョン:Azureテーブルストレージに数百万行を格納しているシステムに取り組んでいます。データを小さなパーティションに分割します。各パーティションには約500レコードが含まれます。これは、ユニットの1日分のデータを表します。

Azureには「合計」機能がないため、1年分のデータを取得するには、事前キャッシュを使用するか、AzureWebまたはワーカーの役割でデータを自分で合計する必要があります。

次のことを前提としています。-パーティションの読み取りが別のパーティションのパフォーマンスに影響を与えない-パーティションの読み取りには、ネットワーク速度とサーバーの取得に基づくボトルネックがあります。

次に、大量のデータ(1年、365パーティション)をその場ですばやく合計したい場合は、大規模な並列アルゴリズムを使用でき、スレッド数にほぼ完全に対応できると推測できます。たとえば、50以上のスレッドで.NET並列拡張を使用して、パフォーマンスを大幅に向上させることができます。

私たちはいくつかの実験の設定に取り組んでいますが、これが以前に行われたかどうかを確認したかったのです。.NET側は基本的にアイドル状態であり、待ち時間の長い操作を待機しているため、これはマルチスレッドに最適のようです。

4

1 に答える 1

5

特定の期間(約500 req / s)にストレージアカウントと特定のパーティションまたはストレージサーバーに対して実行できるトランザクションの数には制限があります。その意味で、並行して実行できるリクエストの数には妥当な制限があります(DoS攻撃のように見えるようになる前に)。

また、実装では、などによってクライアントに課せられる同時接続制限に注意しますSystem.Net.ServicePointManager。Azureストレージクライアントがこれらの制限の対象であるかどうかはわかりません。調整が必要な場合があります。

于 2010-10-07T03:03:06.070 に答える