想请教各位大佬一个问题,关于从云端获取大文件中的一部分 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
AboPlus
V2EX    程序员

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

 
  •   AboPlus 2023-10-20 10:33:19 +08:00 1736 次点击
    这是一个创建于 769 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    11 条回复    2023-10-21 22:39:51 +08:00
    GSE4ei987adVM5G4
        1
    GSE4ei987adVM5G4  
       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 头部。

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

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

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

    HDF5 是层次结构文件容器,不太好单独提取某个文件。
    AboPlus
        8
    AboPlus  
    OP
       2023-10-20 16:30:47 +08:00
    @xhatt
    @okakuyang
    @actar
    感谢大哥们的回复,反馈下结果:首先分片下载这个机制是没问题的,有问题的是 HDF5 里面存储数据的偏移量提取不出来,也就导致没办法准确的从远端下载下来,刚才试了下只用 HDF5 存储元数据,真正的结果数据全存储在一个 bin 文件中,发现可行,但估计还有坑,我再试试
    AboPlus
        9
    AboPlus  
    OP
       2023-10-20 16:32:29 +08:00
    @tool2d 是的,HDF5 这个层次结构确实不好单独提取某个文件,没压缩的 ZIP ?我调研下是什么操作哈,这个之前没接触过
    GSE4ei987adVM5G4
        10
    GSE4ei987adVM5G4  
       2023-10-20 16:57:16 +08:00
    @blankmiss 对的 是 它 写的,我知道有 range 这东西,让 它 帮忙完善了一下。
    blankmiss
        11
    blankmiss  
       2023-10-21 22:39:51 +08:00
    @xhatt 别在 V2EX 发这个会被 ban
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5023 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 05:43 PVG 13:43 LAX 21:43 JFK 00:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86