質問: 数万人規模のコミュニティサイトとxoops 数万人規模のコミュニティサイトをxoopsで立ち上げようと考えました。 データベースの使用は初めてです。 この数万人のユーザーは、過去の自分の行動の履歴を自由に見れるようにします。 一日の書き込みは1万~2万と想定しています。 従来、cgiで同様のシステムを組んだ時にはmakefileでユーザーごとのファイルを用意し ユーザーが過去の履歴を参照する場合は自分のファイルを見に行けば参照できました。 (個々のファイルであればせいぜい数千行です) 今回、sql + xoopsで立ち上げることを考え、xoops用のフリーモジュールを研究してみたの ですが、買い物かごなど不特定多数のユーザーが利用するモジュールを見ても、 「cgiでユーザー登録ごとにmakefileとしてユーザーファイルを作成した」ことに相当する 「ユーザーごとにテーブルを作成、用意する」という形にはなっていないようです。 ということは、sqlの場合、ユーザーの行動に対しては、全てひとつのテーブル内に延々記録 していくのだと思います。 (id 32003の書き込み。id 12045の書き込み。 id 23102 の書き込み」というのがたった 一つのテーブルに記録される) この形だと1日に1万の書き込みがあるとすると、100日で100万行になってしまいます。 掲示板であれば、「上から20個参照しあとは不要」というプログラムを組めば問題ありませんが、 過去の履歴をユーザーごとに表示させるとなると、ユーザーのリクエストのたびに「100万行の 中からid32003をサーチする」プログラムを組むことになります。 これが数万人規模のユーザーから行われたらどんな高スペックのサーバーであっても足りない ように思えます。 一方、mixiもmysqlで出来ていると聞いています。 大規模なsqlというのは、このような場合、どうやって解決しているのでしょうか? (単に「サーバー増強が不可欠よ。」ということであればcgiでmakefileの方が簡単な気がします) sqlの優位性がさっぱり分からなくなった私に、どうかご教授を願います。 makefile より、こういう点でsqlが有利だよということでも構いません。 複数の方のアドバイスを頂けると嬉しいです。 宜しくお願い致します。
回答: >indexを張るにしても、サーバー内部では100万行をサーチしているのですよね。 インデックスに従いサーチ範囲が絞られます。 「ユーザidで検索」のように単純な仕組みなら、素直に数1000分の1のコストで検索できるかと。。。 >ちなみにmakefile方式で各ユーザーファイルを見に行く方式であれば、10年前の低スペックサーバー(「1ghzx2cpu」「メモリ2gb」程度)で4万人のユーザーを問題なく処理できていました。 「xx:xx~yy:yyの時間帯処理」の検索や「商品●●の販売履歴」なんかのユーザをまたがった処理は可能なんですかね?(まあ業務的に不要ならいいのですけど) また、トランザクションの一貫性保証や障害時のリカバリ手順なんかも用意できているんでしょうか?