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

PHP+PostgreSQLを勉強中です。
PostgreSQLを使うメリットについて教えてください。(PHPで)

例えば個人サイト向けの簡単な検索エンジンを作る際、データが2〜3MB程度の場合にもわざわざPostgreSQLを使うメリットはあるのでしょうか?

個人的には安いレンタルサーバーで3MB位のテキストデータを検索するようなものを作ると凄く遅く感じので、これ以上の場合なら使った方がよいのかな?と思いますがどうなのでしょうか。

また、仮にPostgreSQLを使うとした場合、10MB程度のデータなら「一つのテーブルに全て入れる」といった使い方でもメリットはあるのでしょうか?
また、現実問題としてどのようなデータがどのくらいの量になるなら複数のテーブルに分けた方が良いとなるのでしょうか?

よろしくお願いします。

この他にも随時質問させていただきますのでよろしくお願いします。

●質問者: worldtravel
●カテゴリ:ウェブ制作
✍キーワード:PHP postgreSQL いただきます テキスト データ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● まきのっぴ
●20ポイント

「検索エンジン」というのがどのようなものを想定されているのかにもよりますが、もしサイト内の全文検索のことを指しているなら、データの量が多いか少ないかにかかわらず、メリットは薄いと思います。


PostgreSQL 等の DBMS を使うメリットは、

・インデックスを使用した高速な検索

・データの原子性・完全性を保つための雑多な処理からの開放

・複雑な条件設定に従ったデータ抽出をシンプルに実現

等ですが、全文検索ではインデックスを使用できないので速度的なメリットはほとんどありません。


3MB のテキストデータを検索するのが遅いと思うのであれば、単純に PostgreSQL 化したところで速度的なメリットはほとんど得られないのではと思われます。


サイト内検索を高速に実行したいのであれば、Namazumsearch 等のような全文検索に特化したプログラムパッケージを利用した方が良いと思います。


また、SennaHyper EstraierRast 等のような、日本語全文検索に特化したライブラリを使用したプログラムを書くという手もありますが、レンタルサーバでの使用は難しいかと思われます。


ということで、今回は全文検索用途を仮定してお答えしましたが、そうでないならまた話は違ってくると思います。

◎質問者からの返答

すいません。

わたしの考えていた「検索エンジン」とは「検索のできるリンク集」程度の本当に個人的なしょぼいものです。

カテゴリ、URL、タイトル、サイト説明と言うような内容が数千サイト分登録してある程度といった感じです。

でもこれでは全文検索とほとんど変わらないのかもしれませんね。


2 ● icchan0000
●20ポイント

PostgreSQLに限らず、RDBを導入する最大のメリット(というか目的?)は、SQLによる問い合わせ(データ検索)が可能という点だと思います。

これは、単にテキストファイル検索とは違って、いろんな条件で柔軟に検索でき、かつ、結果のありようをいろいろと工夫できるということです。


ですので、データ容量よりも、どのようにデータを活用するのか?という面から、RDB導入が効果的なのか、テキストファイル形式で十分なのかを判断すべきだと思います。

以上、一般論として、RDB導入について、です。

以下、今回想定しているケースとして、単純に、「ある言葉が含まれる行を複数行取得する」と仮定します。


>10MB程度のデータなら「一つのテーブルに全て入れる」といった使い方でもメリットはあるのでしょうか?


サーバのスペックなどに依存するところが大きいので、難しいですが、「3MB位のテキストデータを検索するようなものを作ると凄く遅く感じ」るというのであれば、テキストファイルを検索して必要行を取得するのと、RDBにして検索するのとでは、レスポンスに有意差が発生する可能性(RDBを導入する意義)はあると思います。

RDB本来の使い方からすると、かなり限定した使い方になるかとは思いますが、それはそれで割り切って使うならば、試してみる価値はあると思います。

◎質問者からの返答

> RDB本来の使い方からすると、かなり限定した使い方になるかとは思いますが、

> それはそれで割り切って使うならば、試してみる価値はあると思います。

とありますが、私のRDBに対するそもそもの考え方がわからなくなってきました。

例えばカテゴリ、URL、タイトル、サイト説明といったサイト情報が大量に登録してあり、サイト上で検索できるサービスを行う場合、

テキストファイルで50MBというようなファイルサイズになるととても検索することはできませんよね。

しかしこのデータをDBにいれるといとも簡単に結果を出してくれますよね。

だからデータが多い場合はDBを使わざるを得ないと考えておりますがこれは間違えでしょうか?


3 ● まきのっぴ
●40ポイント

>カテゴリ、URL、タイトル、サイト説明と言うような内容が数千サイト分登録してある


であれば、DB を使用するメリットは若干あると思います。


まず、テキストデータが CSV だったとして、CSV を読み込むときにカンマ区切りでフィールドを分けて…というような処理が不要になるのでその分高速化が期待できます。


また、カテゴリに対して事前にインデックスを作っておき、カテゴリに関しては選択式等にするか自由記述でも完全一致検索か前方一致検索に限定することによって、タイトル等で検索する前に検索対象を絞り込むことができ、高速化が期待できます。


また、そのような検索をした結果って、大抵「新しい順にn件」とか表示しますよね?

そういった並べ替えの処理等は SQL でやらせれば一発なのでとても楽です。

(これは速度的な話ではないですが)


>テキストファイルで50MBというようなファイルサイズになるととても検索することはできませんよね。

>しかしこのデータをDBにいれるといとも簡単に結果を出してくれますよね。


DB なら何でもすぐ出してくれるわけではありません。

もちろん、CSV 等のテキストデータよりは効率よく処理できるので2?3倍程度の高速化は見込めるかもしれませんが、50秒かかる処理を何でも1秒に短縮できるわけではありません。

DB を使用して劇的に高速化できるのは、インデックスを事前に作成しておき、検索の種類がインデックスを有効活用できるようなパターンだった場合です。


インデックスがなかった場合や、インデックスを作ってあってもそれを使えないような検索パターン (先に例示した全文検索(中間一致)等) だった場合は、DB だろうと全てのデータを総舐めにするしかないので、(テキストファイルを読むよりは若干速いかもしれませんが) 処理に要する時間は基本的にデータ量に比例します。


でもそれでは困るので全文検索にもインデックスを使って高速化しようという工夫がフルテキストインデックスで、先に出した Senna 等がそれにあたります。

ただ、サイトのタイトルや説明程度であればそこまで手をかけるほどではないような気がします。


>だからデータが多い場合はDBを使わざるを得ないと考えておりますがこれは間違えでしょうか?


間違いではありません。

ただ、単に DB を使えば解決するわけではなく、必要な部分にインデックスを張り、インデックスが有効に使われるようなテーブル設計・画面設計にする必要があります。


それから、レンタルサーバの PHP のバージョンによりますが、もし PHP5 が使えるなら、PostgreSQL よりも SQLite を使用した方が速度面で期待できると思います。

◎質問者からの返答

どうすれば早くできるのかということや基本的なことが少しわかりました。

やはりインデックスは重要なのですね。

ありがとうございました。

関連質問


●質問をもっと探す●



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