[PHP-users 317] Re: 「次の50 件」みたいにするためには?

Osamu Shigematsu php-users@php.gr.jp
Thu, 28 Jun 2001 11:30:53 +0900


重松です。

> 一般的には(1)がよく採用されていそうですが、
> (1)の方法だと画面を見るたびにpg_execが走り、DBに負荷が
> かかるような気がします。

どれほどアクセスがあるかはわかりませんが、問題になる負荷と思わないのですが。
気がする、というよりもまずはやってみて、問題になるほどの負荷か、実験してみた
方が良いと思います。

> (2)の方法だと、pg_execが走るのは一度だけです。
> しかし、検索結果データ数によっては、$sqlresult の中身はかなりの
> 大きさになるでしょう。ということはApacheの負荷(メモリを
> 食いつぶすとか)につながりそうです。
> それにそもそも、SQLの実行結果のようなオブジェクトを
> session変数に入れることができるのか?という疑問もあります。
> (できるようなできないような・・・?ご教授モトムです^^;)

まさか検索結果を丸ごと入れる、というようなことをするわけではないですよね?

> (1)と(2)とで、どっちを採用すべきか?
> どなたか、いま少し御知恵とご意見をいただけませんか?

扱うデータの性質によると先のメールに書いたのですが、どういうデータか知ってい
るのはあなただけですし、どっちにしたいか、それぞれメリットでメリットがあると
思います。それは皆さんがすでに書かれているのでメールを読み直せばすみませんか
?

(1) の方法で実用に耐えうるのは、頻繁にデータが更新されない場合です。
また、少々表示がずれても大して問題ではない、場合でしょうか?

この他の方法として、検索結果のハッシュをとっておいて、そのハッシュが変わって
いない間のみ次の n 件、という処理をする、という方法があるかと思います。この
場合、データベースが追記ではなくて更新を伴う場合には、更新されたことがわかる
ような仕組みを考えないといけないと思います。(例えば追記のみの場合は、最大の
シーケンスを覚えておけばよいだけなので、カンタンだと思います。)