2012-07-18 73 views
0

我已经编写了一个代码,用于从非常大的数据文件中获取输入,对其执行一些简单处理,然后将其存储在搁置字典格式中。我有4100万个条目要处理。然而,在我写下3500万条搁置词典之后,表现突然下降并最终完全停止。任何想法我能做些什么来避免这种情况?Python随着时间的推移将性能写入磁盘

我的数据在twitter上,它将用户屏幕名称映射到其ID。像这样:

Jack 12 
Mary 13 
Bob 15 

我需要非常快地访问每个这些名称。喜欢:当我给my_dict[Jack]它返回12

+1

完整的RAM和交换? – eumiro 2012-07-18 09:09:35

+0

@eumiro是的,这正是我在做什么.. – Amitash 2012-07-18 09:12:58

+1

交换比在RAM中工作慢** **。改变你的数据结构,写入DB(sqlite应该足够了)...没有关于你的数据的更多信息,这很难提供帮助。 – eumiro 2012-07-18 09:15:09

回答

1

考虑使用更低级的东西。不幸的是,搁置表现可能很低。这并不能解释你所看到的放缓。

对于许多基于磁盘的索引它帮助如果你能与预期的大小对它们进行初始化,所以他们并不需要重新组织自己的飞行。我已经看到了这种情况,对于各种库中的磁盘哈希表而言,其性能影响是巨大的

至于你的实际目标,看看:

http://docs.python.org/library/persistence.html

特别是 gdbm, dbhash, bsddb, dumbdbmsqlite3模块

sqlite3可能不是最快的,但最容易使用的一个。毕竟,它有一个命令行SQL客户端。 bsddb可能会更快,尤其是如果您调整了nelem和您的数据大小的类似参数。它也有很多语言绑定;可能比sqlite还要多。

尝试创建您的数据库的初始大小为4100万,所以它可以优化这个大小!

相关问题