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

公司内部抽奖 h5, nodejs+sqlite 可行吗?

  •  
  •   dreamweaver · 2019-01-26 10:44:29 +08:00 · 4518 次点击
    这是一个创建于 1407 天前的主题,其中的信息可能已经有所发展或是发生改变。

    公司内部准备做一个抽奖 h5,大概 500 个人,有 11 个奖,有几个问题:

    1. 因为从来没做过类似的项目,nodejs 是否会对请求排队?因为奖品数量有限,在前一个人完成数据库写入之前,后面一个人肯定就不能查询,否则会出错。
    2. sqlite 是否适用于这种情况?怕锁死。
    第 1 条附言  ·  2019-01-26 16:28:05 +08:00
    不需要问为什么不用别的方法做。因为领导就要这么做,然而我不是领导。
    26 条回复    2019-05-24 15:06:16 +08:00
    boileryao
        1
    boileryao  
       2019-01-26 10:48:56 +08:00 via Android
    启动的时候把奖品全读到内存 加锁
    fairyto2
        2
    fairyto2  
       2019-01-26 11:15:19 +08:00 via iPhone
    用微博抽奖系统算了
    singerll
        3
    singerll  
       2019-01-26 11:16:50 +08:00 via Android
    excel 都够用了
    jecshcier
        4
    jecshcier  
       2019-01-26 11:21:16 +08:00 via iPhone
    楼主不是做服务端开发的吧。其实你真的纠结不如用微信抽奖最省事。。你在问数据库写入的事,所以这是跟抢红包一样的抽奖模式?那直接用 redis 就行了,sqlite 不适合这种。。
    loveCoding
        5
    loveCoding  
       2019-01-26 11:24:37 +08:00
    要什么数据库
    dreamweaver
        6
    dreamweaver  
    OP
       2019-01-26 11:42:21 +08:00
    @jecshcier 确实不是服务端开发但是老板又非要这么做。。。可以详细解释一下为啥用 redis 不用 sqlite 吗?。。。因为我确实需要记录中奖信息和奖池信息等等
    jecshcier
        7
    jecshcier  
       2019-01-26 11:57:52 +08:00 via iPhone
    @dreamweaver 如果确实如我描述的那样的像抢红包的业务逻辑的话,它是一个并发的过程,sqlite 更适合 native 端单用户的读写。使用 redis 天生适用这种高并发(虽然不高)秒杀、抢购场景(虽然你是抽奖)。不过楼主不会 redis 且更擅长 sqlite 的话,那就另当别论了了,工作量需要重新评估。
    jecshcier
        8
    jecshcier  
       2019-01-26 11:59:52 +08:00 via iPhone
    @jecshcier redis 本身就是数据库,并不妨碍中奖信息和奖池信息的记录,等活动结束直接导出就好了
    abmin521
        9
    abmin521  
       2019-01-26 12:05:05 +08:00 via Android   ❤️ 1
    没人看见 500 人 11 个奖品吗
    loveCoding
        10
    loveCoding  
       2019-01-26 12:36:45 +08:00
    @abmin521 也对,那还抽个毛
    lychnis
        11
    lychnis  
       2019-01-26 12:40:53 +08:00
    真的可以用现成的各种系统了,没必要自己开发
    AstroProfundis
        12
    AstroProfundis  
       2019-01-26 13:56:22 +08:00
    你是在抽奖还是秒杀呃?
    另外我觉得这种内部小抽奖管好随机数来源,要么用真随机数,要么伪随机算法的种子用真随机数,能服众就行了,其他技术细节并不是那么重要
    chairuosen
        13
    chairuosen  
       2019-01-26 14:29:07 +08:00
    为啥要服务端???前端抽出来截个图不得了
    JamesR
        14
    JamesR  
       2019-01-26 15:06:17 +08:00   ❤️ 1
    Excel 里 =RANDBETWEEN(1,500),当着大家面按 F9,公开,公平,公正。
    Tokin
        15
    Tokin  
       2019-01-26 15:46:08 +08:00
    emmm,我今年也是为公司做了一个抽奖程序,纯 web。
    1、把所有人员加载到 js 里,生成一个人员列表。
    2、没生成一个中将人员前把列表打乱。
    3、把抽到的人员保存到 localstorage 然后从列表中删掉。
    4、把人员列表保存到 localstorage
    好像用不到数据库啊?
    保存到 localstorage 也只是单纯的为了防止刷新浏览器结果丢失。
    bestkayle
        16
    bestkayle  
       2019-01-26 15:50:21 +08:00 via iPhone
    小程序抽奖就行
    YenvY
        17
    YenvY  
       2019-01-26 16:02:12 +08:00   ❤️ 1
    什么都不要用,抽奖时现场下载 chrome
    纯 JavaScript 写完直接贴在 console 里跑,console.log 输出,透明无黑幕
    marcfizzy
        18
    marcfizzy  
       2019-01-26 17:02:46 +08:00
    直接用 抽奖助手 小程序吧
    Tokin
        19
    Tokin  
       2019-01-26 17:27:49 +08:00
    如果非要 node+sqlite,那只能说:可行。
    不过 sqlite 做什么呢?存名单和中奖信息嘛?
    几条记录瞬间就写进去了,不需要考虑读写问题吧。
    也可能是我理解有问题嘛?我暂时想不到读写冲突问题。
    sqlite 只是不能同时写操作,但是同时读是没问题的,读和写互不影响。
    jsq2627
        20
    jsq2627  
       2019-01-26 20:11:32 +08:00
    开抽前几分钟提前跑个脚本得出中奖名单写入 sqlite,开抽后就只是读取已开奖的结果显示出来
    libook
        21
    libook  
       2019-01-26 20:33:36 +08:00 via Android
    node 是异步非阻塞机制,所以请求不会排队。通常数据库操作需要加锁。

    其实也可以不加锁。可以单独开一个表做计数器,抽奖抽到先更新计数器加 1,看更新后返回的结果,如果数量未超就记录中奖者,如果数量超了就变成未抽到。
    CSGO
        22
    CSGO  
       2019-01-26 21:51:32 +08:00
    duzhihao
        23
    duzhihao  
       2019-01-26 23:21:41 +08:00
    想起来上一次公司抽奖,妈蛋非的让提前开服务器导致提前还没到抽奖时间奖品就已经发完了。
    emeab
        24
    emeab  
       2019-01-27 03:14:44 +08:00
    每个人排个号,随机数?
    limuyan44
        25
    limuyan44  
       2019-01-27 11:45:32 +08:00 via Android
    微信不是现成的吗。。。小程序抽奖,不过上次部门抽奖几百人就进不去卡死了真是的。。。人少点完全可以用小程序
    CSGO
        26
    CSGO  
       2019-05-24 15:06:16 +08:00
    刚刚有人访问了我的上面地址,地址 url 换了: https://xiaofu.tech/web/Xiaofutech-2018-Annual-Meeting/lucky-wheel/
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2483 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 15:46 · PVG 23:46 · LAX 07:46 · JFK 10:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.