(以前、同アプリの質問をさせて頂きましたが、それとは別の質問です。)
質問形式のWebアプリで、ユーザは次々と質問に答えていきます。
質問のリスト1つは数十〜数百個の質問で構成されます。
1ページにつき1つ、質問リストからランダムで表示され、
質問に1つ答える毎に次のページ(次の質問)に進んでいきます。
(ユーザは一度にリストの全ての質問に答える必要はありませんが、
一度に数十〜最大で百個以上も答えることを想定しています。)
このようなサイトの場合、質問を1個表示するタイミングで
質問内容を逐一データベースから読み出して表示するしかないのでしょうか?
それとも、最初に多くの質問をまとめて読み出しておいて、
そこから表示するような事は技術的に可能なのでしょうか?
他にも良い方法がありましたら、そのやり方も教えて頂けますと幸いです。
PHPとMySQLとJavascriptで開発する予定です。
初心者ですが、助言をよろしくお願い致します。
DBを使う方式で問題ないです。
ロックに関しても今回の件に関しては意識する必要がないはずです。
データは、追加(INSERT)しか発生しませんので。
>このようなサイトの場合、質問を1個表示するタイミングで
>質問内容を逐一データベースから読み出して表示するしかないのでしょうか?
>それとも、最初に多くの質問をまとめて読み出しておいて、
>そこから表示するような事は技術的に可能なのでしょうか
逐一読むで問題ないです。
アンケートサイトやモニターサイトで、多くの質問を答えさすサイトも
逐一読み込んでるようですから。
普通にDBサーバーのほうで、同じレコードばかり読みますからキャッシュが聞きます。
>それとも、最初に多くの質問をまとめて読み出しておいて、
>そこから表示するような事は技術的に可能なのでしょうか?
可能です。
Javaとかだと、サーバーコンテキストに読み込んでおくと
違うセッションからも読みにいけます。
サーバーコンテキストとかない言語だと、
セッション変数に読み込んでおくというのが可能です。
PHPやJavaあたりは簡単に実装できます。
そんなに負荷が高くないのなら、毎回DBを読みにいって問題ないと思います。
DBを読み出すよりも、質問に答えた後にDBに書き込みに行くほうが負荷が高いはずで、
たくさんのアクセスがあって多くの人が一度に同時に答えだしたときに問題になるのは
書き込み(更新)のほうです。
WordPres(ブログ)とかでも、毎回DBに読みに言って、画面(HTML)を生成してますが
多くのサイトは問題ないことから考えて、毎回DBに読みにいくのは普通では問題ないと思います。
DBに読みに行くのが負荷が高く、セッションとかに抱え込むのが無理な場合は、
DBの内容をテキストファイルに出力して、サーバー側でキャッシュのような感じで
使うと負荷が下がります。
テキストファイルを読むほうが、DBを読むよりもかなり負荷が小さいです。
そういうこともあって、昔はDBよりテキストファイルとかいわれてましたが
今は、DBを使うほうが普通です。