我有一个包含一百万个条目的文本文件。每个条目基本上是几个平均二十个单词的句子。
为了完成一些任务,我将所有单词加载到哈希中。每个单词都是一个键,值将是它在文本中出现的次数。
我的问题是将它们加载到哈希中时内存不足。我在一台只有 1 GB RAM 的机器上。有没有办法减少内存使用?或者我应该使用 Ruby 哈希以外的东西。
根据定义,内存中的数据结构使用内存。如果您的内存受限,请考虑使用数据库或可查找的磁盘文件来满足您的存储需求。
您可能想研究 SQLite3、Redis 或某种键/值存储。但是,无论您使用什么,其想法都是用磁盘 I/O 换取内存消耗。
我建议避免使用大型内存数据结构,但如果您仍然需要/想要使用文本管理大数据结构,您可能会发现Trie很有趣(节点的后代具有与该节点关联的字符串的公共前缀的树)
看看这些 github 项目:
为什么不使用 GDBM? http://ruby-doc.org/stdlib-1.8.6/libdoc/gdbm/rdoc/GDBM.html
自 1.8.6 以来是标准库的一部分。我认为您没有旧版本的 Ruby?
如果这个文本文件是不变的(也许即使它不是),我建议把它变成一个SQLite数据库而不是内存中的哈希。