現在特定のサイトを対象とした検索エンジンをPHPベースに作っています。指定したサイトからHTMLタグを取り除きコンテンツを取得しデータベースに格納しているのですが、量が多いためDBに負荷がかかってしまいます。
調べるとGoogleはDBを使用していないようです。
Googleなどの巨大検索エンジンはもとより価格.comや比較.comなど一般企業のクローラはデータをどのように保存し、管理、検索をかけているのでしょうか?
詳細な情報をお願いいたします。
一概に言えないのですが、DBがボトルネックになっているとすると、DBのオプティマイズがちゃんとされていないのかもしれません。検索時の高速性を狙って全部の項目に索引をつけると、登録の度にすごく重くなります。また、ページファイルのようなものをDBに保存しているようなら、これを外部のファイルに保存するようにしてください。DBの設計を一度見直してみては如何でしょうか?
昔Btreeそのものを作っていましたが、索引つきのテーブルに10000件のデータを順次登録するのより、索引のないテーブルに10000件のデータを登録し、その後索引を再構成したほうが早いということが起きます。バッチ処理的な運用が可能なら、このような方法でプログラムすることも可能かもしれません。(ただし普通のSQLを使うというレベルでない難しさがあると思います)
MSSQLの例ですが、考え方は応用できると思います。
http://www.microsoft.com/japan/technet/archive/columns/itpro/rip...
なんだって!! 冗談もほどほどにしてくれ
>GoogleやSlashdotなどをはじめ、日本でも楽天、ソニー、NEC、東芝、日立といった企業がMySQLを採用している。
基本は MySQL のはずですが。
上記回答にも書きましたように、基本的に単純な RDBMS は大規模な全文検索には向きませんので、各検索エンジンは MySQL でも PostgreSQL でもない、独自のデータ構造を持った DB (RDBMS とは限りません) を使っているはずです。
(MySQL でも Senna を使えば日本語の全文検索ができますが、Google は Senna が登場する前からありますし、Google は日本語に限らず多言語対応ですし、検索の挙動を見ても Senna のような N-gram 系ではなく形態素解析系のようですので、Senna ベースではないのは明らか)
例えば、Namazu はバックエンドに RDBMS は使っておらず、独自のデータ構造を持ったデータベースを構築しています。(http://0xcc.net/pub/namazu-ipsj/)
Hyper Estraier は同作者の QDBM (http://qdbm.sourceforge.net/) をベースに RDB 的要素を付加 (http://qdbm.sourceforge.net/mikio/rbbs.cgi?id=RA11439825461275735795) した独自 DB です。(http://qdbm.sourceforge.net/mikio/he-sigmodj.pdf)
Google の Web 検索のコアの DB については情報を見つけられませんでしたが、例えばデータベースより低いレイヤーの話になりますと、Google は GFS (Google File System) という独自の分散ファイルシステムを自前で構築していることを公表しています。
http://dev.ariel-networks.com/modules/xfsection/article.php?articleid=50
http://internet.watch.impress.co.jp/cda/special/2004/11/29/5561.html
http://internet.watch.impress.co.jp/cda/event/2004/11/16/5430.html
ということで、「Google は DB を使用していない」というのが、「MySQL のような RDBMS」のことを指しているのであれば、その認識は間違いではないと思いますよ。
しかし、RDBMS に限らずデータベース全般を指して「DB」と呼んでいるのであれば、誤りですね。
概念としてはgoogleというデータベースを作っているというの正しい認識だと思います。
単語のスペルを間違えたり、エラーコードのような変なコードを入力するとまったく拾ってこなかったりすることがあります。恐らく一種のキーワードを辞書を持っており、文書中に含まれるキーワードを拾っているのだと思います。
「Google Web 検索のコアが RDBMS でない」なら正しいかもしれませんが、「Google が DB を使用していない」は間違いです。
http://ja.wikipedia.org/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9
リレーショナルデータモデルを採用しているものだけが DB ではありません。
つい先日クローンがオープンソース化され,思わずニヤっとしたところです.
http://ja.wikipedia.org/wiki/BigTable
http://gigazine.net/index.php?/news/comments/20080208_hypertable/
http://www.hypertable.org/
古い質問へのコメントなのであまり意味をなしませんが,参考までに