1

私は現在、トランザクション コストを削減するために、エンティティを 100 のバッチで Azure テーブル サービスに挿入する方法を書いています。

挿入されたエンティティは不変です。つまり、PartitionKey と RowKey が 2 つのエンティティ オブジェクト間で同一である場合、他のすべてのプロパティも同一であることを意味します。したがって、挿入後、エンティティは同じままであるため、このテーブルを更新する必要はありません。

私が直面している問題は、このバッチ内で、以前に挿入されたエンティティがないことを 100% 確信できないことです。したがって、(AddObject と SaveChanges を使用して) 通常どおりエンティティを挿入するだけでは、エンティティが既に存在するため、エンティティを追加できないというエラーでトランザクションが失敗する可能性があります。トランザクションはアトミックであるため、これはエンティティが追加されないことを意味します。

コストがかかりすぎるため、トランザクション内の各エンティティの存在を確認することはできません (エンティティごとに 1 つのクエリのコストがかかりすぎ、OR を使用した 1 つのクエリではテーブル全体のテーブル スキャンが発生します)。したがって、オブジェクトが存在しない場合はオブジェクトを追加し、存在する場合は無視するか更新する方法が必要です(エンティティは不変であるため、無視または更新は同じです)。

Azure Table Services でこれを実現するにはどうすればよいですか?

4

1 に答える 1

2

この記事によると、エンティティが既に存在する場合、エンティティを「アップサート」する方法は現在ありません。現在の推奨事項は、複数のワーカー ロールと各エンティティの存在をチェックする複数のスレッドを使用して要求を処理することです。

于 2010-07-23T14:19:31.677 に答える