【问题标题】:Azure Blob Storage - What exactly does "Write Operations" mean?Azure Blob 存储 - “写操作”到底是什么意思?
【发布时间】:2020-04-11 19:27:48
【问题描述】:

我使用Azure Pricing Calculator 估算文件的存储成本(更具体地说,SQL 备份)。

我目前选择Block Blob StorageBlob Storage 帐户类型。

定价计算器中有一个部分显示Write Operations 的成本并描述了哪些 API 调用是 Write Ops:

The following API calls are considered Write Operations: PutBlob, PutBlock, PutBlockList, AppendBlock, SnapshotBlob, CopyBlob and SetBlobTier (when it moves a Blob from Hot to Cool, Cool to Archive or Hot to Archive).

我查看了 PutBlobPutBlock 的文档,但两者似乎都没有在任何地方提到“文件”(除了提到文件名的 PubBlob)。

PutBlob 描述说:

The Put Blob operation creates a new block, page, or append blob, or updates the content of an existing block blob.

PutBlock 描述说:

The Put Block operation creates a new block to be committed as part of a blob.

是每个文件 1 个块还是一个文件多个块?

这 2 个 Put 命令是用来上传文件的吗?

写操作是否实际上意味着每个文件 1 次操作? 例如,如果我有 100 个文件,那是 100 次写操作吗? 或者1个写操作可以在一个操作中写入多个文件?

【问题讨论】:

    标签: azure azure-storage azure-blob-storage


    【解决方案1】:

    让我试着用几个场景来解释它。考虑到您使用的是块 blob,我将仅解释如何使用它们。

    1. 上传 1 MB 文件:假设您有一个 1 MB 的本地文件,您希望将其保存为块 blob。考虑到文件比较小,可以使用Put Blob操作将该文件上传到blob存储中。由于您只调用了一次此操作,因此您将执行一次写入操作。
    2. 上传 1 GB 文件:现在假设您有一个 1 GB 的本地文件,您希望将其保存为块 blob。考虑到文件很大,您决定将文件逻辑拆分为 1 MB 块(即,您将 1 GB 本地文件逻辑拆分为 1024 个块)。顺便说一句,这些块也称为块。现在您使用Put Block 操作上传这些块中的每一个,然后最后使用Put Block List 操作将这些块拼接在一起以创建您的blob。由于您调用了 1024 个 put 块操作(每个块一个),然后是 1 个 put 块列表操作,因此您将执行 1025 个写入操作 (1024 + 1)。

    现在回答您的具体问题:

    是每个文件 1 个块还是一个文件多个块?

    这取决于您是使用Put Blob 操作还是Put Block 操作来上传文件。在上面的场景 1 中,每个文件(或 blob)只有 1 个块,因为您使用了 put blob 操作,但在场景 2 中,每个文件(或 blob)只有 1024 个块,因为您使用了 put 块操作。

    这 2 个 Put 命令是用来上传文件的吗?

    是的。再次根据文件大小,您可以决定使用 put blob 或 put block/put block list 操作来上传文件。 put blob 操作可以上传的文件的最大大小为 100 MB。这意味着如果文件大小大于 100 MB,那么您必须使用 put block/put block list 操作来上传文件。但是,如果文件大小小于 100 MB,则可以使用 put blob 或 put block/put block list 操作。

    写操作是否实际上意味着每个文件 1 次操作?为了 例如,如果我有 100 个文件,那是 100 次写入操作吗?

    至少,是的。如果这 100 个文件中的每一个都是使用 put blob 操作上传的,那么这将相当于 100 次写入操作。

    或者1个写操作可以在一个操作中写入多个文件吗?

    不,这是不可能的。

    【讨论】:

    • 在使用 Put Block 之前,用户是否必须对大于 100 MB 的文件进行拆分,还是 Put Block 会为您拆分?
    • 它必须由用户完成,因为用户决定了块的大小(可能是从 1 字节到 100MB 的任何地方)。
    • 任何文档或博客,其中包含有关如何拆分文件以供Put Block 上传的示例语法?我在 Put Block 文档页面上没有看到任何明显的(对我而言)。
    • 我从某人那里发现并听说AzCopy 模块为用户抽象并处理将文件拆分为块,因此用户不必考虑这一点。所以这可能是我用例的解决方案。 docs.microsoft.com/en-us/azure/storage/common/…
    【解决方案2】:

    操作处于 REST 级别。因此,对于正在写入的给定 blob,您可能会看到给定 blob 的多个操作,特别是如果其总大小超过单个 Put Block/Page 操作的最大负载(一个块为 4MB 或 100MB,一个块为 4MB页)。

    对于块 blob,在所有 Put Block 调用之后,有一个后续的 Put Block List 调用,从而导致另一个计量操作。

    附加 blob 也有类似的注意事项。

    【讨论】:

    • 感谢您澄清我提供的答案。我认为这是单个操作的原因是由于我编写的一个应用程序消耗了事件网格事件。我订阅了写操作的事件,并且只通过我配置的 webhook 接收到一个事件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    • 2017-07-20
    • 2014-09-23
    • 2014-07-25
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多