大きなファイル(20GB)を持つC++で範囲検索コードを実装していて、別のクエリの特定の範囲を検索する必要があります。
私は2つのレベルのルートとリーフを持ち、データがリーフに格納されている(ISAMツリーの考え方に従う)検索を固定するために大きなファイルを小さな塊に分割しました。
すなわち: 私は100000ライン (ルートが30000を有する)各ページにパイントルートで30000ページ、各ページに分割されたデータ
の3000 000 000行を有します。複数の読み込み後にI/Oストリームが遅くなる
しかし、検索範囲が200ページ以上になると、ストリームが大幅に遅くなることに気付きました。私はそれを終えた後、それぞれのページを閉じます。読書の流れが非常に遅くなる理由は何ですか?
- 私はザ・読み取り
- は、これらのファイルから連続しているマルチスレッド実行するオプションを持っていないLinuxマシン
- 上で実行しています。
さらに詳しい情報を提供し、プロファイリングも行う必要があります。遅さを見始めると、システムで何が起きているかを主に確認する必要があります。 top、iostat、free、/ proc/meminfoの出力を参照してください...あなたのロジックに迷惑をかけない限り、C++の問題ではなくシステムレベルの問題をもっと見ています – Arunmu
ページスワップがたくさん見え始めると、あなたのシステムでhugepagesを有効にするには(私はそのlinuxを仮定しています) – Arunmu
また、私はあなたが何らかのシーケンシャルな読書をしていると仮定します。 – Arunmu