3

目前在我的程序中使用 5 个字典,其中 2 个有 1300 万个键值对。每个字典都是对,其中键是长度为 1-6 的字符值,值是键、值对的另一个字典,现在键的长度为 1-12,值是元组。

python 中的这个解决方案运行良好,但效率不高,每次执行查找大约有 80 万次。当在服务器上的另一个用 c 编写的脚本(实时过滤应用程序)上使用 GHashTable 时,他的性能非常出色。

我的问题是是否有任何对象或实现使用 GHashTable 之类的散列函数是 python 来满足我的要求。python中的字典使用哈希,但为什么它在大量记录中那么慢。与 c 的 GHashTable 相比,python 字典使用的哈希效率不高。python中是否有更好的哈希实现可用。

python dict 在几百万条记录中运行良好,但在重负载情况下它无法响应 O(1)。

您的 Python 进程是否适合 RAM? 是的,我有 18GB 的​​ Ram,只有 8GB 是为 postgres 和其他东西保留的。而 10GB 可用于处理。

4

1 回答 1

0

当存在哈希冲突时,dict通过使用该__eq__方法解决冲突,按值检查是否相等。这似乎是您减速的原因。

因此,如果对于某个键 a 和 b,那么我们通过检查and hash(a) == hash(b)来解决冲突。my_dict[a]my_dict[b]

例如,通过蛮力,我们发现hash(2**1000)等于hash(16777216)。让我们测试一下,

>>> my_dict ={}
>>> my_dict[2**1000] = "One"
>>> my_dict[16777216] = "Two"
>>>
>>>
>>> for k,v in my_dict.items():
...     print(hash(k), v)
... 
16777216 One
16777216 Two
于 2017-07-19T01:39:37.653 回答