12

SQL Azure と Table Service の比較に関する多くの投稿や記事を読みましたが、そのほとんどは、Table Service が SQL Azure よりもスケーラブルであると述べています。

http://azurescope.cloudapp.net/BenchmarkTestCases/ベンチマークは別の画像を示しています。

私の場合。SQL Azure を使用: 多くの挿入がある 1 つのテーブル、1 日あたり約 172,000,000 (1 秒あたり 2000)。1 つのテーブルに 200 万件のレコードまたは 9999....90 億件のレコードがある場合、挿入と選択に優れたパフォーマンスを期待できますか?

Table Service の使用: いくつかのパーティションを持つ 1 つのテーブル。パーティションの数は、非常に大きくなる可能性があります。

質問 #1:テーブル サービスには、1 つのテーブルに非常に多くのパーティションを作成するための制限またはベスト プラクティスがありますか?

質問 #2:上記の SQL Azure の例のように、1 つのパーティションに大量の小さなエンティティがあります。1 つのパーティションに 200 万件のレコードまたは 9999 億件のエンティティがある場合、挿入と選択に優れたパフォーマンスを期待できますか?

シャーディングまたはパーティション ソリューションについては知っていますが、それはクラウド サービスであり、クラウドは強力ではなく、コード スキルがなくてもすべて機能しますか?

質問 #3: SQL Azure と Table Service の大量のデータをクエリするためのベンチマークを誰か教えてもらえますか?

質問 #4:私の場合により良い解決策を提案していただけないでしょうか。

4

2 に答える 2

6

簡潔な答え

  1. 多くのパーティションが Azure Tables (AZT) の問題を引き起こすことは見たことがありませんが、この量のデータはありません。
  2. パーティション内の項目が多いほど、そのパーティションでのクエリが遅くなります
  3. 申し訳ありませんが、ベンチマークはありません
  4. 下記参照

長い答え

あなたの場合、SQL Azure データベースのサイズの制限が原因で、SQL Azure が機能しないのではないかと思います。挿入する各行がインデックス付きの 1K の場合、約 300 日で 50GB の制限に達します。Microsoft が 50GB を超えるデータベースについて話しているのは事実ですが、それについての時間枠は示していません。SQL Azure には、現時点では見つけることができないスループット制限もあります (ただし、必要な量よりも少ないことは確かです)。複数の SQL Azure データベースにデータを分割することで、これを回避できる場合があります。

ただし、SQL Azure の利点は、集計クエリを実行できることです。select count(*) from customerAZT では、各顧客をロードせずにa を書くことさえできません。

AZT には、パーティションごとに 1 秒あたり 500 トランザクションの制限、およびアカウントごとに 1 秒あたり「数千」の制限もあります。

パーティション キー (PK) と行キー (RK) に何を使用するかは、データのクエリ方法に依存することがわかりました。これらの各項目に個別にアクセスする場合は、各行に独自のパーティション キーと定数行キーを指定するだけです。これは、多くのパーティションがあることを意味します。

例として、挿入していたこれらの行が注文であり、注文が顧客に属しているとします。顧客別に注文をリストすることがより一般的である場合、PK = CustomerId、RK = OrderId になります。これは、パーティション キーを照会するだけで、顧客の注文を見つけることを意味します。特定の注文を取得するには、CustomerId と OrderId を知る必要があります。顧客の注文が多ければ多いほど、特定の注文を見つけるのが遅くなります。

OrderId だけで注文にアクセスする必要がある場合は、PK = OrderId, RK = string.Empty を使用して、CustomerId を別のプロパティに配置します。AZT は PartitionKey と RowKey 以外のインデックスをサポートしていないため、クエリで PartitionKey を使用しない場合 (書き方によっては使用する場合もあります)、顧客のすべての注文を取り戻すクエリを作成することはできますが、それら) は、テーブル スキャンを引き起こします。あなたが話しているレコードの数では、それは非常に悪いでしょう.

私が遭遇したすべてのシナリオで、多くのパーティションを持っていても AZT はそれほど心配していないようです。

あまり言及されていない AZT でデータを分割する別の方法は、データを異なるテーブルに配置することです。たとえば、毎日 1 つのテーブルを作成することができます。先週のクエリを実行する場合は、7 つの異なるテーブルに対して同じクエリを実行します。クライアント側で少し作業を行う準備ができている場合は、それらを並行して実行することもできます。

于 2010-10-06T19:58:25.097 に答える
0

Azure SQL は、それだけ多くのデータを簡単に取り込むことができます。これは、私が数か月前に録画したビデオで、これを行う方法の 1 つを示すサンプル (GitHub で入手可能) を示しています。

https://www.youtube.com/watch?v=vVrqa0H_rQA

ここに完全なレポがあります

https://github.com/Azure-Samples/streaming-at-scale/tree/master/eventhubs-streamanalytics-azuresql

于 2020-09-27T17:01:40.930 に答える