gpt4 book ai didi

java - 每秒 3K 传入请求的重复检测,推荐的数据结构/算法?

转载 作者:搜寻专家 更新时间:2023-10-31 20:22:51 24 4
gpt4 key购买 nike

设计一个系统,其中服务端点(可能是一个简单的 servlet)必须每秒处理 3K 个请求(数据将通过 http 发布)。

然后这些请求将存储到 mysql 中。

我需要指导的关键问题是,他们将有很高百分比的重复数据发布到此端点。

我只需要将唯一数据存储到 mysql,那么您建议我使用什么来处理重复数据?

发布的数据将如下所示:

<root>
<prop1></prop1>
<prop2></prop2>
<prop3></prop3>
<body>
maybe 10-30K of test in here
</body>
</root>

我将编写一个方法来对 prop1、prop2、pro3 进行哈希处理,以创建一个唯一的哈希码(正文可以不同,但​​仍然被认为是唯一的)。

我正在考虑创建某种将在请求之间共享的并发字典。

他们在 24 小时内重复发布数据的机会更多。所以我可以每隔 x 小时从这个字典中清除数据。

对存储重复项的数据结构有什么建议吗?考虑到每秒 3000 个请求,清除以及我应该存储多少记录又如何呢,即它会非常快地变大。

注意:他们将发布 10K 个不同的来源,重复的机会只发生在给定的来源。这意味着我可以拥有不止一本字典,也许可以将一组资源传播出去。这意味着如果 source1 发布数据,然后 source2 发布数据,重复的变化非常非常低。但是如果source1一天发帖100次,重复的几率就非常高。

注意:请暂时忽略将发布的数据保存到 mysql 的任务,因为这本身就是另一个问题,重复检测是我需要帮助解决的第一个障碍。

最佳答案

有趣的问题。

我可能会在这里查看某种 HashMap of HashMaps 结构,其中第一级 HashMaps 将使用源作为键,第二级将包含实际数据(用于检测重复项的最小数据)并使用您的哈希码函数用于散列。对于实际实现,Java 的 ConcurrentHashMap 可能是最佳选择。

如果您需要在多台机器上分配负载,您还可以通过这种方式设置根据来源对传入负载进行分区的结构。

关于清除,我认为您必须使用类似数据的生产来衡量确切的行为。您需要了解成功消除重复项后数据增长的速度,以及数据如何分布在 HashMap 中。凭借良好的分布和不太快的增长,我可以想象偶尔进行清理就足够了。否则,也许 LRU 政策会更好。

关于java - 每秒 3K 传入请求的重复检测,推荐的数据结构/算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8153673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com