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

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

  •  
  •   dreamweaver · 315 天前 · 3327 次点击
    这是一个创建于 315 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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