2013-01-14 81 views

回答

7

您可以使用一个Guid

string blobName = Guid.NewGuid().ToString(); 
4

除了什么Sandrino说(使用GUID具有被复制概率非常低),你可以考虑一些第三方库,其生成无冲突标识符例如:Flake ID Generator

编辑

Herve指出了非常有效的Azure Blob功能,应该考虑使用任何blob名称,即Azure存储负载平衡和Blob分区

Azure将所有Blob保留在分区服务器中。应该使用哪个分区服务器来存储特定的blob,取决于blob容器和blob文件名。不幸的是,我无法找到和描述用于blob分区的算法的文档。

有关Azure Blob体系结构的更多信息,请参见Windows Azure Storage Architecture Overview文章。

4

没有什么能够在插入时生成唯一的名称;你需要提前提出这个名字。

当选择blob的名称时,在使用任何生成某种类型的序列号(在Blob的名称的开头或结尾)的算法时要小心。 Azure存储依赖名称进行负载平衡;使用顺序值可能会在访问/写入Azure Blob时造成争用,因为它可能会阻止Azure正确地对其存储进行负载平衡。每个节点(即服务器)上可以获得60MB /秒。因此,为了确保正确的负载平衡并在多个存储节点上利用60MB /秒,您需要为您的blob使用随机名称。我通常使用Guids来避免这个问题,就像Sandrino所建议的一样。

+0

这是一个非常有效的点(+1)。顺便说一句,你有没有引用描述分区层用于在Blob存储节点上分发* blobs *的算法的文章?我认为从问题的角度来看这将是非常有益的。 – Tom

+0

不,我不知道;过去曾经有一篇关于这个事实的MS文章(没有底层细节),但我找不到它了......如果我找到了我要发布的链接。您无法控制MS使用分区进行的操作,并且可能会根据您的数据和其他租户数据的使用情况进行动态分析。所以我所做的是我将底层的访问层视为非确定性的。 –

+0

这很公平。我只找到了描述Azure存储架构的博客的链接,如下所示:http://blogs.msdn.com/b/windowsazurestorage/archive/2010/12/30/windows-azure-storage-architecture-overview.aspx – Tom