人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP クローラ開発

現在特定のサイトを対象とした検索エンジンをPHPベースに作っています。指定したサイトからHTMLタグを取り除きコンテンツを取得しデータベースに格納しているのですが、量が多いためDBに負荷がかかってしまいます。

調べるとGoogleはDBを使用していないようです。

Googleなどの巨大検索エンジンはもとより価格.comや比較.comなど一般企業のクローラはデータをどのように保存し、管理、検索をかけているのでしょうか?

詳細な情報をお願いいたします。

●質問者: esecua
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:dB Google HTML PHP エンジン
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● yna1962
●23ポイント

一概に言えないのですが、DBがボトルネックになっているとすると、DBのオプティマイズがちゃんとされていないのかもしれません。検索時の高速性を狙って全部の項目に索引をつけると、登録の度にすごく重くなります。また、ページファイルのようなものをDBに保存しているようなら、これを外部のファイルに保存するようにしてください。DBの設計を一度見直してみては如何でしょうか?

昔Btreeそのものを作っていましたが、索引つきのテーブルに10000件のデータを順次登録するのより、索引のないテーブルに10000件のデータを登録し、その後索引を再構成したほうが早いということが起きます。バッチ処理的な運用が可能なら、このような方法でプログラムすることも可能かもしれません。(ただし普通のSQLを使うというレベルでない難しさがあると思います)

MSSQLの例ですが、考え方は応用できると思います。

http://www.microsoft.com/japan/technet/archive/columns/itpro/rip...


2 ● まきのっぴ
●47ポイント

ひょっとして全文を突っ込んだフィールドに対して LIKE 演算子で単純に中間一致検索されていないでしょうか?

単純な中間一致検索は対象のデータを毎回全文嘗め回すので、データ量が増えるとそれに比例して遅くなってしまいます。

そこで、Google その他の全文検索システムでは転置インデックスというデータ構造をあらかじめ作成し、高速に検索できるようにしています。

MySQL や PostgreSQL 等の RDBMS にも全文検索のための転置インデックス作成機能がありますが、日本語に対応していないという問題があります。

そこで、それらで転置インデックスを用いた日本語対応の高速な全文検索を可能にするライブラリとして、Senna があります。

Senna には MySQL と連携するためのパッチが標準でついていますし、PostgreSQL についても NTT データが提供している Ludia を追加することで Senna と連携可能になります。

また、RDBMS との連携機能はありませんが、Hyper Estraier ならクローラも付属していますので、お手軽に全文検索を実現できます。

◎質問者からの返答

大変参考になります。ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ