1. 程式人生 > >今天胡亂看看到了一個很長時間的設計題,表達一下我的想法!有不足多多指教~~

今天胡亂看看到了一個很長時間的設計題,表達一下我的想法!有不足多多指教~~

rep 用戶 自動 過期 代碼 重復 class 說明 lib

設計任務:
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次請等一會再投!

還有沒有其他好的方法,有不足的地方請大家指正~~~~

今天胡亂看看到了一個很長時間的設計題,表達一下我的想法!有不足多多指教~~