4

次のシナリオで何をお勧めしますか。

私は列としてユーザーと呼ばれる紺碧のテーブルを持っています:

  • 主キー
  • 行キー
  • タイムスタンプ
  • ファーストネーム
  • 苗字
  • Eメール
  • 電話

次に、ユーザーごとに異なるタイプのタスクがあり、それらを TaskType1 および TaskType2 と呼びましょう。

どちらのタスク タイプにも共通の列がありますが、次のようなタイプ固有の列もあります。

  • PrimaryKey (これは、1 人のユーザーに属するすべてのタスクを検索するための Users PrimaryKey と同じです)
  • 行キー
  • タイムスタンプ
  • 名前
  • 期日
  • 説明
  • 優先順位

TaskType1 には追加の列があります。

  • 見積もり完了日
  • 実現可能

TaskType2 には独自の特定の列があります。

  • 推定コスト

両方のタイプを同じテーブルに格納できることはわかっていますが、私の質問は次のとおりです。

TaskType1 と TaskType2 に異なるテーブルを使用すると、トランザクション コストにどのような影響がありますか? タスクの種類ごとに 2 つのテーブルがあり、次のようなクエリを発行する場合、次のようなクエリを発行すると推測しget me all tasks where the task Primarykey is equal to a specific user from Users table PrimaryKeyます (ユーザーは両方のタスクの種類を持つことができるため)。両方のタスクが同じテーブルにある場合、パーティション キーがユーザーのパーティション キーであるすべての行を取得するため、1 つのクエリのようになります (ページネーション トランザクション後は 1000 の制限内)。 ?

タスクを別のテーブルに保存すると、より多くのトランザクションが発生することを正しく理解しましたか.. ?

4

1 に答える 1

6

あなたの理解は完全に正しいです。タスクを 2 つの別個のテーブルに分割することは、2 つの別個のクエリ、つまり 2 つのトランザクションを意味します (ここでは、1000 を超えるエンティティを方程式から除外しましょう)。トランザクション コストは、それらを同じテーブルに保持する理由の 1 つですが、他にも理由があります。

  • それらを同じテーブルに保持することで、Azure Table Storage のスキーマレスな性質を最大限に活用できます。
  • 2 つのテーブルは 2 つのネットワーク コールを意味します。サービスは高可用性ですが、1 番目のテーブルへの呼び出しは成功するものの、2 番目のテーブルへの呼び出しは失敗するというシナリオを考慮する必要があります。そのシナリオでは、アプリケーションはどのように動作しますか? 1 番目のテーブルの結果も破棄しますか? それらを 1 つのテーブルに保持することで、このシナリオを回避できます。
  • アプリケーションに、ユーザーがタスク 1 と 2 の両方を同時にサブスクライブできるシナリオがあると仮定します。それらを同じテーブルに保持すると、Entity Group Transaction両方のエンティティ (タスク 1 用とタスク 2 用) が同じ PartitionKey (ユーザー ID) を持つため、利用できます。それらを別々のテーブルに保持すると、エンティティ グループ トランザクションを利用できなくなります。

1 つの提案として、Tasks テーブルに「TaskType」属性を設定することをお勧めします。そうすれば、タスクによるフィルタリングも簡単になります。

于 2013-08-26T18:55:37.510 に答える