問題如下: 我們正在開發Java客戶端 - 服務器產品,需要通過過濾來保護DDoS。 每個請求包含客戶端ID。 如果服務器在短時間內收到來自客戶端的太多請求,客戶端的ID將被添加到黑名單中。 服務器過濾請求,如果它是黑名單中的ID,請求將被忽略。減少內存佔用量的Java集
內存消耗是一個問題。它需要最大限度地減少黑名單所消耗的內存。
使用HashSet或TreeSet不合適。
是否有一個Java庫實現了這樣一種集合,其內存佔用量小於num_elements * size_of_element?可能嗎?
或者,如果這是不可能的,那麼Java集的實現是什麼,最小的內存佔用?
不,不可能存儲少於數據(!)的數據。由於其性能特點,「集合」具有較大的內存開銷 - 它保證了唯一性並且具有快速搜索。一個'HashSet'可能是您的情況的正確選擇。另一種選擇是一個noSQL商店 - 雖然會顯着減慢;這對你是否重要;只有你可以決定。 – 2015-02-07 14:27:11
您意識到DDoS是一種*分佈式* DoS攻擊,意味着攻擊最可能*不會來自單個客戶端ID。 – aioobe 2015-02-07 14:30:35
這不是Java的強項;在你的主應用程序的前面使用一個專用程序來處理這些事情。 – fge 2015-02-07 14:31:20