質問: ページを閲覧していただきありがとうございます。 ・PHP,Javascript,jqueryのどれかで実装できる。 ・不特定多数に閲覧できる。 ・ブラウザや端末を変えても閲覧できる。 ・膨大なデータを保存できる。 ・なるべくサーバーに負担をかけない(任意) 上記の条件を満たしたフォームの保存方法を考えています。 (TRPGのキャラクターシートのようなものです。) どの保存方法が適切なのかと考えると......考えあぐねている状況です。 (CSVの書き出し、セッションストレージ、ウェブストレージは見ました。 データベース、Jsonはまだ良くわかっていません。) PHP,Javascript,jqueryで実装できるもので、良い方法はないでしょうか? かなり曖昧な質問内容ですが、ご回答頂けると幸いです。
回答: > > CSVの書き出し、セッションストレージ、ウェブストレージは見ました。 > > > ちょいと調べ物の方向性が明後日の方向を向いているようですね。 確かに自力ではかなり大回りをしそうなので軌道修正を兼ねてアドバイスしていきます。 Webサーバとはなんぞやに関して、関係あるところをざっくりと説明していきます。 Webサーバとは、インターネット上に公開されているパソコンのTCP80番ポートを開けて、 全世界のクライアント(Chrome等のWebブラウザ)がこの80番ポートにHTTPリクエストを送信してきて、 Webサーバからデータ(HTML、CSS、JS、画像ファイルなどなど)の文字列を持って帰る仕組みを指します。 意識しておくべき事は、この「インターネット上にマシンが存在する」という事。 > > 不特定多数に閲覧できる。 > > > 不特定多数に閲覧させる為には、Webサーバのマシン内にファイルを動的に作成して、 アクセスしてきたユーザに公開するという機能が必要になります。 なのでWebサーバのマシン内にファイルを作成。 それを一覧として見せる為にPHPやRuby、Node.js......などの何かしらのプログラミング言語を使ってリクエストに従ってファイルを探した結果が盛り込まれているHTML(動的HTML)を返すことになります。 > > セッションストレージ、ウェブストレージ > > > これらはChromeなどのブラウザを起動しているユーザのパソコン(もしくはスマホ等)の話ですね。 ここに記憶すると、他のユーザが閲覧することが出来ません。 結果としてWebサーバがその情報を吸い上げて保存する仕組みが必要になるので、 結局二度手間やん......という話になります。 何度も送信したくないキャッシュデータを保存するような使い方が主になります。 > > データベース > > > CSVファイルの読み書きで感づいたと思いますが、 Webサーバで普通にファイルの読み書きをすると以下の問題点が浮上します。 * AさんとBさんが同時に同じCSVファイルを読み書きした場合の整合性 * 全てのリクエストでCSVファイルを読み書きするので速度面でくっそ遅い これらは色々とノウハウがあるのですが、 最初からMySQLなどのRDBMSを利用するのが一般的です。 * 同時読み書き: 裏で賢い行単位のロックが動いている他、SQLクエリ順に処理するので確実に反映を届ける事が可能 * 速度: 世界最高峰の速度で動作するC++で書かれており単純にくっそ速い、インデックスという仕組みが用意されており様々な視点でデータを高速に検索出来る RDBMSは行列の2次元の表形式で構成されるデータベースで、 ファイル操作は「専用のSQL文字列を使って命令する」というやり方ですが、 その本質はExcelと殆ど同じものです。 * データベース: Excelのファイル * テーブル: Excelのシート * カラム: Excelの縦列(1行目をタイトル名置き場とかよくやるよね) * レコード: Excelの行(1件のデータを表す) > > フォームの保存方法を考えています > > > TRPGとありますが、その本質は掲示板やブログ、SNSと同じです。 そのデータで何をするかという所だけが異なるだけで、 その本質はxxの集合体ということでExcelでも管理出来るはずです。 画面上に表示する瞬間だけHTMLとCSSでキャラクターシートにすればいいでしょ? それまでは効率の良い二次元の表で管理すればいい。 まずはPHPとデータベースのお勉強しながら掲示板やブログを作成してください。 これらが作れるほど成熟すれば自然と自分でどこをカスタマイズしてTRPG用のキャラクターシートにすれば良いかが理解出来ますし、掲示板やブログを作れないのなら何も作れません。 そのためには、書店へ行き、掲示板やブログを作るという趣旨の書籍を購入してそのとおりに手を動かしてみると良いでしょう。