如何限制 ASA 输出中的 blob 存储文件大小

Posted

技术标签:

【中文标题】如何限制 ASA 输出中的 blob 存储文件大小【英文标题】:How to limit blob storage file size in ASA output 【发布时间】:2017-10-26 09:26:41 【问题描述】:

我正在使用一个 Azure 解决方案,其中有一个输出到 ASA 中的 blob 存储。我在这样的文件夹树结构中获取输出文件:yyyy/mm/dd/hh(例如2017/10/26/07)。有时,在该小时过去后,blob 存储中的文件会保存在hour 文件夹中,因此文件可能非常大。有没有办法从 ASA 限制这些文件的大小?

【问题讨论】:

【参考方案1】:

目前无法限制大小,大小限制仅基于 blob 的限制。但是,如果您的路径是 yyyy/mm/dd/hh,ASA 将每小时创建一个新文件夹。请注意,这是基于 System.Timestamp 列,而不是挂钟时间。

【讨论】:

【参考方案2】:

是的,您可以使用以下长度属性限制文件大小并在现有文件大小达到限制后创建新文件。

namespace Microsoft.Azure.Management.DataLake.Store.Models 
   ...
    // Summary:
    //     Gets the number of bytes in a file.
    [JsonProperty(PropertyName = "length")]
    public long? Length  get; 
    ...
  

以下是场景示例:

场景如果文件大小超过 256MB 或 268435456 字节,则创建新文件或使用现有文件。

创建一个函数并使用该函数确定文件路径,下面是函数的示例代码sn-p。 代码片段:

public static async Task<string> GetFilePath(DataLakeStoreClient client, string path) 
   var createNewFile = false;
    ......  
            if (await client.GetFileSize(returnValue) >= 256 * 1024 * 1024)
                
                    returnValue = GetFilePath(path);
                    createNewFile = true;                       
                
    ......


public async Task<long?> GetFileSize(string filepath) 
       return (await this._client.FileSystem.GetFileStatusAsync(_connectionString.AccountName, path)).FileStatus.Length;

【讨论】:

以上代码 sn-p 使用 DataLakeStoreClient ,类似我们可以用于 CloudBlobContainer

以上是关于如何限制 ASA 输出中的 blob 存储文件大小的主要内容,如果未能解决你的问题,请参考以下文章

如何将 AppendBlob/大于 4mb 限制的文件上传到 Java 中的 Azure 存储/Blob?

如何限制或更改 Azure BLOB 容器的大小?

将 Blob 的上传大小限制到 Azure Blob 存储

使用 SQL 返回存储在 oracle blob 列中的文件的可读“文件大小”的优雅方法是啥?

如何将大文件上传到 Azure Blob 存储 (.NET Core)

Azure Blob 存储容器是不是有文件数量限制?