有很多小的Azure存储blob容器(每个容器都有一些blob)还是一个容器有很多blob的容器?
所以情况如下:
我有一个Web服务的多个实例将一个数据块写入Azure存储。 我需要能够将blob分组到一个容器(或一个虚拟目录),这取决于它接收的时间。 有一段时间(每天最糟糕的时候),较旧的斑点将被处理,然后被删除。
我有两个select:
选项1
我创build一个名为“Blob”的容器(例如),然后将所有博客存储到该容器中。 每个blob将使用一个目录样式名称,目录名称是它的接收时间(例如“hr0min0 / data.bin”,“hr0min0 / data2.bin”,“hr0min30 / data3.bin”,“hr1min45 / data.bin “,…,”hr23min0 / dataN.bin“等 – 每X分钟一个新目录)。 处理这些blob的事情将首先处理hr0min0 blob,然后hr0minX等等(并且在处理时仍然正在写入blob)。
选项2
我有许多容器,每个都有一个基于到达时间的名称(所以首先将是一个名为blobs_hr0min0,然后是blobs_hr0minX等的容器),容器中的所有Blob都是到达指定时间的Blob。 处理这些博客的东西将一次处理一个容器。
所以我的问题是,哪个选项更好? 选项2是否给了我更好的并行化(因为一个容器可以在不同的服务器上),或者选项1更好,因为许多容器可能会导致其他未知的问题?
我不认为这真的很重要(从可伸缩性/并行性的angular度来看),因为在Windows Azure blob存储中的分区是在blob级别完成的,而不是容器。 分散到不同容器的理由与访问控制(例如SAS)或总存储大小有关。
有关详情,请参阅此处: http : //blogs.msdn.com/b/windowsazurestorage/archive/2010/05/10/windows-azure-storage-abstractions-and-their-scalability-targets.aspx
(向下滚动到“分区”)。
引用:
Blob – 由于分区键已经下到blob名称,所以我们可以在多个服务器上负载平衡对不同blob的访问权限,以扩展对它们的访问。 这可以使容器的容量尽可能大(在存储空间限制内)。 折衷是我们不提供跨多个斑点进行primefaces事务的能力。
每个人都直接给你提供了很好的答案。 但是,如果您需要在容器中列出blob,则可能会看到多容器模型的更好性能。 我刚刚和一个在一个容器中储存大量斑点的公司谈过。 他们经常列出容器中的对象,然后针对这些blob的子集执行操作。 他们看到了一个性能问题,因为获取完整上市的时间一直在增长。
这可能不适用于你的情况,但这是考虑的事情…
从理论上讲,大量容器或更less容器的区域应该没有区别。 额外的容器可以作为额外的安全边界(例如公共匿名访问或不同的SAS签名)。 额外的容器也可以让修剪(删除一个容器与定位每个斑点)更容易一些。 由于这些原因,我倾向于使用更多的容器(而不是性能)。
理论上,性能影响不应该存在。 Blob本身(完整URL)是Windows Azure中的分区键(已经很长时间了)。 这是从分区服务器负载平衡的最小的事情。 所以,你可以(而且经常会)在同一容器中有两个不同的blob被不同的服务器提供服务。
Jeremy表示,容器数量越来越less,性能差异越来越大。 我还没有深入地探讨这些基准,足以解释为什么会出现这种情况,但是我会怀疑其他因素(如大小,testing持续时间等)来解释任何差异。
还有一个因素可以进入到这一点。 价钱!
目前操作列表和创build容器是相同的价格:0,054美元/ 10.000电话
同样的价格实际上是写blob。
所以在极端的情况下,如果你创build和删除了很多容器,你可以付出更多
- 删除是免费的
你可以在这里看到计算器: https : //azure.microsoft.com/en-us/pricing/calculator/