ahdw
V2EX  ›  问与答

如何请求一个 23M 的 json 文件

  •  
  •   ahdw · Mar 13, 2019 · 2889 views
    This topic created in 2652 days ago, the information mentioned may be changed or developed.

    我写了一个小脚本,需要下载一个 23M 的 json 文件,然后在这个 json 文件里查询信息。

    问题是经常下载不全,然后出错。

    这个 json 文件不定期更新,如果保存在本地的话不确定什么时候会过期。请问各位有没有好的办法?

    13 replies    2019-03-14 01:12:06 +08:00
    ysc3839
        1
    ysc3839  
       Mar 13, 2019
    “问题是经常下载不全,然后出错。”
    使用 TCP 传输的话不应该出现这种问题。如果频繁出现的话那需要检查一下网络环境了。
    ahdw
        2
    ahdw  
    OP
       Mar 13, 2019
    @ysc3839 意思就是无论如何都要每次通过网络请求这个大文件了?
    keenkiller
        3
    keenkiller  
       Mar 13, 2019
    用 streaming
    wspsxing
        4
    wspsxing  
       Mar 13, 2019 via Android
    用 aria2 等专业一点的下载器吧,,而且 http 有 head 方法(头里面配 md5 或者更新日期之类,不变就不用更新),,你服务器配置一下就可以放在本地了
    yamedie
        5
    yamedie  
       Mar 13, 2019 via Android
    如果下载期间这个远程的 json 文件内容发生了改变,就会造成“下载不全”。

    下载 23M 到本地再查询 json 里的部分信息,是很低效的吧,如果是我,我会用 lowdb 做 json 数据库,再用 koa 开发一个查询条件 api,就很舒爽了
    GoLand
        6
    GoLand  
       Mar 13, 2019
    定期下载并更新到本地数据库里。收到一个查询请求的时候再异步下载更新一次,还能减小点误差。
    ysc3839
        7
    ysc3839  
       Mar 13, 2019
    @ahdw 如果解决了下载出错的问题,并且没有流量限制的话,每次请求是较好的解决方案了。缓存也不是不行,但是缓存的话就会有更新不及时的问题,看你选择吧。
    murmur
        8
    murmur  
       Mar 13, 2019
    23m 不全就是你网络或者配置问题 当年据说 12306 不就是直接下载了一个这么大的火车时刻表也没见挂掉
    eslizn
        9
    eslizn  
       Mar 13, 2019
    如果一定要这样做的话,那么做好一个加载的交互,配合 request range (如果服务器支持的话)来下载到本地并用 localstorage 之类的进行保存,至于过期问题,http head 一下资源的 modified 时间再由前端逻辑进行更新
    awanabe
        10
    awanabe  
       Mar 14, 2019
    可以拆解成多个小的 JSON 文件, 服务器维护每一个文件的版本号, 周期性检查是否有更新...
    有更新就更新某一个小文件即可
    MonoLogueChi
        11
    MonoLogueChi  
       Mar 14, 2019 via Android
    如果有条件的话,建议上数据库,不能上数据库的话,可以尝试一下文件校验之类的,可以检查一下本地的是否是最新的,再有就是先压缩,请求到本地再解压,文本文件的压缩率一般都不会太低
    neptuno
        12
    neptuno  
       Mar 14, 2019 via Android
    存数据库慢慢下,过几分钟下一次,替换旧的
    ahdw
        13
    ahdw  
    OP
       Mar 14, 2019
    @murmur 就是下载 12306 的那个东西……
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5306 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 111ms · UTC 07:00 · PVG 15:00 · LAX 00:00 · JFK 03:00
    ♥ Do have faith in what you're doing.