关于简单数据频繁读写的数据库选择?

MR00009 2015-11-26 09:51:27
像最近很流行的一元夺宝类网站,比如一件商品5000元,则该商品有10000001-10005000共5000个8位号码。
用户购买1000元,则在该范围内随机生成1000个不重复号码。


我的设计逻辑是,创建一张号码池表,三个字段:商品ID、号码、状态(0=表示可取,1=表示已被取走)
用户购买后,随机从号码池取出号码,并将这些号码的状态改成1。

不知道是否有更好的方式取号?

像这种使用MSSQL够用吗?是否会有瓶颈?
使用MongoDB等是否可行,数据准确性和稳定性能不能和MSSQL一样。
...全文
895 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 7 楼 xdashewan 的回复:
[quote=引用 6 楼 xgp0009 的回复:] 那有没有什么锁,可以在并发时,尽量避免不同用户取到同一个号码?
如果你按事先打乱来取码,那么你可以这么做,首先你码表需要一列顺序数字的id,如果是主键那最好,然后你建一张单独的取值表,里面只有1行1列,保存下一个能取的码表的id(注意是id而不是码)。这样用户取得时候只需要锁住这张表,取id,并把id+1就完成了取id,后续的去码表取码操作什么的都可以不用锁表。这样做好处是最小规模的锁表,而且表十分简单,读写操作均极快,避免锁住数据量巨大的码表。[/quote] 学到了,3Q
LongRui888 2015-11-26
  • 打赏
  • 举报
回复
数据量在100w,应该没什么问题,而且你是每次只是对少量数据进行update。
xdashewan 2015-11-26
  • 打赏
  • 举报
回复
引用 6 楼 xgp0009 的回复:
那有没有什么锁,可以在并发时,尽量避免不同用户取到同一个号码?
如果你按事先打乱来取码,那么你可以这么做,首先你码表需要一列顺序数字的id,如果是主键那最好,然后你建一张单独的取值表,里面只有1行1列,保存下一个能取的码表的id(注意是id而不是码)。这样用户取得时候只需要锁住这张表,取id,并把id+1就完成了取id,后续的去码表取码操作什么的都可以不用锁表。这样做好处是最小规模的锁表,而且表十分简单,读写操作均极快,避免锁住数据量巨大的码表。
MR00009 2015-11-26
  • 打赏
  • 举报
回复
引用 5 楼 xdashewan 的回复:
对于数据量大我是那么看的,1.如果活动可以区分,比如说第一期第二期,那么你可以对应创建子码池,比如一期是10W条,那么每期你要操作的数量就只有10W。2.可以尝试在码池生成时候就进行打乱,如果一定要保留原码表的次序,你也可以新建一个打乱后的码表,这样你可以在取码的时候不必乱序取码,而是根据主键索引依次取,因为码本身就是打乱的。 1和2可以结合使用即一期10W条打乱次序的码
十分感谢!确实要在生成每个商品号码时打乱一下。 UPDATE只执行一次,是有加上商品ID和状态进行修改,如 WHERE ProductId=@ProductId AND State=0 AND Number IN。。。 关于每一期,我的想法是,一期结束后,将该商品号码一次性修改 State=0,因为有另一张表在存储用户购买的号码。 号码池打算作为快速取号且避免重复使用。 那有没有什么锁,可以在并发时,尽量避免不同用户取到同一个号码?
xdashewan 2015-11-26
  • 打赏
  • 举报
回复
对于数据量大我是那么看的,1.如果活动可以区分,比如说第一期第二期,那么你可以对应创建子码池,比如一期是10W条,那么每期你要操作的数量就只有10W。2.可以尝试在码池生成时候就进行打乱,如果一定要保留原码表的次序,你也可以新建一个打乱后的码表,这样你可以在取码的时候不必乱序取码,而是根据主键索引依次取,因为码本身就是打乱的。 1和2可以结合使用即一期10W条打乱次序的码
xdashewan 2015-11-26
  • 打赏
  • 举报
回复
UPDATE NmberPool SET Satet=1 WHERE Number IN (SELECT Number FROM temp)你这条语句需要重复运行吗?其实运行过后很多NmberPool的Satet已经为1,再次运行的时候因考虑排除这部分数据的重复更新,比如UPDATE加上Satet等于0或不等于1的条件,也可以在temp表里做排除
MR00009 2015-11-26
  • 打赏
  • 举报
回复
这样的业务MSSQL够用吗?号码池数据量比较大,应该在一百万左右。 有点担心IO占用率。
MR00009 2015-11-26
  • 打赏
  • 举报
回复
引用 1 楼 xdashewan 的回复:
设计本身没有问题,但你的描述中我只看到频发写,并没有看到读
嗯,应该是频繁写。 我的步骤是:1、定义临时表temp;2、从号码池随机取出号码加入临时表temp;3、修改号码池的号码状态(UPDATE NmberPool SET Satet=1 WHERE Number IN (SELECT Number FROM temp)) 之后就是对临时表的操作。
xdashewan 2015-11-26
  • 打赏
  • 举报
回复
设计本身没有问题,但你的描述中我只看到频发写,并没有看到读
大家这么喜欢,我就不要资源分了,改成0分了,我为我一己私利感到抱歉…… MongoDB学习手册 ......................................................................................................................... 1 说明.......................................................................................................................................... 2 一、 Mongodb简介 .......................................................................................................... 4 二、 MongoDB特性 ......................................................................................................... 5 适用场景: ....................................................................................................................... 5 不适用场景: ................................................................................................................... 6 三、 MongoDB的工作方式.............................................................................................. 6 四、 MongoDB的下载 ..................................................................................................... 8 五、 MongoDB的安装 ..................................................................................................... 9 六、 MongoDB数据类型................................................................................................ 12 1. Timestamp类型 ...................................................................................................... 12 2. ObjectId类型 .......................................................................................................... 12 3. 数据关联 ............................................................................................................. 14 七、 GridFS文件系统 ..................................................................................................... 15 八、 索引 ......................................................................................................................... 16 九、 主(Master)/从(slave)数据同步 ................................................................ 20 1. 建立主/从服务器 ................................................................................................... 20 2. 相关参数说明 ......................................................................................................... 21 3. Slave顶替Master ................................................................................................... 22 4. 切换Master/Slave角色 ......................................................................................... 22 5. 更新主服务器位置 ................................................................................................. 22 十、 MongoDB分片和集群............................................................................................ 24 1. 简单分片实例 ......................................................................................................... 24 2. 高级分片实例 ......................................................................................................... 29 十一、 数据基本操作:增查删改 ............................................................................. 37 1. Insert ....................................................................................................................... 37 2. Query ....................................................................................................................... 38 3. Remove.................................................................................................................... 52 4. Update ..................................................................................................................... 53 十二、 Shell控制台 ........................................................................................................ 62 1. 执行.js文件 ............................................................................................................ 62 2. –eval ........................................................................................................................ 62 3. 脚本和互动的区别 ................................................................................................. 62 十三、 安全与认证 ......................................................................................................... 63 1) 开启安全认证 ......................................................................................................... 63 2) 添加用户 ................................................................................................................. 64 3) 认证 ......................................................................................................................... 64

27,582

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧