【发布时间】:2017-12-13 19:17:34
【问题描述】:
我正在开发 Azure。我有一个要读入内存的 10G 文件。所有这些都是制表符分隔或带有一些分隔符的 .dat 文件。我可以灵活地在旅途中创建一个计算环境来读取和处理这些文件。如何找出最佳设置,以便我可以在
【问题讨论】:
我正在开发 Azure。我有一个要读入内存的 10G 文件。所有这些都是制表符分隔或带有一些分隔符的 .dat 文件。我可以灵活地在旅途中创建一个计算环境来读取和处理这些文件。如何找出最佳设置,以便我可以在
【问题讨论】:
我的建议是你可以把你的10G文件放到Azure Blob Storage。
从 Azure Blob storage limits document 开始,单个 blob 的吞吐量高达每秒 60 MiB 或高达每秒 500 个请求。
然后您可以从 Azure Blob 存储下载文件并将其读入内存。
10240M / 60M/s = 170.67s/60= 2.84 min
当然,以上限制只是理想情况,实际情况还受网络环境等因素影响。
因此,您可以通过两种方式提高性能,以便在不到 5 分钟的时间内满足您的要求。
1.将一个blob分成几个部分,按字节顺序下载。
您可以在Get Blob Request Headers 中使用Range 或x-ms-range 仅返回指定范围内的blob 字节。
例如将10G的blob文件拆分为100个请求,单位时间内发送100个请求。然后下载到本地文件中进行后续处理。请确保在正确的位置写入字节。但这需要系统有10G的内存空间供其使用。
2.在下载满足配额的每个容量时,同时读入内存。
例如,一个blob被分成100个请求,每单位时间发送5个请求。按顺序跑20次。每 5 个请求写入内存,随后 5 个请求将同时发送。这样,系统只分配了大约500M的内存空间。
鉴于网络不稳定导致requsts中断需要在请求字节范围内重写,建议您将文件分成更多部分。
此外,Azure 服务器可能是更好的选择,因为本地测试可能无法达到理想状态。
希望对你有帮助。
【讨论】: