master13
V2EX  ›  问与答

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

  •  
  •   master13 · Jan 7, 2019 · 1884 views
    This topic created in 2712 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

    请问“缓存层”有哪些业内惯用或者推荐的吗?
    tianyou666shen
        5
    tianyou666shen  
       Jan 8, 2019
    文件 io 很慢的 缓存层说的是内存缓存产品 redis memcache 了解下?
    master13
        6
    master13  
    OP
       Jan 8, 2019
    @tianyou666shen 学习了,感谢
    jmk92
        7
    jmk92  
       Jan 8, 2019
    @master13 比较通用的一般就是#5 楼说的这些。缓存之所以快,是因为内存查询,你用文件查询同样占用 IO,和数据库有啥区别?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3498 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 10:36 · PVG 18:36 · LAX 03:36 · JFK 06:36
    ♥ Do have faith in what you're doing.