如何使用非常大的Ruby Hash减少内存使用量



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

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

我的问题是,将它们加载到哈希中时我的内存不足。我在一台只有1 GB RAM的机器上。有没有办法减少内存使用情况?还是我应该和红宝石hash以外的其他东西一起去。

避免大型内存数据结构

根据定义,内存数据结构使用内存。如果您受到内存约束,请考虑使用数据库或可寻求的磁盘文件以满足您的存储需求。

一些选项

您可能需要查看某种形式的sqlite3,redis或键/值存储。但是,无论您使用什么,想法是将磁盘I/O用于内存消耗。

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

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

看一下这些GitHub项目:

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

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

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

如果此文本文件不变(也许即使不是),我建议将其放入sqlite数据库而不是内存哈希。

最新更新