<p>我在为一个搜索引擎写一个倒排索引。现在,我将索引存储为字典。也就是说,每个关键字都映射到docid的字典->出现位置。在</p>
<p>数据模型类似于:
{word:{doc_name:[位置列表]}}</p>
<p>在内存中构建索引工作正常,但是当我试图序列化到磁盘时,我遇到了MemoryError。我的代码是:</p>
<pre><code># Write the index out to disk
serializedIndex = open(sys.argv[3], 'wb')
cPickle.dump(index, serializedIndex, cPickle.HIGHEST_PROTOCOL)
</code></pre>
<p>在序列化之前,我的程序使用了大约50%的内存(1.6GB)。一旦我给cPickle打电话,我的内存使用率就飙升到80%,然后崩溃。在</p>
<p>为什么cPickle使用这么多内存进行序列化?有没有更好的方法来解决这个问题?在</p>