优化:许多密钥更新流,少量密钥

optimization: stream of many key updates, small number of keys

我有一个接收恒定数据流的程序。

根据这个数据流,我填充了一个散列table。我收到的每一条数据 翻译成:

我在处理传入的 raw 数据之前将其存储在 queue 中。

散列中的键数table非常少。我收到的 99% 的数据 对应于键更新.

问题是我有太多关键更新以至于队列变得 对我的消费者来说太大了

显然,从数以千计的关键更新中,其中许多关注相同 键,所以只有最后一个有真正的价值,而其他所有的都没有用。

我处理这个案子的最佳方法是什么?我应该使用哪种数据结构 正在使用?

What can you tell us about your keys? How many are there? Are they numeric (and if so, what range of values might they take?), textual? Any limit on the number of bytes per key? What kind of hash table are you inserting to (e.g. closed hashing, open hashing)? What contention/locking is there on the hash table? How many updates per second? What programming language are you using?

多少键

几百或几千。不多!

数字键

键本身是字母数字,不是很长,最多30个字符左右。但是,这些值都是数字(整数)。

每个键的字节数限制

我的密钥最多 30 个字符。

哈希的种类 table

我只是在使用 Python 的 defaultdict

Contention/locking

Python 的字典被认为是线程安全的

每秒更新数

它可以从每 3 秒 1 个增加到每秒 100 个以上

编程语言

我正在使用 python

ConcurrentDictionary 应该很合适。

但是您在这里需要的是一种(可能是自适应的)节流机制,它可以检测队列何时太慢并开始折叠数据。

您可以使用另一个哈希表来代替简单的队列 - 每个传入消息都可以根据键存储在适当的堆栈中。然后你从每个堆栈中取出每个元素(这将是最近的项目)——你可以选择在你拉出一个项目时清除每个堆栈。