Web 后台,有些数据需要每月更新(或者特定时机更新),你们是主动更新还是被动更新?具体如何实现会比较优雅? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
int64ago
V2EX    程序员

Web 后台,有些数据需要每月更新(或者特定时机更新),你们是主动更新还是被动更新?具体如何实现会比较优雅?

  •  1
     
  •   int64ago
    int64ago 2016-01-15 11:48:10 +08:00 2845 次点击
    这是一个创建于 3616 天前的主题,其中的信息可能已经有所发展或是发生改变。

    简单例子,比如用户每个月有固定次数的免费电话可打,月初的时候重新恢复到那个次数

    这个恢复的动作是自己写脚本定时任务搞?还是用户请求的时候,顺便更新了(传说中懒操作?!)

    这两种模式对程序设计来说会有一定的差异,目前遇到一些困扰,不知道主流优雅的方式是如何的?

    先谢谢了

    17 条回复    2016-01-17 11:09:24 +08:00
    abelyao
        1
    abelyao  
       2016-01-15 11:57:16 +08:00 via iPhone
    偏向 定时任务自动更新。
    感觉这是服务本身的业务逻辑,而不应该有用户行为来左右,另外从技术上说,难道用户每次登录,都要判断一次是否为本月第一次登录?
    ethego
        2
    ethego  
       2016-01-15 11:58:04 +08:00
    crontab 或者 celery 异步更新
    SourceMan
        3
    SourceMan  
       2016-01-15 12:03:10 +08:00
    crontab 跑定时任务
    int64ago
        4
    int64ago  
    OP
       2016-01-15 12:10:36 +08:00
    @abelyao 嗯,不是判断登陆,比如可以记录上次更新的月份,这次请求的如果不是上次更新的月份,则把次数加满,然后把上次月份更新为本月月份……只是举个例子,方法肯定有的

    @ethego
    @SourceMan
    定时任务我也是有些顾虑的,比如批量更新出错了怎么办?或者部分出错了,感觉可靠性很难保证,请问你们是如何解决这个问题的呢?
    cevincheung
        5
    cevincheung  
       2016-01-15 12:12:23 +08:00
    @int64ago
    登录的时候加钱加错了怎么办……
    loading
        6
    loading  
       2016-01-15 12:14:35 +08:00 via iPhone   1
    都是计划任务,关于出错~
    定时备份,重要操作前备份。


    数据在进去数据库前都是验证过的,程序都是全覆盖测试,基本不会出错。
    int64ago
        7
    int64ago  
    OP
       2016-01-15 12:15:36 +08:00 via Android
    @cevincheung 没太看懂你的描述
    abelyao
        8
    abelyao  
       2016-01-15 12:18:17 +08:00 via iPhone   1
    @int64ago 定时批量恢复这个数据,可能不了解你的业务吧,只是觉得这个操作的风险已经很低了,如果连这个都没法保证,其它业务逻辑无法想象啊…

    楼上 @cevincheung 应该也是这个意思,既然担心批量恢复会出错,那其它操作也有可能出错
    clino
        9
    clino  
       2016-01-15 12:20:50 +08:00 via Android
    ci 类软件如 jenkins buildbot
    int64ago
        10
    int64ago  
    OP
       2016-01-15 12:39:39 +08:00
    @abelyao 我倒不是担心逻辑出错,我担心的是系统抖动,导致进行的过程中出错,然后出现大面积数据畸形,关键是,这种情况出现的时候需要花大力气去定位

    考虑到这种情况,那么确实单个用户也会出错,但是无论从影响还是定位,都可能要好点……

    之所以开贴问这个问题,是因为,我遇到了性能瓶颈,所以看看大家主流的处理方式,我也大概猜到可能是定时任务,所以很想把这个里的坑一起问清楚了
    BOYPT
        11
    BOYPT  
       2016-01-15 13:07:40 +08:00
    数据库本身可以写 scheduled procedure ,不需要业务代码支持。
    oott123
        12
    oott123  
       2016-01-15 13:20:00 +08:00
    呃,为啥都偏向主动更新,只有我喜欢被动更新吗……

    个人觉得主动更新压力太集中,而且对一些很久没用过的垃圾数据去做更新也是一个很浪费的事情,所以如果我做的话基本都是被动更新的。

    当然楼主说遇到了瓶颈,可以考虑做个异步更新就是了……
    int64ago
        13
    int64ago  
    OP
       2016-01-15 13:23:48 +08:00
    madshaw
        14
    madshaw  
       2016-01-15 13:40:20 +08:00 via Android
    昨天刚看的,实现的时候翘起小拇指比较优雅
    neo2015
        15
    neo2015  
       2016-01-15 13:55:18 +08:00
    我自己用的 mysql 的定时任务,如果只是数据上的事情
    cevincheung
        16
    cevincheung  
       2016-01-16 16:02:35 +08:00
    @int64ago

    这是代码逻辑的问题。

    记录运行中 trace 信息,定时人工查看,程序记录任务开始时间,执行任务成功更新时间,执行任务不成功,后台看 trace 定位。

    数据库的事物, redis 做队列。有很多方法可以避免可能出现的潜在问题。
    SmiteChow
        17
    SmiteChow  
       2016-01-17 11:09:24 +08:00
    定时任务 celery
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5245 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 40ms UTC 06:56 PVG 14:56 LAX 22:56 JFK 01:56
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86