我想使用“经典”的日志方法将文本行写入文本文件。我没有在本地保存,而是想将数据写入blockblob。这是代码:
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(StorageConnectionString);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer share = blobClient.GetContainerReference("logStorage");
var logFile=share.GetAppendBlobReference("mylog.log");
logFile.AppendText("This is a log entry");
这是有效的,但仅在单作者场景中,因为文档明确指出AppendText():
此API应严格用于单个编写器方案,因为 API内部使用append-offset条件头来避免 重复的块在多个编写器场景中不起作用。
因此,如果我需要在多作者场景中使用该功能,我还需要使用哪种功能作为替代方案?
答案 0 :(得分:1)
@OleAlbers,正如@ TamraMyers-微软所说,以下描述来自"避免重复或延迟追加" REST API Append Block
,它是多作者场景的一种方式。
在多作者场景中,每个客户端都可以使用条件标头,但就性能而言,这可能不是最佳方法。
但参考文献也如下所述。
对于最高并发附加吞吐量,应用程序应处理其应用程序层中的冗余附加和延迟附加(例如,在附加的数据中添加时期或序列号)。
我认为简单&满足您需求的最佳方法是使用无锁解决方案(例如Dataflow library的新Async CTP)来异步执行多作者操作。
您可以尝试参考教程How to: Write Messages to and Read Messages from a Dataflow Block
来重写单作者代码以适合多作者场景。
答案 1 :(得分:0)
对于多作者场景,请调用Append Block而不是AppendText。请参阅客户端库中的AppendBlock方法。
Append Block提供原子性,但将有效负载限制为单个块的大小。