我有一个接收恒定数据流的程序。
从这个数据流中我填充哈希表。我收到的每一条数据 翻译成:或者
我将传入的原始数据存储在队列中,然后再进行处理。
哈希表中的键数非常少。我收到99%的数据 对应密钥更新。
问题是我有很多关键更新,队列变成了 对我的消费者来说太大了。
显然,从成千上万的关键更新来看,其中许多都是关注的 key,所以只有最后一个具有真正的价值而其他所有的都没用。
处理此案件的最佳方式是什么?我应该使用哪种数据结构 正在使用?
您能告诉我们您的钥匙有什么问题?那里有多少?它们是数字的(如果是这样,它们可能采用什么范围的值?),文本?每个键的字节数有限制吗?你要插入什么样的哈希表(例如封闭散列,开放散列)?哈希表上有什么争用/锁定?每秒多少次更新?你使用什么编程语言?
几百甚至几千。不是很多!
键本身是字母数字,它们不是很长,最多约30个字符。但是,这些值都是数字(整数)。
我的密钥长度最多为30个字符。
我只是使用Python的defaultdict
Python的字典被认为是线程安全的
它可以从每3秒1次增加到每秒超过100次
我正在使用python
答案 0 :(得分:1)
您可以使用另一个哈希表,而不是使用简单队列 - 每个传入的消息都可以基于密钥存储在适当的堆栈中。然后从每个堆栈中取出每个元素(这将是最新的项目) - 当您拉出项目时,可以选择清除每个堆栈。
答案 1 :(得分:0)
ConcurrentDictionary应该很好地适应这个法案。
但是你需要的是一种(可能是自适应的)限制机制,它可以检测队列何时太慢并开始折叠数据。