dreamweaver
V2EX  ›  问与答

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

  •  
  •   dreamweaver · Jan 26, 2019 · 6177 views
    This topic created in 2849 days ago, the information mentioned may be changed or developed.

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

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

    其实也可以不加锁。可以单独开一个表做计数器,抽奖抽到先更新计数器加 1,看更新后返回的结果,如果数量未超就记录中奖者,如果数量超了就变成未抽到。
    duzhihao
    duzhihao
    Jan 26, 2019
    23
    想起来上一次公司抽奖,妈蛋非的让提前开服务器导致提前还没到抽奖时间奖品就已经发完了。
    2kCS5c0b0ITXE5k2
    2kCS5c0b0ITXE5k2
    Jan 27, 2019
    24
    每个人排个号,随机数?
    limuyan44
    limuyan44
    Jan 27, 2019 via Android
    25
    微信不是现成的吗。。。小程序抽奖,不过上次部门抽奖几百人就进不去卡死了真是的。。。人少点完全可以用小程序
    CSGO
    CSGO
    May 24, 2019
    26
    刚刚有人访问了我的上面地址,地址 url 换了: https://xiaofu.tech/web/Xiaofutech-2018-Annual-Meeting/lucky-wheel/
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2122 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 84ms · UTC 07:47 · PVG 15:47 · LAX 23:47 · JFK 02:47
    ♥ Do have faith in what you're doing.