【问题标题】:How can I reduce memory usage with a very large Ruby hash?如何使用非常大的 Ruby 哈希减少内存使用量?
【发布时间】:2012-12-08 11:56:44
【问题描述】:

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

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

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

【问题讨论】:

  • 在不了解任务的情况下很难给你建议。例如,任务需要随机访问数据还是线性访问?

标签: ruby memory hash


【解决方案1】:

避免使用大型内存数据结构

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

几个选项

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

【讨论】:

    【解决方案2】:

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

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

    看看这些 github 项目:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-19
          • 1970-01-01
          • 1970-01-01
          • 2013-03-17
          • 1970-01-01
          • 2018-07-12
          相关资源
          最近更新 更多