2012-10-10 24 views
6

Azure Blobストレージにファイルを保存したいと思います。ここまでは順調ですね。また、ファイルに関する追加のメタデータも保存したいと思います。私はAzure SQLデータベースを使用しています(ブロブストレージ上のファイルを簡単に照会することができます)。Azure Blobストレージのトランザクションアクセス

私は店に新しいファイルを追加するとき、私はブロブとメタデータが正常に書かれたことを確認したいと思います。だから、取引のようなものを使うことは私の心にかかっています。

ブロブストレージとSQLストレージを使用してトランザクションコンテキストを作成する方法はありますか?

答えて

5

私が知る限りこれを行う組み込み関数はありません。これを自分で管理する必要があります。最も簡単なシナリオは、まずBLOBを保存してからデータベースレコードを追加することです。データベースはニーズのインデックスとして機能するため、データベースレコードが保存されるまで、Blobは基本的にコードには表示されません。

もっと複雑なオプションは、独自のコミットロジックを実装することです。たとえば、レコードのフラグを0に設定してBlobを保存し、成功した場合はデータベースのフラグを1に設定します。

メタデータをAzureテーブルに保存することもできます。あなたがたくさんのレコードを持っていれば、Azureテーブルでの検索は大幅に遅くなる可能性があります。 SQLデータベースでの検索は、ほとんどの場合、より高速になります。

どのアプローチを選択するかは目的によって異なりますが、最初の選択肢は最も簡単だと思います。

1

既存のBLOBは無害ですが、存在しないBLOBを指し示すデータベースレコードは不良です。したがって、以下のロジックでトランザクションを実装します。

作成時に、まずBLOBを追加してデータベースレコードを作成します。 blobのアップロードが失敗した場合は、ただ返します。 blobアップロードが成功したのにデータベースレコードが失敗した場合は、blobを削除して戻ります。ポイントは、BLOBアップロードが成功するまでデータベースレコードを作成したくないということです。また、データベースレコードを更新できない場合は、BLOBをクリーンアップする必要があります。ブロブのクリーンアップが失敗した場合は、参照されていないブロブを整理するために定期的に実行するサービスがあるだけです。は、より前に作成されたもので、データベースレコードのアップロードと作成の間で削除しようとしません。

削除時...データベースレコードを最初に削除します。それが失敗した場合は、ただ返します。ブロブとデータベースレコードはどちらもまだそこにあります。データベースレコードが削除された場合、ブロブはそこに残って何かを傷つけることはありませんので、すぐに削除しようとするか、後で処理するためにクリーンアップサービスに残してください。

関連する問題