我编写了一个代码来从一个非常大的数据文件中获取输入,对其执行一些简单的处理,然后将其存储为搁置字典格式。我有 4100 万个条目要处理。但是,在我将 3500 万个条目写入搁置字典后,性能突然下降并最终完全停止。知道我能做些什么来避免这种情况吗?
我的数据在 twitter 上,它将用户屏幕名称映射到他们的 ID。像这样:
Jack 12
Mary 13
Bob 15
我需要非常快速地按名称访问其中的每一个。喜欢:当我给my_dict[Jack]
它时返回12
。
我编写了一个代码来从一个非常大的数据文件中获取输入,对其执行一些简单的处理,然后将其存储为搁置字典格式。我有 4100 万个条目要处理。但是,在我将 3500 万个条目写入搁置字典后,性能突然下降并最终完全停止。知道我能做些什么来避免这种情况吗?
我的数据在 twitter 上,它将用户屏幕名称映射到他们的 ID。像这样:
Jack 12
Mary 13
Bob 15
我需要非常快速地按名称访问其中的每一个。喜欢:当我给my_dict[Jack]
它时返回12
。
考虑使用更底层的东西。不幸的是,搁置性能可能非常低。不过,这并不能解释您所看到的减速。
对于许多基于磁盘的索引,如果您可以将它们初始化为预期的大小,这将有所帮助,因此它们不需要即时重新组织自己。我已经看到这对各种库中的磁盘哈希表具有巨大的性能影响。
至于您的实际目标,请查看:
http://docs.python.org/library/persistence.html
特别是gdbm, dbhash, bsddb, dumbdbm
和sqlite3
模块。
sqlite3
可能不是最快的,但最容易使用的。毕竟,它有一个命令行 SQL 客户端。bsddb
可能更快,特别是如果您nelem
根据数据大小调整和类似参数。它也有很多语言绑定;可能甚至超过 sqlite。
尝试创建初始大小为 4100 万的数据库,以便针对此大小进行优化!