用于Python的更高效的HashMap(Dictionary)用于大数据

时间:2017-08-11 04:29:57

标签: python string dictionary bigdata

我正在创建一个程序,用于计算巨大文件中字符串的出现次数。为此我使用了python字典,字符串作为键,计数作为值。

该程序适用于最多10000个字符串的较小文件。但是当我在我的实际文件 ~2-3 mil 字符串上测试时,我的程序在达到50%标记时开始减速到原始速度的50%左右。

我怀疑这是因为内置字典并不是为了处理如此大量的数据而且会发生更多的冲突。我想知道是否有任何有效的方法来解决这个问题。我一直在寻找替代的hashmap实现,甚至是制作一个hashmaps列表(它进一步减慢了它)。

详细信息:

  • 事先并不知道字符串。
  • 琴弦的长度范围约为10 - 200。
  • 有许多字符串只出现一次(最后会被丢弃)
  • 我已经实现了并发性以加快速度。
  • 完成一个文件大约需要1个小时
    • 我也做了其他计算,虽然占用时间,但它不会减慢较小的文件大小。所以我怀疑这是一个哈希映射或内存问题。
  • 我有足够的内存,运行时只占用8GB的32GB。

1 个答案:

答案 0 :(得分:4)

  

我怀疑这是因为内置字典并不是为了处理如此大量的数据而且会发生更多的冲突。

高冲突率不是可能的原因。 Python词典随着它们的增长而调整大小,因此它们不会超过三分之二。无论大小如何,这都会使碰撞率保持在合理的水平。

可能的原因是数据增长大于L3缓存(通常约为6Mb)。除此之外,常规DRAM访问速度大约是其两倍(参见下面的ExtremeTech的内存延迟图)。

鉴于这是一个硬件问题,备用字典实施无法提供帮助

https://www.extremetech.com/wp-content/uploads/2015/02/latency.png