2

Azure SQL テーブルの一部をテーブル ストレージに移動したいと考えています。私が理解している限り、すべてを同じテーブルに保存し、PartitionKey を使用してそれらを分離し、Rowkey を使用して各パーティション内で一意に保つことができます。これで、複合キーを持つテーブルができました。

  • ParentId: (一意の識別子)
  • ReportTime: (日時)

また、RowKeys は文字列でなければならないことも理解しています。これらを 1 つの文字列に結合する必要がありますか? または、他の方法で複数のキーを組み合わせることができますか? おそらく新しいキーを作成する必要がありますか?

どんな助けでも大歓迎です。

アップデート

私の考えは、いくつか (今のところ 3 つ) のデータベース テーブルからデータを配置し、それらをパーティション キーで区切って同じストレージ テーブルに配置することです。

ParentId と WeekNumber (別の列) を使用してクエリを実行します。このテーブルには、データベースから毎週削除される約 100 万行があります。私の他の2つのテーブルには、約600万と350万があります

4

2 に答える 2

3

この質問はかなり幅広く、正解はありません。

具体的な質問 - Azure Table Storage で複合キーを使用できますか。はい、できます。ただし、これには、オブジェクトのプロパティを手動でシリアライズ/デシリアライズする必要があります。これは、TableEntity のReadEntityおよびWriteEntityメソッドをオーバーライドすることで実現できます。これらのメソッドをオーバーライドして、独自のカスタム シリアライゼーション/デシリアライゼーションを使用する方法については、この詳細なブログ投稿を確認してください。

あなたのより広い質問に対する私の見解をさらに議論します。

まず、なぜ 3 つの (SQL) テーブルのデータを 1 つ (Azure テーブル) に入れたいのでしょうか? Azure テーブルが 3 つあるだけです。

ファブリツィオが指摘するように、2 番目に考えたのは、どのようにレコードをクエリするかということです。Windows Azure テーブル サービスにはインデックスが1 つしかないPartitionKeyため、それは+RowKeyプロパティ (列) です。ほとんどの場合、既知 PartitionKeyの とでデータをクエリすることが確実な場合はRowKey、Azure テーブルが最適です。しかし、あなたの組み合わせRowKeyParentId + WeekNumber! つまり、レコードはこの組み合わせによって一意に識別されます! それが本当なら、あなたはさらに準備ができています。

次に、毎週レコードを削除するとします。DELETE操作は単一のエンティティに作用することを知っておく必要があります。エンティティ グループ トランザクションを使用して一度に複数のエンティティを削除できますが、バッチ操作のすべてのエンティティが同じで(a)なければならない、バッチあたりのエンティティの最大数は 100、バッチ操作の最大サイズは 4MB という制限があります。あなたが言うように、1M のレコードがあるとします。それらを削除するには、最初に 100 ずつグループで取得し、次に 100 ずつグループで削除する必要があります。これらは、最良の場合、取得で 10,000 回の操作、削除で 10,000 回の操作です。イベントの費用が 0.002 USD しかかからない場合、REST API に対して 10,000 の操作を実行するのにかかる時間を考えてみてください。PartitionKey(b)(c)

たとえば、WeekNumber に固定されているエンティティを定期的に削除する必要があるため、テーブルを動的に作成し、その名前に週番号を含めることをお勧めします。したがって、次のことが達成されます。

  • 情報のさらに優れた分割
  • より簡単かつ詳細な情報のバックアップ/削除
  • 何百万ものエンティティを削除するには、テーブルの削除という 1 つの操作だけが必要です。
于 2013-06-04T11:05:08.917 に答える
1

あなたの問題に対する唯一の解決策はありません。はい、ParentID を PartitionKey として、ReportTime を Rowkey として使用できます (または割り当てを逆にします)。しかし、主な 2 つの質問は次のとおりです。どのような条件で、どのようにデータをクエリしますか? また、いくつのデータを保存しますか? 1000、100万アイテム、10億アイテム?ストレージの合計使用量は重要です。ただし、ストレージに対して生成するトランザクションの数を考慮することも非常に重要です。

于 2013-06-04T09:34:24.390 に答える