V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ahdw
V2EX  ›  问与答

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

  •  
  •   ahdw · 2019-03-13 22:54:45 +08:00 · 2438 次点击
    这是一个创建于 2109 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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