記錄一道有趣的數據存取,以及攻擊行爲判斷的題目

題目

三元組(IP1, IP2, T) 描述了行爲: 在T時刻,IP1對IP2進行了訪問行爲;其中將IP1稱爲源地址,IP2稱爲目的地址;地址爲IPV4格式,如192.168.0.1 10.10.101.10 時間T爲字符串格式,例如2019-06-21 23:02:31redis

如今有一批數據(總數據量爲100億條),期中每一條數據描述了一次訪問行爲緩存

問題

  1. 請設計一中存儲方式,實現數據的存儲,並大體描述存儲所須要的磁盤空間大小
  2. 若在必定時間X(單位:秒)內,IP1對IP2的訪問行爲次數超過了N,則稱IP1對IP2發生了攻擊行爲

解答問題一

ip一個int存,時間unix時間long存
這樣一個數據是16個字節
100億數據 就是 1016 10億 = 160GB設計

解答問題二

開一個大一些的緩存
用lru,新加入的ip計數爲0,已經訪問過就加一
這樣短期訪問的應該,內存夠大的話,是能夠把訪問頻率高的,攔截到的吧?unix

而後一個頭條小姐姐這麼回答code

redis:計數:key能夠構造爲ip1toip2的字符串,value是一個list列表,裏面存放時間戳,每次都從尾部插入。若是list長度超過n就發生了攻擊(判斷列表頭部的時間戳是否已經在當前時間–x以前了,是的話彈出lpop)在代碼端ip1->ip2的時候,rpush ip1toip2ip

返回解答問題一

存儲的話,可不能夠作成和文件目錄那樣,分紅二級目錄,第二級目錄裏面存時間戳內存

相關文章
相關標籤/搜索