如何使用非常大的Ruby哈希减少内存使用量?

时间:2012-12-20 21:47:42

标签: ruby memory hash

我有一个包含一百万个条目的文本文件。每个条目基本上是几个平均20个单词的句子。

为了完成一些任务,我将所有单词加载到哈希中。每个单词都是一个键,值将是它在文本中出现的次数。

我的问题是,在将它们加载到哈希中时,我的内存不足。我在一台只有1 GB RAM的机器上。有没有办法减少内存使用?或者我应该使用Ruby哈希以外的东西。

4 个答案:

答案 0 :(得分:5)

避免大型内存数据结构

根据定义,内存数据结构使用内存。如果您受内存限制,请考虑使用数据库或可搜索的磁盘文件来满足您的存储需求。

一些选项

您可能需要查看SQLite3,Redis或某种键/值存储。无论你如何使用,我们的想法是交换磁盘I / O以供内存使用。

答案 1 :(得分:2)

使用内存中树数据结构(TRIE)

我建议避免使用大型内存数据结构,但如果您仍然需要/想要使用文本管理大数据结构,您可能会发现Trie(节点的后代具有公共前缀的树)与该节点相关联的字符串)

看看这些github项目:

  1. https://github.com/dustin/ruby-trie
  2. https://github.com/tyler/trie

答案 2 :(得分:2)

为什么不使用GDBM? http://ruby-doc.org/stdlib-1.8.6/libdoc/gdbm/rdoc/GDBM.html

自1.8.6以来是标准库的一部分。我认为你没有旧版本的Ruby?

答案 3 :(得分:1)

如果此文本文件不变(可能即使不是),我建议将其放入SQLite数据库而不是内存中散列。