この質問はかなり幅広く、正解はありません。
具体的な質問 - Azure Table Storage で複合キーを使用できますか。はい、できます。ただし、これには、オブジェクトのプロパティを手動でシリアライズ/デシリアライズする必要があります。これは、TableEntity のReadEntityおよびWriteEntityメソッドをオーバーライドすることで実現できます。これらのメソッドをオーバーライドして、独自のカスタム シリアライゼーション/デシリアライゼーションを使用する方法については、この詳細なブログ投稿を確認してください。
あなたのより広い質問に対する私の見解をさらに議論します。
まず、なぜ 3 つの (SQL) テーブルのデータを 1 つ (Azure テーブル) に入れたいのでしょうか? Azure テーブルが 3 つあるだけです。
ファブリツィオが指摘するように、2 番目に考えたのは、どのようにレコードをクエリするかということです。Windows Azure テーブル サービスにはインデックスが1 つしかないPartitionKey
ため、それは+RowKey
プロパティ (列) です。ほとんどの場合、既知 PartitionKey
の とでデータをクエリすることが確実な場合はRowKey
、Azure テーブルが最適です。しかし、あなたの組み合わせRowKey
はParentId + WeekNumber
! つまり、レコードはこの組み合わせによって一意に識別されます! それが本当なら、あなたはさらに準備ができています。
次に、毎週レコードを削除するとします。DELETE操作は単一のエンティティに作用することを知っておく必要があります。エンティティ グループ トランザクションを使用して一度に複数のエンティティを削除できますが、バッチ操作のすべてのエンティティが同じで(a)
なければならない、バッチあたりのエンティティの最大数は 100、バッチ操作の最大サイズは 4MB という制限があります。あなたが言うように、1M のレコードがあるとします。それらを削除するには、最初に 100 ずつグループで取得し、次に 100 ずつグループで削除する必要があります。これらは、最良の場合、取得で 10,000 回の操作、削除で 10,000 回の操作です。イベントの費用が 0.002 USD しかかからない場合、REST API に対して 10,000 の操作を実行するのにかかる時間を考えてみてください。PartitionKey
(b)
(c)
たとえば、WeekNumber に固定されているエンティティを定期的に削除する必要があるため、テーブルを動的に作成し、その名前に週番号を含めることをお勧めします。したがって、次のことが達成されます。
- 情報のさらに優れた分割
- より簡単かつ詳細な情報のバックアップ/削除
- 何百万ものエンティティを削除するには、テーブルの削除という 1 つの操作だけが必要です。