0

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

字典是如何存在的?

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

每个快照如下所示:

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....
}

如您所知,假设您有多年的库存快照和非常广泛的库存广度......这本字典结果是巨大的。整个“分组”过程发生在内存中,字典的大小超过了内存限制。

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

是一个与我的问题非常相似的问题,但在“最佳投票”答案之后,在我将循环编号更改为真正的“大数据”大小后,内存仍然很快被耗尽。

因此,任何真正不会杀死记忆的例子都会受到赞赏,而且速度对我来说并不是那么重要。

(注意,有几种方法可以优化数据结构,以便减少字典大小,但是......库存快照不是周期性的,并且某些产品具有不同数量的快照,因此“矩阵”的想法可能行不通)

4

1 回答 1

2

在这一点上,我建议您停止使用字典和import sqlite3,否则您将重新发明轮子来实现数据库已有的优化。

快速上手,Elixir是一款非常体面实用的ORM。

于 2013-09-03T21:19:44.730 回答