質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Azure

Azureは、マイクロソフトのクラウド プラットフォームで、旧称は Windows Azureです。PaaSとIaaSを組み合わせることで、 コンピューティング・ストレージ・データ・ネットワーキング・アプリケーションなど多くの機能を持ちます。

Q&A

解決済

1回答

1947閲覧

azure table storageでバッチ処理で複数のエンティティを挿入する操作は1トランザクションとしてカウントされるのですか?

abea

総合スコア32

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Azure

Azureは、マイクロソフトのクラウド プラットフォームで、旧称は Windows Azureです。PaaSとIaaSを組み合わせることで、 コンピューティング・ストレージ・データ・ネットワーキング・アプリケーションなど多くの機能を持ちます。

0グッド

1クリップ

投稿2020/09/15 13:42

azure table storageではトランザクションというものがあり、1つのストレージアカウントにつき毎秒20,000トランザクションが上限のようです。
ここで、トランザクションというのはデータベースへの操作という意味で使われているようなのですが、例えば以下のような処理でバッチで複数のエンティティを挿入する場合にも1トランザクションとしてカウントされるのでしょうか?

Python

1from azure.cosmosdb.table.tablebatch import TableBatch 2batch = TableBatch() 3task004 = {'PartitionKey': 'tasksSeattle', 'RowKey': '004', 4 'description': 'Go grocery shopping', 'priority': 400} 5task005 = {'PartitionKey': 'tasksSeattle', 'RowKey': '005', 6 'description': 'Clean the bathroom', 'priority': 100} 7batch.insert_entity(task004) 8batch.insert_entity(task005) 9table_service.commit_batch('tasktable', batch)

これが1トランザクションとしてカウントされるのならば1秒に追加できるエンティティの上限は
バッチ処理できる上限(100) x トランザクションの条件(20,000) の2,000,000エンティティということになるのですか?
教えてくださると助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

調べて見ました。

ドキュメントから読み取れるのは以下でした。

  • 1ストレージアカウントが処理できる最大トランザクション数は20,000です。
  • 1テーブルパーティションが処理できる最大エンティティは2,000です。
  • バッチ処理(エンティティ グループ トランザクション(EGT))は1回のトランザクションです。
  • 1回のEGTで100操作まで可能です。

操作とエンティティは同じような概念であると思いました。
なので1操作=1エンティティ操作みたいな感じだと思います。
Azureの他のサービスを見ていると、やろうとしていることの制限の、いずれか低いひっかかったものが制限になることが多いです。
(ストレージアカウントで20,000回操作が可能でも、テーブルへの操作は2,000回が最大なので、20,000回操作することはできず、2,000回が制限値)
abeaさんがやろうとしているのは1テーブルに対する処理のように見えますので、最大で2,000エンティティ操作可能と思います。
テーブルを分ければ20,000トランザクションを使い切れると思います。
以前調べた時に、テーブルストレージの処理能力以上必要な場合は、CosmosDBを使うことというのが書いてあったと思うので、処理速度が必要な場合はCosmosDBにした方が良いのかもしれません。(すごく高くなりますが。)

以下、参照したドキュメントと文面

バッチ処理

Azure Storage では、バッチ トランザクションがエンティティ グループ トランザクションと呼ばれています。 エンティティ グループ トランザクションに含まれるすべての操作は、単一テーブル内の 1 つのパーティションを対象としている必要があります。 可能な場合は、エンティティ グループ トランザクションを使用して一括での挿入、更新、削除を実行してください。 エンティティ グループ トランザクションを使用することにより、クライアント アプリケーションとサーバーの間のラウンド トリップ数が減少し、課金対象のトランザクション数も少なくなります (1 つのエンティティ グループ トランザクションは課金対象の 1 回のトランザクションとしてカウントされ、最大 100 回のストレージ操作が含まれます)。さらに、アトミックな更新 (1 回のエンティティ グループ トランザクションですべての操作が成功するか、すべて失敗するかのいずれかになるような更新) も可能になります。 モバイル デバイスなどの待ち時間が長い環境では、エンティティ グループ トランザクションを使用することで大きなメリットが得られます。

バッチ処理は「エンティティ グループ トランザクション(EGT)」と呼ばれる
EGTは100エンティティ含めることができる。
EGTは100エンティティ操作しても1トランザクションである。
単一テーブル内の1つのパーティションを対象としている必要がある。

エンティティ グループ トランザクションのサイズ

トランザクションには最大で 100 個のエンティティを含めることができ、ペイロードは 4 MiB 未満にする必要があります。 エンティティ グループのトランザクションには、エンティティへの更新を 1 回だけ含めることができます。

ストレージ アカウントあたりの最大要求レート
毎秒 20,000 トランザクション (エンティティ サイズは 1 KiB を想定)
1 つのテーブル パーティションのターゲット スループット (1 KiB のエンティティ)
毎秒最大 2,000 エンティティ

EGTは最大4MiBである。
処理能力は以下の通り

  • ストレージアカウントは最大で毎秒20,000トランザクション(エンティティ最大1kiB)
  • テーブルパーティションは最大で2,000エンティティ(1kiB)

1 秒あたりのエンティティ (ストレージ アカウント)

テーブルに対するアクセスのスケーラビリティ限界は、1 アカウントにつき 1 秒あたり最大 20,000 エンティティ (各 1 KB) です。 一般に、挿入、更新、削除、スキャンされたエンティティがそれぞれ、このターゲットに対してカウントされます。 したがって、100 エンティティを含むバッチ挿入は 100 エンティティとカウントされます。 1 回のクエリで 1,000 エンティティをスキャンし、5 つが返された場合のカウントは、1,000 エンティティです。

1 秒あたりのエンティティ (パーティション)

単一パーティション内のテーブルに対するアクセスのスケーラビリティ ターゲットは、1 秒あたり 2,000 エンティティ (各 1 KB) です。カウント方法は前のセクションと同じです。

エンティティグループトランザクションの要件

エンティティ グループ トランザクションは、次の要件を満たしている必要があります。

トランザクションに含まれる操作の対象となるすべてのエンティティが、同じ PartitionKey 値を持っている必要があります。 エンティティはトランザクション内に 1 回だけ出現でき、それに対して 1 つの操作しか実行できません。 トランザクションには最大で100のエンティティを含めることができ、合計ペイロードのサイズは 4 MiB 以下にする必要があります。 すべてのエンティティには、「 Table Service データモデルについて」で説明されている制限が適用されます。

1 秒あたりのエンティティ (パーティション)

単一パーティション内のテーブルに対するアクセスのスケーラビリティ ターゲットは、1 秒あたり 2,000 エンティティ (各 1 KB) です。カウント方法は前のセクションと同じです。

投稿2020/09/16 02:34

FiroProchainezo

総合スコア2401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問