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

频繁变化数据库业务如何实时推送前台?

  •  
  •   master13 · 2019-01-07 17:45:29 +08:00 · 1571 次点击
    这是一个创建于 2145 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请教各位大佬一个问题。我这个业务的数据库变化很频繁,比较频繁吧,通常几秒就会变化一次,要及时推送到前台。现在用的方法是每 1 秒查询一次数据库,如果有变化,就显示出来。

    感觉这种做法不是很专业,特别是当很多 Client 共同使用前台时,查询频率很高,数据库负载增加。

    前几天在外面吃饭,看到那种扫二维码一起点单,很多人扫了码,共同点单,有一个人点提交的话,这个“已提交”的通知会瞬间推送到所有正在使用前台点单的用户,这个是怎么实现的啊?难道也是每 1 秒查询一次吗?

    求大佬解释和推荐有没有别的专业的做法?

    7 条回复    2019-01-08 14:35:03 +08:00
    wjfz
        1
    wjfz  
       2019-01-07 17:57:36 +08:00
    WebSocket
    jmk92
        2
    jmk92  
       2019-01-08 00:37:34 +08:00 via iPhone
    架一层缓存层,数据存入读取都是走缓存,主动同步数据库里,你就算 0.1 秒查一次也无妨。
    master13
        3
    master13  
    OP
       2019-01-08 08:10:12 +08:00
    @wjfz 学习了一下,能解决部分问题。但是即使服务端用 websocket 主动向 client 推送数据,服务端仍然需要频繁查询数据库,是把频繁的 jquery 移动到了服务端来做,感觉性能并没有得到提高。
    master13
        4
    master13  
    OP
       2019-01-08 08:12:12 +08:00
    @jmk92 是主流的做法,目前我的做法是服务端每 1 秒查询一次,产生一个中间文件保存在服务端,比如叫 temp.txt 或者 result.json 之类的吧,然后客户端实际上是访问这个文件。访问文件有时候会遇到客户端浏览器缓存的问题,更新的他拿不到,很烦。

    请问“缓存层”有哪些业内惯用或者推荐的吗?
    tianyou666shen
        5
    tianyou666shen  
       2019-01-08 09:19:35 +08:00
    文件 io 很慢的 缓存层说的是内存缓存产品 redis memcache 了解下?
    master13
        6
    master13  
    OP
       2019-01-08 11:41:59 +08:00
    @tianyou666shen 学习了,感谢
    jmk92
        7
    jmk92  
       2019-01-08 14:35:03 +08:00
    @master13 比较通用的一般就是#5 楼说的这些。缓存之所以快,是因为内存查询,你用文件查询同样占用 IO,和数据库有啥区别?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5167 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 09:19 · PVG 17:19 · LAX 01:19 · JFK 04:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.