博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何设计数据表、解决数据库并发访问瓶颈、数据库事务----阿里巴巴2015校招研发在线
阅读量:2386 次
发布时间:2019-05-10

本文共 797 字,大约阅读时间需要 2 分钟。

7
天猫双十一有个积分换墨盒的活动,总共有50万台天猫魔盒(box),每个用户(user)可以用99个天猫积分(point)兑换一台魔盒,且每人限换一台。 请设计一套java接口并实现下单(order)逻辑。 参考(但不局限于)下面的下单逻辑: 
1、创建订单  
2、扣减用户积分 
3、扣减魔盒库存 
4、下单成功 
同时请回答:  
1、数据库表结构如何设计,有哪些表,分别有什么作用? 
2、下单过程中哪些地方可能成为瓶颈?如何解决或改善?  

3、是否会用到数据库事务,哪些地方会用到?如果不用数据库事务,如何保证数据的一致性?

数据库表结构如何设计,有哪些表,分别有什么作用?

答案:三个表,分别是: 

用户信息表,有字段:id(用户编号),name(用户名),point(现有积分),box_num(拥有魔盒个数) 

魔盒信息表,有字段:all_num(所有魔盒个数),remain_num(剩余魔盒个数) 

订单表,有字段:id(订单编号),user_id(用户 id),order_time(下单时间)

下单过程中哪些地方可能成为瓶颈?如何解决或改善?

答案:所有的用户下单的时候需要对魔盒信息表进行写入,需要对其进行加锁,这是瓶颈。改善方法:可以把魔盒信息表划分为多个表(如 10 个),每个表的魔盒个数平分(如每个表 5 万个),然后访问表的时候进行负载均衡,如用用户的 IP 计算出一个数,然后进行 mod10 运算,决定分配到哪个表中。但是这种情况下,如果一个表中的魔盒分配完了,就需要记录其为不可用,下次负载均衡的时候,就需要对其进行考虑。

是否会用到数据库事务,哪些地方会用到?如果不用数据库事务,如何保证数据的一致性?

答案:会用到数据库事务,用户下单的时候,需要对用户现有积分,拥有魔盒个数,剩余魔盒个数这些字段进行修改,另外,还要在订单表中添加一条新的记录,所有这些都包含在一个事务中。

转载地址:http://xgnab.baihongyu.com/

你可能感兴趣的文章
mysql 编码字符集配置
查看>>
php查看opcode编码的扩展 opdumper
查看>>
php转换html格式为文本格式
查看>>
mysql-proxy主从服务架构下读写分离和负载均衡实现及原理
查看>>
Nginx location 和 rewrite retry
查看>>
基于nginx的FastCGI的缓存配置
查看>>
Nginx模块fastcgi_cache的几个注意点
查看>>
PHP使用curl伪造IP地址和header信息
查看>>
代理服务器中的HTTP代理与SOCKS代理有什么区别?
查看>>
零基础Python学习路线,小白的进阶之路!
查看>>
CSS的23个垂直居中技巧,你都学会了吗?
查看>>
黑客攻击用的最短代码大揭秘,颠覆你的世界观!
查看>>
零基础的自学前端之路,当年的入坑之旅
查看>>
新手程序员?教你解决办法!基础都掌握了,动手敲代码就一脸懵逼
查看>>
程序员快速进阶学习到底要看书还是要看视频?
查看>>
web游戏框架哪家强?国内外精选优质框架分析及注意事项
查看>>
各行业都爱用什么编程语言开发?
查看>>
css3实现ps蒙版效果以及动画,炫酷吊炸天!
查看>>
程序员休息时间接私活遭公司辞退,不明觉厉?
查看>>
CSS 、JS实现浪漫流星雨动画
查看>>