V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
gaozizhong
V2EX  ›  Go 编程语言

Golang web 开发问题请教

  •  
  •   gaozizhong · 2022-11-02 15:05:47 +08:00 · 1958 次点击
    这是一个创建于 534 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有一批带有层级关联的文本文件,文件和文件之间也有依赖关系(其实就是 mib 文件)

    需要解析其中的层级关系并存入数据库,现在把每一个 mib 文件的解析打包成了一个事务

    当一次性解析多个文件时,速度会很慢,造成前端超时

    有没有什么方法可以优化一下啊

    11 条回复    2022-11-03 11:13:41 +08:00
    aladdinding
        1
    aladdinding  
       2022-11-02 15:20:52 +08:00
    异步
    gaozizhong
        2
    gaozizhong  
    OP
       2022-11-02 16:43:04 +08:00
    @aladdinding 就是并发编程呗?现在把每一个 mib 文件的解析打包成了一个事务,如果按照每个 mib 文件一个并发的话,数据库顶不住啊。我在想怎样实现把结果先返回,然后后台继续解析处理数据。
    alexsunxl
        3
    alexsunxl  
       2022-11-02 16:57:13 +08:00
    他意思是你简单加个任务管理的模块,然后把接口拆开。
    execTask
    status/:task_id
    listTask
    alexsunxl
        4
    alexsunxl  
       2022-11-02 16:58:41 +08:00
    前端触发就 execTask ,但是不管结果,只管开始,开始了就给个 taskid 返回给前端。
    这样前端肯定不会超时了。
    如果前端需要知道状态,就让前端去带着 id 查 status
    wangtian2020
        5
    wangtian2020  
       2022-11-02 17:08:43 +08:00
    告诉前端,“我”后端已经在做了。他“前端”可以稍后刷新页面查看结果 [进行中] [成功] [失败]
    mengdodo
        6
    mengdodo  
       2022-11-03 08:31:17 +08:00
    @wangtian2020 交警 12123 就是这么干的,提醒你一天后再来看违章
    gaozizhong
        7
    gaozizhong  
    OP
       2022-11-03 10:05:38 +08:00
    @alexsunxl 我也是这样想的,但是触发 execTask 时怎样让程序去后台解析 mib 文件呢? Goroutine 的话是不是有主死从随的问题。想问一下具体的 go 实现方式,想了好久也没想到好的是实现方式
    alexsunxl
        8
    alexsunxl  
       2022-11-03 10:15:21 +08:00
    @gaozizhong 最简单的,一个独立的协程(在 main 里起和 http 服务不相关联)搞个定时器去扫 mysql 的 task 状态呀。拿到了任务就分配个处理任务的协程。协程完成任务,就改一下 mysql 里 task 的状态
    alexsunxl
        9
    alexsunxl  
       2022-11-03 10:19:35 +08:00
    或者方案 2 你找个协程池库,main 里面创建好协程池。
    execTask 接口 里把 task 的执行逻辑扔进协程池里,完成了就改 task 状态,把协程归还协程池子。
    alexsunxl
        10
    alexsunxl  
       2022-11-03 10:19:56 +08:00
    异步的场景,要多考虑防止重入的情况。
    gaozizhong
        11
    gaozizhong  
    OP
       2022-11-03 11:13:41 +08:00
    @alexsunxl 多谢多谢,我去搞一下,弄完来交作业
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4583 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 10:04 · PVG 18:04 · LAX 03:04 · JFK 06:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.