2010-09-26 37 views
4

看过关于blob的本教程:channel 9后,我正在考虑使用blob容器来保存一堆tweets(存储每个tweet的json)。理想情况下,我想为当天的每个小时创建一个Blob引用,并在它们进来时向此Blob添加新的推文。问题是,方法UploadText(string)覆盖blob的现有内容,是否有一个简单的将文本追加到现有blob的方法?将文本附加到Azure中的Blob中

谢谢!

 fun (json:string) -> 
        let account = CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue("DataConnectionString")) 
        let blobs = account.CreateCloudBlobClient(); 
        let tempBlob = blobs.GetBlobReference("tweets/2010-9-26/17/201092617.txt") 
        tempBlob.Properties.ContentType <- "text/plain" 
        tempBlob.UploadText(json) 

回答

4

Page Blobs是这种需求的方式。 (VS块斑点)

您创建一个看跌的Blob操作BLOB: http://msdn.microsoft.com/en-us/library/dd179451.aspx

然后你就可以添加“页”使用将页面操作: http://msdn.microsoft.com/en-us/library/ee691975.aspx

页的斑点会修改页面(s)立即添加了一个put,更准确地模仿传统的文件系统。

块blob将期待更ridig构造,并需要一个两阶段提交/承诺建设。一旦编译完成,您必须覆盖以修正blob。块Blob是为静态(宽松定义)内容的流式传输而设计的,而不是作为读/写存储。页面Blob被添加来支持这些场景。

+0

@tishon感谢您的帮助。我将尝试页面blob – jlezard 2010-09-27 21:38:16

+0

页面和块blob之间的选择实际上是关于优化大块和顺序读取(块blob)或小块和随机访问读取和写入(页面blob)。您确实可以将块附加到块blob,并重新提交更新的块列表(您也可以删除,插入和替换)。 – 2013-02-08 03:54:24

+0

这个答案已经过时了Append Blobs的引入。改用Append Blobs。 – Tobias 2018-02-21 19:02:54

1

您可以尝试通过CloudBlockBlob.DownloadBlockList()方法得到承诺块的列表,然后通过CloudBlockBlob.PutBlock()追加新的内容。

6

Azure现在支持Append Blobs。当你创建一个新的blob时,你必须将它定义为一个追加块。您不能附加到现有的块blob。

这里有一些简单的代码,你可以使用。

附加:

CloudAppendBlob appendBlob = container.GetAppendBlobReference("myblob.txt") 
appendBlob.AppendText("new line"); 

阅读:

appendBlob.DownloadText() 

Technet contains a good tutorial关于这个问题的。此外official Azure documentation现在包括使用Append Blob的帮助。

+1

在“AppendText()”之前调用“appendBlob.CreateOrReplace()”似乎有必要“ – 2016-02-04 16:01:17

+0

AppendBlock API是否暴露给Azure Powershell? – 2016-06-07 20:06:48