【发布时间】:2013-03-23 10:25:18
【问题描述】:
目前在我的程序中使用 5 个字典,其中 2 个有 1300 万个键值对。每个字典都是对,其中键是长度为 1-6 的字符值,值是键、值对的另一个字典,现在键的长度为 1-12,值是元组。
python 中的此解决方案运行良好,但效率不高,每次执行查找计数约 80 万。当在服务器上的另一个用c编写的脚本(实时过滤应用程序)上使用GHashTable时,他的表现非常出色。
我的问题是是否有任何使用 GHashTable 的对象或实现,如哈希函数是 python 满足我的要求。 python中的字典使用哈希,但为什么它在大量记录中那么慢。与 c 的 GHashTable 相比,python 字典使用的哈希效率不高。 python中有没有更好的Hash实现。
python dict 在几百万条记录中运行良好,但在重负载情况下它无法响应 O(1)。
您的 Python 进程是否适合 RAM? 是的,我有 18GB 的 Ram,只有 8GB 是为 postgres 和其他东西保留的。而 10GB 可用于处理。
【问题讨论】:
-
说实话,考虑到数据的大小和性能要求,纯 Python 可能根本不是这项任务的最佳选择。 (+1)
-
您似乎认为问题出在哈希表上,但您有任何证据吗?确保查找本身确实是问题所在。
-
如果没有显示您的问题的工作示例,以及一些分析,您无法判断出了什么问题。 AFAIK python 的
dict很快。它们和 GHashTable 之间没有很大的性能差异,至少对于大多数用例而言。 -
我在 python 中使用了 cProfile,而在 c 中使用了时间戳。 python dict 在几百万条记录中工作正常,但在重负载情况下它无法响应 O(1)。
-
@NPE 是否有任何可用于 python 的包装器。像 cPickle 而不是 pickle 的工作速度更快。因为 cPickle 是 pickle 的 c 实现。
标签: python c dictionary hashtable key-value