2

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

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

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

4

4 回答 4

5

避免大型内存数据结构

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

几个选项

您可能想研究 SQLite3、Redis 或某种键/值存储。但是,无论您使用什么,其想法都是用磁盘 I/O 换取内存消耗。

于 2012-12-20T21:52:24.963 回答
2

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

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

看看这些 github 项目:

  1. https://github.com/dustin/ruby-trie
  2. https://github.com/tyler/trie
于 2012-12-20T22:09:56.300 回答
2

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

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

于 2012-12-23T13:59:10.620 回答
1

如果这个文本文件是不变的(也许即使它不是),我建议把它变成一个SQLite数据库而不是内存中的哈希。

于 2012-12-20T21:51:49.160 回答