Azure块Blob和页Blob之间的区别是什么?

90

最近我开始接触 Windows Azure,但我遇到了一个问题,就是在 Block BlobPage Blob 中该如何选择。目前我正在将一些文本、csv或dat文件上传到 blob 存储中,并使用我的 C# 程序进行 MapReduce 处理。我已经阅读了一篇文章,但是没有得到清晰的想法。简而言之,就是 Block Blob vs Page Blob ,希望能获得帮助。

6个回答

128
差异在msdn上有详细的文档记录,链接在 这里。简而言之:
  • 块 Blob 用于离散存储对象,例如 jpg、日志文件等,通常在本地操作系统中视为文件。最大大小为200GB4.77TB。仅支持常规(非高级)存储。
  • 页 Blob 用于随机读写存储,例如 VHD(实际上,页 Blob 是 Azure 虚拟机磁盘所使用的)。最大大小为8TB。由常规和高级存储都支持。

请注意:高级页 Blob 具有特定的大小(与可达8TB的普通页 Blob 不同)。

  • 32GB
  • 64GB
  • 128GB
  • 512GB
  • 1024GB
  • 2048GB
  • 4096GB

高级存储提供保证的 IOPS 和吞吐量,取决于所选择的页 Blob 大小(从 120 IOPS + 25MB/s @ 32GB 到 7500 IOPS + 250MB/s @ 2048GB & 4096GB)。有关 IOPS+throughput 详细信息,请参见 此处


另一个小澄清@David,我如何查看 Blob 容器中的文件?我尝试使用 Azure Explorer,但找不到在其中查看文件的方法。是的,我可以看到内容,但看不到文件。 - Kulasangar
@Kulasangar 请提出一个单独的问题,而不是作为评论,因为它与原来的问题(和答案)无关。 - David Makogon
页面 Blob 不受高级存储的限制。我知道这不一定是你的意思,但是你的答案很容易被解释为这样。 - Peter Lillevold
@DavidMakogon感谢你提供的tl;dr。我阅读了整篇文章,但没有看到任何有关blob类型可以像文件系统中的对象一样作为离散对象处理的说法,就像你所说的那样。整篇文章都在描述Azure如何管理块blob类型,这很好,但像大多数涉及Azure的事情一样,它并没有像你这样识别出简单的常见用例。 - akousmata
对于日志文件,追加 Blob 是更好的选择。 - undefined

28

David的回答指出了页面(Page)和块(Block)Blob之间的区别。但是还有追加(Append)Blob。简而言之:

  • 块(Block)Blob:用于大型对象,不使用随机读写操作,例如图片。
  • 页面(Page)Blob:优化了随机读写操作,例如VHD。
  • 追加(Append)Blob:优化了追加操作,例如日志。

进一步阅读:了解块 Blob、追加 Blob 和页面 Blob


这三个 blob 上有相同的操作吗?也就是说,“优化”意味着我可以以相同的方式与它们交互和写入,但某些写入模式会表现更好。 - AaronLS
@AaronLS 它们是不同的。您拥有具有不同功能的单独客户端(AppendBlobClient、BlockBlobClient等)。 - Martin Brandl
我的观点是,我认为用能力来描述它们会更好。说某个东西“针对追加进行了优化”与说“仅限追加”是不同的。前者意味着它们在功能上是相同的,但在不同的工作负载下具有不同的性能特征。 - AaronLS

18

块 Blob 块 Blob 被用于存储大小不超过 ~5TB(100MB 的 50,000 个块)的文本或二进制文件。块 Blob 的主要用途是存储从头到尾读取的文件,例如媒体文件或网站图像文件。它们被命名为 块 Blob,因为大于 100MB 的文件必须作为小块上传,然后合并(或提交)到最终的 Blob。

页 Blob
页 Blob 用于存储大小不超过 8TB 的随机访问文件。页面 Blob 主要用于 Azure 虚拟机(Azure VM)提供持久磁盘所使用的 VHD 的后备存储。它们被命名为 页 Blob,因为它们提供对 512 字节页面的随机读写访问。

追加 Blob
追加 Blob 由块组成,类似于块 Blob,但它们针对追加操作进行了优化。这些经常用于将来自一个或多个源的日志信息写入同一 Blob 中。例如,您可能会将所有跟踪日志写入同一追加 Blob 中,以用于在多个 VM 上运行的应用程序。单个追加 Blob 最大可达 195 GB。

参考:

了解块 Blob、附加 Blob 和页 Blob

探索 Azure 存储


13

块Blob可让您高效地上传大型Blob。块Blob由一些块组成,每个块都有一个块ID。通过写入一组块并按其块ID提交它们来创建或修改块Blob。每个块可以是不同的大小,最大为100MB(对于使用2016-05-31之前的REST版本的请求为4MB),块Blob最多可以包含50000个块。因此,块Blob的最大大小略大于4.75TB(100MB X 50000块)。对于2016-05-31之前的REST版本,块Blob的最大大小略大于195GB(4MB X 50000块)。

页Blob是一组针对随机读写操作进行优化的512字节页面。要创建页Blob,您需要初始化页面Blob并指定页面Blob将增长到的最大大小。要添加或更新页面Blob的内容,您需要按照与512字节页面边界对齐的偏移量和范围编写页面或页面。页面Blob的写入可以覆盖一个页面、一些页面或最多4MB的页面Blob。页面Blob的写入发生在原地,并立即提交到Blob。页面Blob的最大大小为1TB。

参考:https://learn.microsoft.com/en-us/rest/api/storageservices/fileservices/Understanding-Block-Blobs--Append-Blobs--and-Page-Blobs


3

在我看来,另一个答案是:

块 Blob

  • 由块列表定义
  • 主要用于存储“对象”
  • 每个 50K 块最多可达到 100 MB,总容量为 4.75 TB
  • 大多数对象存储场景:文档、图像、视频等

追加 Blob

  • 新增 Azure 数据湖功能
  • 单次操作中最多可添加 4 MB 的块
  • 使用情况显著增加:云日志、IoT 数据、分布式系统同步等

页 Blob

  • 由 512 字节页面集合优化设计,适用于随机读写操作
  • 针对页面对齐的随机读写:IaaS 磁盘、事件中心、块级备份

块 Blob 和块级存储是两个完全不同的东西,对吧?其中一个用于小型存储,另一个用于磁盘。我只是想从您这里确认一下。 - Ankush Jain

3

来自微软的消息

块 Blob 包含有助于在网络上管理大型文件的功能。使用块 Blob,您可以并行上传多个块以减少上传时间。每个块可以包括 MD5 哈希以验证传输,因此您可以跟踪上传进度并根据需要重新发送块。

何时使用

Azure 文件提供了 SMB 接口、客户端库和 REST 接口,允许从任何地方访问存储的文件。如果您想要将已经使用本机文件系统 API 在 Azure 中与其他应用程序共享数据的应用程序“搬迁”到云中,则可以使用它。

Azure Blob 提供客户端库和 REST 接口,可以在块 Blob 中存储和访问非结构化数据。

Azure Disks 提供客户端库和 REST 接口,可允许从附加的虚拟硬盘中持久性地存储和访问数据。如果您想要将使用本机文件系统 API 从持久性磁盘读取和写入数据的应用程序“搬迁”到云中,则可以使用它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接