【问题标题】:Store Big Dictionary Restrict Memory存储大字典限制内存
【发布时间】:2013-09-07 05:45:00
【问题描述】:

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

字典是如何存在的?

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

每个快照如下所示:

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

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

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

【问题讨论】:

  • 为什么不使用sql数据库呢?
  • 我正在使用standardIO 完成大部分工作,在这种情况下,数据库会稍微打破这个“规则”。我想要一个包含人类可读内容的文件。

标签: python memory pickle disk shelve


【解决方案1】:

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

为了快速上手,Elixir 是一个非常体面和实用的 ORM。

【讨论】:

  • 似乎数据库确实是要走的路。所以我必须遍历每条日志记录并执行“插入表苹果值(...)”之类的操作,然后在所有插入之后...遍历所有不同的产品并获取每个产品的所有记录并执行一一分析?
  • @B.Mr.W.您也许可以使用 SQL 而不是 Python 进行一些分析,以获得更好的性能。
猜你喜欢
  • 1970-01-01
  • 2019-07-19
  • 2016-01-16
  • 2015-05-15
  • 1970-01-01
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 2011-01-13
相关资源
最近更新 更多