将bson写入磁盘时出现内存不足错误

时间:2014-10-15 11:58:53

标签: python json mongodb bson

我已经构建了一个庞大的字典 - 可能大约有几百千兆字节。有没有一种智能的方法来存储这样的对象。我正在使用以下例程来推送到磁盘:

print "Writing to file..."
                jsontext = bson.dumps(sample_dict)
                f = open(predump_file, 'wb+')
                f.write(jsontext)
                f.close()

这是我得到的堆栈跟踪:

Writing to file...
Traceback (most recent call last):
  File "Combine.py", line 1331, in <module>
    jsontext = bson.dumps(sample_dict)
  File "/mnt/opt/Centos5.8/python-2.7.8/lib/python2.7/site-packages/bson/__init__.py", line 69, in dumps
    return encode_document(obj, [], generator_func = generator)
  File "/mnt/opt/Centos5.8/python-2.7.8/lib/python2.7/site-packages/bson/codec.py", line 207, in encode_document
    encode_value(name, value, buf, traversal_stack, generator_func)
  File "/mnt/opt/Centos5.8/python-2.7.8/lib/python2.7/site-packages/bson/codec.py", line 177, in encode_value
    traversal_stack, generator_func))
MemoryError: out of memory

选择(我现在只能想到这些):

  1. 字典是嵌套的 - 基本上是将字典拆分为图层。
  2. 在第一个键上拆分字典,并为这些基础字典提供另一个索引。然后我可以独立存储N个词典。如果这很好,有任何推荐的方法来分割其键的字典并生成顶层索引字典。我想每个子字典必须是一个变量。因此,一旦我们拥有了大型嵌套字典,我们就可以将其划分为N个较小的字典,并将映射索引放在顶部。
  3. MongoDB是否是一个潜在的解决方案?

2 个答案:

答案 0 :(得分:2)

对于mongo db最大(bson)文档大小为16MB。您无法存储大于此值的数据。 您可以将每个key value存储为集合中的文档。 在您的情况下,您可以将key字段用作文档的_id属性

答案 1 :(得分:0)

我认为这实际上取决于您的词典内容以及您希望以后检索数据的方式。如果我是你,我会选择第二种方法。