问题如下: 我们正在开发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