正文  软件开发 > PHP编程技术 >

今天胡乱看看到了一个很长时间的设计题,表达一下我的想法!有不足多多指教~~,不足多多指教

今天胡乱看看到了一个很长时间的设计题,表达一下我的想法!有不足多多指教~~,不足多多指教设计任务:1、最近总有人骚扰我们的投票模块,需要你来设计一个投票限制的东东要求如下:1)要求每个QQ号码(假...

今天胡乱看看到了一个很长时间的设计题,表达一下我的想法!有不足多多指教~~,不足多多指教

设计任务:
1、最近总有人骚扰我们的投票模块,需要你来设计一个投票限制的东东
要求如下:
1)要求每个QQ号码(假设此QQ号码在UNIT32 内可以表示)10分钟这内只能投5票。
2)我们的用户很踊跃,平均每天要有2000万人左右通过此程序投票。
说明:
1)无需写代码,只需要图跟文字即可。
2)对于关键逻辑,请用图加代码表示出来,这也是对你文字表达能力的一个考验。
3)对你能想到的所有的边界条件列出来,这是对你逻辑思维全面与敏捷性的考验。
4)存储部分,尽你所能吧。如果,你需要一个自己设计的存储层,那么把这个存储层的实现,用文字+图片方式描述清楚,要是设计合理,你会获得华丽的奖分。

解:

1)核心问题:如何统计10分钟之内投了5票? 平均每天 2000万

>10分钟可以分解成 60*10 s

>每秒qps(请求量) 以二八分法 :(20000000*80%)/(86400*20%) ≈1000 (925) 按1000算 , Redis读写性能测试redis官网测试读写能到10万左右 redis 足够用了

2.如何和存

>10分钟以内就 设置成10分钟过期

>10分钟不能超过5次 10分钟以外就不用管了

>预估数据量:600*1000*5=300万 10分钟内数据量 300w左右(10分钟以前的都自动过期了)

>key值带上分钟和秒:比如:1234567891(QQ号) 123456789 + 当时的分秒 (0809)=123456789:0809 ,10分钟以内 这个数字不会重复的

3.每次投票前

>计算 : keys 123456789:* 返回多少个数据, 计算有多少个值 如果大于5个就返回 10分钟超过5次请等一会再投!

还有没有其他好的方法,有不足的地方请大家指正~~~~

http://www.bkjia.com/PHPjc/1224547.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1224547.htmlTechArticle今天胡乱看看到了一个很长时间的设计题,表达一下我的想法!有不足多多指教~~,不足多多指教 设计任务: 1、最近总有人骚扰我们的投...