先描述下业务场景,业务是有提交任务给求解器进行计算,计算结果是一批 bin 文件,但是这批 bin 文件的数量可能会非常的多,对这些文件不清楚该如何进行管理,经过调研发现 HDF5 恰好适合用在此处,就想着把这批 bin 文件数据都写在 HDF5 文件中,这样一个任务的计算结果只需要一个文件便能存储下来,然后我们使用云存储是腾讯的对象存储 COS ,在将 HDF5 文件存储到云端后发现,如果只需要该文件的一部分数据而不是全部数据,也需要将该文件全部下载下来。
对于这种场景,各位大哥们有没有一些什么思路,一些气象的业务场景应该和我这个场景很类似,关键点就是既需要将大量 bin 文件集中管理又在需要的时候仅获取需要的部分
1
xhatt 2023-10-20 10:44:21 +08:00 1
对于你描述的场景,如果你想要实现在需要时只下载文件的一部分,可以考虑使用 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 头部。 需要注意的是,服务器是否支持分片下载取决于服务器的配置和支持情况。因此,在实施之前最好先确认一下你使用的存储服务是否支持这个功能。 另外,你的应用程序也需要能够处理分片下载,这可能需要一些相应的编程工作,确保你的程序能够正确地处理和组装从服务器获取的分片数据。 |
2
AboPlus OP @xhatt 蟹蟹大哥回复,HDF5 应该不适合使用分片下载,这个问题可能换个描述更加准确:HDF5 如何和云存储一起使用
|
3
okakuyang 2023-10-20 11:39:54 +08:00 via iPhone 1
文件不都是字节吗?只要能解析 hdf5 的文件格式,读取记录文件列表那部分字节,再解析出对应文件在整个 hdf5 文件中的字节位置字节长度,就可以把需要的 bin 文件下载下来啊。除非中间是加密的,没法解密,或者成本太高。 还要你的云存储支持分片下载。
|
4
actar 2023-10-20 13:01:56 +08:00 1
|
5
actar 2023-10-20 13:31:52 +08:00
审错题了,不知道你用的什么语言和库。COS 可以分片下载,可以考虑把 COS 文件的操作封装成一个 HDF5 文件操作的适配器。但是不知道你具体使用的库支不支持。
|
6
blankmiss 2023-10-20 15:47:50 +08:00
我怀疑 1 楼是 gpt 的回复
|
7
tool2d 2023-10-20 15:58:06 +08:00 1
用扁平化的结构的文件容器,比如没压缩的 ZIP ,可以分文件用 range 来单独下载处理。
HDF5 是层次结构文件容器,不太好单独提取某个文件。 |
8
AboPlus OP |