Tengo archivos XML almacenados en el almacenamiento BLOB, y estoy tratando de averiguar cuál es la forma más eficiente de actualizarlos (y/o agregar algunos elementos a ellos). En una WebRole, se me ocurrió esto:Azure - Actualización de un archivo xml existente en el almacenamiento BLOB
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);
}
}
Estoy mirando estos parámetros teniendo en cuenta la eficiencia:
- BLOB Transacciones.
- Ancho de banda. (No estoy seguro si se cuenta, porque el código se ejecuta en el centro de datos)
- Memoria consumo en la instancia.
Algunas cosas que mencionar:
Mis archivos XML son alrededor de 150-200 KB.
Soy consciente del hecho de que XDocument carga todo el archivo en la memoria , y trabajando en arroyos (XmlWriter y XmlReader) podrían solucionar esto. Pero supongo que esto requerirá trabajar con BlobStream , lo que podría llevar a una transacción menos eficiente (creo).
Acerca de blob.Delete(), sin él, el xml cargado en el almacenamiento de blobs parece que le faltan algunas etiquetas de cierre al final. Supuse esto es causado por una colisión con los datos anteriores. Podría ser completamente incorrecto aquí, pero usando el borrado lo resolvió (aunque le costó una transacción más ).
es el código que se proporciona una buena práctica o tal vez de una manera más eficiente existe teniendo en cuenta los parámetros que he mencionado?
Los documentos cambian con frecuencia. En realidad muy a menudo. Potencialmente podrían cambiarse muchas veces en, digamos, un minuto. –
¿Alguna idea sobre cómo mejorar el rendimiento? –