最大 2 億行 (通常は約 2000 万行) と 2 つの列を持つ巨大なタブ区切りファイルがあります。最初の列には最大 40 文字の ASCII 単語が含まれ、2 番目の列には整数が含まれます。
次の手順を実行したいと思います。
- 最初の列で並べ替え
- 重複する行を削除して、すべての行を一意にします
- 最初の列の指定されたエントリのすべての行を読み取る
3 GB のメモリ制限があり (すべてのデータをハッシュに読み込むことはできません)、無制限のハード ディスク領域があり、単一のコアでスクリプトを実行したいと考えています。いくつかのスクリプトを並行して実行するつもりなので、ハード ディスクの読み取りおよび書き込み操作が高すぎないようにする必要があります。
ファイルのサイズを考慮して、(Perl で) 私のスクリプトの実装をどのように進める必要がありますか?
ファイルのサイズを考慮して、最初のステップにどのアルゴリズムをお勧めしますか?
ステップ 3 は、私が考える最も複雑な部分です。これをどのように処理すればよいですか?索引付けアルゴリズムに精通していません。問題に最適なものを提案していただけますか?使用できる Perl モジュールはありますか?
最初にファイルをバイナリ ファイルに変換することは理にかなっていますか (SAM を BAM に変換するなど)。はいの場合、そのようなファイルを変換および処理するための指示またはアルゴリズムはありますか?