想请教各位大佬一个问题,关于从云端获取大文件中的一部分

2023-10-20 10:33:19 +08:00
 AboPlus

​ 先描述下业务场景,业务是有提交任务给求解器进行计算,计算结果是一批 bin 文件,但是这批 bin 文件的数量可能会非常的多,对这些文件不清楚该如何进行管理,经过调研发现 HDF5 恰好适合用在此处,就想着把这批 bin 文件数据都写在 HDF5 文件中,这样一个任务的计算结果只需要一个文件便能存储下来,然后我们使用云存储是腾讯的对象存储 COS ,在将 HDF5 文件存储到云端后发现,如果只需要该文件的一部分数据而不是全部数据,也需要将该文件全部下载下来。

​ 对于这种场景,各位大哥们有没有一些什么思路,一些气象的业务场景应该和我这个场景很类似,关键点就是既需要将大量 bin 文件集中管理又在需要的时候仅获取需要的部分

1308 次点击
所在节点    程序员
11 条回复
xhatt
2023-10-20 10:44:21 +08:00
对于你描述的场景,如果你想要实现在需要时只下载文件的一部分,可以考虑使用 HTTP 分片下载的技术。

HTTP 分片下载是一种允许客户端只请求文件的部分内容的机制,这对于大文件或者只需要部分数据的情况非常有用。

在 HTTP 请求中,可以使用 Range 头部来指定需要下载的数据范围。服务器在收到这个请求后,会返回指定范围的数据。

以下是一个简单的示例:

http
Copy code
GET /path/to/file HTTP/1.1
Host: example.com
Range: bytes=0-999
上述请求表示客户端只请求文件的前 1000 字节。服务器会返回一个包含这 1000 字节的响应。

如果你使用的是某种云存储服务(比如腾讯的 COS ),它们通常会支持这种方式。你可以查看相应的文档以了解如何在请求中设置 Range 头部。

需要注意的是,服务器是否支持分片下载取决于服务器的配置和支持情况。因此,在实施之前最好先确认一下你使用的存储服务是否支持这个功能。

另外,你的应用程序也需要能够处理分片下载,这可能需要一些相应的编程工作,确保你的程序能够正确地处理和组装从服务器获取的分片数据。
AboPlus
2023-10-20 11:07:34 +08:00
@xhatt 蟹蟹大哥回复,HDF5 应该不适合使用分片下载,这个问题可能换个描述更加准确:HDF5 如何和云存储一起使用
okakuyang
2023-10-20 11:39:54 +08:00
文件不都是字节吗?只要能解析 hdf5 的文件格式,读取记录文件列表那部分字节,再解析出对应文件在整个 hdf5 文件中的字节位置字节长度,就可以把需要的 bin 文件下载下来啊。除非中间是加密的,没法解密,或者成本太高。 还要你的云存储支持分片下载。
actar
2023-10-20 13:01:56 +08:00
https://cloud.tencent.com/document/product/436/7753

查看请求头部分的 Range 字段
actar
2023-10-20 13:31:52 +08:00
审错题了,不知道你用的什么语言和库。COS 可以分片下载,可以考虑把 COS 文件的操作封装成一个 HDF5 文件操作的适配器。但是不知道你具体使用的库支不支持。
blankmiss
2023-10-20 15:47:50 +08:00
我怀疑 1 楼是 gpt 的回复
tool2d
2023-10-20 15:58:06 +08:00
用扁平化的结构的文件容器,比如没压缩的 ZIP ,可以分文件用 range 来单独下载处理。

HDF5 是层次结构文件容器,不太好单独提取某个文件。
AboPlus
2023-10-20 16:30:47 +08:00
@xhatt
@okakuyang
@actar
感谢大哥们的回复,反馈下结果:首先分片下载这个机制是没问题的,有问题的是 HDF5 里面存储数据的偏移量提取不出来,也就导致没办法准确的从远端下载下来,刚才试了下只用 HDF5 存储元数据,真正的结果数据全存储在一个 bin 文件中,发现可行,但估计还有坑,我再试试
AboPlus
2023-10-20 16:32:29 +08:00
@tool2d 是的,HDF5 这个层次结构确实不好单独提取某个文件,没压缩的 ZIP ?我调研下是什么操作哈,这个之前没接触过
xhatt
2023-10-20 16:57:16 +08:00
@blankmiss 对的 是 它 写的,我知道有 range 这东西,让 它 帮忙完善了一下。
blankmiss
2023-10-21 22:39:51 +08:00
@xhatt 别在 V2EX 发这个会被 ban

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/983702

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX