XML ファイルを BLOB ストレージに保存しており、それらを更新する (および/またはいくつかの要素を追加する) 最も効率的な方法を見つけようとしています。WebRole で、私はこれを思いつきました:
using (MemoryStream ms = new MemoryStream())
{
var blob = container.GetBlobReference("file.xml");
blob.DownloadToStream(msOriginal);
XDocument xDoc= XDocument.Load(ms);
// Do some updates/inserts using LINQ to XML.
blob.Delete();//Details about this later on.
using(MemoryStream msNew = new MemoryStream())
{
xDoc.Save(msNew);
msNew.Seek(0,SeekOrigin.Begin);
blob.UploadFromStream(msNew);
}
}
効率を考慮して、これらのパラメーターを検討しています。
- BLOBトランザクション。
- 帯域幅。(コードはデータセンターで実行されるため、カウントされているかどうかはわかりません)
- インスタンスのメモリ消費。
言及すべきいくつかのこと:
私の xml ファイルは約 150 ~ 200 KB です。
XDocument がファイル全体をメモリにロードし、ストリーム ( XmlWriter および XmlReader ) で作業することでこれを解決できるという事実を認識しています。しかし、これにはBlobStreamを使用する必要があり、トランザクションの効率が低下する可能性があると思います(私は思います)。
blob.Delete() については、それがないと、ブロブ ストレージにアップロードされた xml の末尾にいくつかの終了タグが欠落しているようです。これは、古いデータとの衝突が原因であると想定しました。ここでは完全に間違っている可能性がありますが、削除を使用すると解決しました(ただし、トランザクションが1つ増えます)。
私が提供したコードは良い習慣ですか、それとも私が言及したパラメータを考慮してより効率的な方法が存在するのでしょうか?