2009-05-14 22 views
1

現在、Webクローラを組み込んだカスタム検索エンジンを開発中です。何らかの理由で私はマルチスレッドにならないので、これまでのインデクサはシングルスレッドでコード化されていました。今私は構築しているクローラーと小さなジレンマを持っています。誰がより良いと推薦することができますか?1ページをクロールしてインデックスを作成するか、1000+ページとキャッシュをクロールしてインデックスを作成しますか?Webクローラを構築する

+0

あなたの「小さなジレンマ」はなんですか? – lothar

+3

なぜあなたはスレッド化していませんか?それを理解するにはあまりにも怠惰であることは、不自由な言い訳なので、そうでないことを願っています。 – Louis

+0

怠け者ではない、私はsqliteからリンクされているスレッドの欠点について記事を読んだが、強く与えられたので、今度はマルチスレッドに入る、シングルスレッドインデクサー+マルチスレッドクローラー。お返事ありがとうございました –

答えて

1

何の面で?スピードの点では、私は目に見えない違いを見出すことはできません。堅牢性(致命的な障害からの回復)の面では、クロールするたびに各ページのインデックスを作成する方がよいでしょう。

1

あなたがクローラを真剣に考えているならば、私はマルチスレッド化を強くお勧めします。基本的には、少なくとも1つのインデクサーと少なくとも1つのクローラー(潜在的に両方のクローラーの可能性があります)を常時稼働させたい場合があります。とりわけ、これにより、起動およびシャットダウンのオーバーヘッド(例えば、データ構造の初期化および解放)が最小限に抑えられる。

4

ネットワークは低速です(CPUに対して)。クローラを並列化することで大幅な速度向上が見られます。それ以外の場合、アプリはネットワークI/Oが完了するのを待っている時間の大半を費やします。複数のスレッドを使用してIOをブロックするか、非同期IOを持つ単一のスレッドを使用することができます。

また、ほとんどの索引付けアルゴリズムは、一度に1つの文書を索引付けする場合に比べて、文書のバッチで優れたパフォーマンスを発揮します。

1

スレッドを使用していないことは問題ありません。 しかし、まだパフォーマンスが必要な場合は、非同期IOを処理する必要があります。 私はBoost.ASIO link textをチェックアウトすることをお勧めします。非同期IOを使用すると、あなたのジレンマは重要ではないので、「無関係」になります。また、ボーナスとして、スレッドを使用することに決めた場合、Boost.Asioにマルチプルスレッドを問題に適用することは簡単です。

+0

ありがとう、私はそれを試してみるかもしれない –

+0

mybeこれに見ることができます: http://code.google.com/p/driller-cpp-web-crawler/ – user63898

関連する問題