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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了今天胡乱看看到了一个很长时间的设计题,表达一下我的想法!有不足多多指教~~相关的知识,希望对你有一定的参考价值。

设计任务:
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)=1234567890809 ,10分钟以内 这个数字不会重复的   

3.每次投票前

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

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

以上是关于今天胡乱看看到了一个很长时间的设计题,表达一下我的想法!有不足多多指教~~的主要内容,如果未能解决你的问题,请参考以下文章

NOIP2016提高组初赛(C++语言)试题 个人的胡乱分析 Part 2.

简单看看es6解构赋值

一道面试题:介绍一下 Fragment 间的通信方式?

一道面试题:介绍一下 Fragment 间的通信方式?

php长时间的脚步,报502

检测需要很长时间的 node.js http.get 调用