100 万のエントリを含むテキスト ファイルがあります。各エントリは、基本的に平均 20 単語の 2 つの文です。
いくつかのタスクを実行するために、すべての単語をハッシュにロードしています。各単語はキーであり、値はテキスト内に存在する回数になります。
私の問題は、それらをハッシュにロードするときにメモリが不足していることです。RAM が 1 GB しかないマシンを使用しています。メモリ使用量を減らす方法はありますか? または、Ruby ハッシュ以外のものを使用する必要があります。
定義上、インメモリ データ構造はメモリを使用します。メモリに制約がある場合は、ストレージのニーズに合わせてデータベースまたはシーク可能なディスク上のファイルを使用することを検討してください。
SQLite3、Redis、または何らかのキー/値ストアを調べることができます。ただし、どの方法を使用する場合でも、ディスク I/O をメモリ消費と引き換えにするという考え方です。
なぜGDBMを使わないのですか? http://ruby-doc.org/stdlib-1.8.6/libdoc/gdbm/rdoc/GDBM.html
1.8.6 以降の標準ライブラリの一部です。古いバージョンの Ruby をお持ちではありませんか?
大規模なメモリ内データ構造を避けることをお勧めしますが、それでもテキストを含む大きなデータ構造を管理する必要がある場合、または管理したい場合は、Trie (ノードの子孫がそのノードに関連付けられた文字列の共通のプレフィックスを持つツリー) が興味深いと思うかもしれません。 )
これらの github プロジェクトをご覧ください。
このテキスト ファイルが変更されていない場合 (おそらく変更されていない場合でも)、インメモリ ハッシュではなくSQLiteデータベースにすることをお勧めします。