我使用Tire作为Elasticsearch的 Ruby 包装器。我的问题是我需要将 100,000 个文档加载到内存中并对它们进行复杂的计算。当前程序如下所示:
- 装入所有文件
Computation.new(all_documents)
- 迭代所有文档并调用
computation.calc(document)
此策略不适用于 100,000 个文档,因为我将立即达到机器的内存限制。文档 (JSON) 被加载到 Tire 对象中,然后我将其转换为 Ruby 哈希。
我能做些什么来制作这个规模?我想到了以下内容,但我不确定 a) 是否最好实施 b) 最佳解决方案。
- 初始化计算对象
c = Computation.new
- 装入m 个文档
c.preprocess(documents)
- 重复步骤 2 和 3,直到所有文档都被预处理
- 装入m 个文档
- 迭代m个文档
c.calc(document
)- 重复步骤 6 和 7,直到处理完所有文档
同样从 GC 的角度来看,我不确定这将如何解决。