存储大字典限制内存

时间:2013-09-03 21:14:40

标签: python memory pickle disk shelve

我有一本非常大的字典,我需要分析。

字典是如何存在的?

字典是日志文件的数据透视表。 我每天都有一个库存快照,现在我有过去一个月的快照。

每个快照如下所示:

2013-01-01 Apple 1000
2013-01-01 Banana 2000
2013-01-01 Orange 3000
....

然后,我按产品名称对所有记录进行分组,并计划稍后进行时间序列分析。 我的输出看起来像这样:

{
 Apple:[(2013-01-01,1000),(2013-01-02, 998),(2013-01-03,950)...],
 Banana:[(2013-01-01,2000),(2013-01-02, 1852),(2013-01-03, 1232)...]
 Orange....
}

如您所知,假设您拥有多年的库存快照和非常广泛的库存广度......这本词典变得非常庞大。整个'GROUPING'进程发生在内存中,字典的大小超出了内存限制。

我想知道如何将内存使用量限制为特定数量(比如5GB,我不想禁用正常使用的服务器)并在磁盘上完成工作。

Here是一个非常类似的问题,但是在“最佳投票”回答之后,在我将循环次数更改为真正的“大数据”大小后,内存仍然很快被消耗掉。

所以任何真正不会扼杀记忆的例子都会受到赞赏,速度对我来说并不重要。

(注意,有几种方法可以优化数据结构,以便减少字典大小,但......库存快照不是定期的,而且某些产品的快照数量不同,因此'MATRIX'的想法可能不会工作)

1 个答案:

答案 0 :(得分:1)

此时,我建议您停止使用字典和import sqlite3,否则您将重新发明实施数据库已有优化的轮子。

要快速入门,Elixir是一个非常体面和实用的ORM。