大規模なカスタム調査/レポート作成アプリケーション-ベストプラクティス
質問
状況
社会科学を勉強するとき、あなたは頻繁にオンライン調査(科学データのオンライン収集)の必要性に直面しています。それが最初に PHP で始めた主な理由の1つです。
最近、これらの調査アプリケーションは成長し、成長しています。 複雑さの多くが追加されました:レポート(フラッシュチャート、PDF生成)、データ集約、さまざまな集約レベル(会社単位など)、関係する会社のアンケートモジュールの選択など
今、私は遅くて保守不能になっているという複雑なデータ収集およびレポート作成アプリケーションに直面しています。
私のプラットフォームの1つには1日あたり最大100人の新規ユーザーがいて、複数の千人のユーザー 回 数百のデータ項目のデータを集約/レポートします時間 多数の階層レベル。
私の質問
- まだPHP / mysqlを使用する方法ですか?
- codeIgnitorのようなフレームワークをこのようなアプリケーションの基盤にすることができますか、それともすべてをゼロから開発する必要がありますか
- 基礎として使用できる調査固有のフレームワークを知っていますか?
解決
PHP / mysqlは引き続き使用できますか?
はい、PHP / MYSQL(LAMP)は、あなたよりも指数関数的に大きなユーザーベースを持つ数百のサイトで正常に使用されています。
codeIgnitorのようなフレームワークをこのようなアプリケーションの基盤にすることができますか、それともすべてをゼロから開発する必要がありますか?
フレームワーク(またはカスタムビルドフレームワーク)を使用せずに構築された非独占的なPHPサイトは、ずさんな高速になる傾向があります。 PHPフレームワークは今では開始するための標準です。個人的には Zend Framework をお勧めします。これは非常に堅牢なフレームワークであり、多くの一般的なPHPタスク(データベース、日付、JSON、RPC、RESTの置換/拡張)およびWebアプリケーション開発のための組織化された方法論を提供します: MVC を使用して Zend_Controller 。
基礎として使用できる調査固有のフレームワークを知っていますか?
私が知っていることはありませんが、 Zend_Form により、構成ファイルからフォーム要素(タイプ、フィルター、サニタイザー、バリデーター)を自動的に生成します。
他のヒント
PHP / mysqlはこの規模では問題ありませんが、調整して十分なリソースを与える必要があります。
たとえば、スキーマが考慮されていない場合、あらゆる種類のパフォーマンスの壁にぶつかります。データの保存方法とインデックス付け方法は、おそらくレポートのパフォーマンスにとって最も重要な要素です。 mysqlには、わずかに複雑なクエリの1秒未満の応答時間で60〜100 GBのデータがありました。重要な要素は次のとおりです。
- 私のデータは、私が使用した方法でインデックス化されました
- 使用したクエリは、考え抜かれ、テストされ、最適化されました
次に、MySQLサーバーに十分なリソースを割り当てる必要があります。共有ホストサーバーでアプリを実行していて、そのままの設定を使用している場合、mysqlはおそらく数百MBを超えるデータではうまく動作しません。キャッシュが調整されていること、アプリケーションにとってテーブルタイプが適切であること、パフォーマンスのニーズを満たすために十分なメモリと十分なディスクがあることを確認してください。
そして最後に、データセットが大きくなったときに使用するトリックがあります。オンデマンドではなくcronでレポートを生成します。フラッシュグラフの生成に2分かかる場合、cronを5分ごとに実行してデータを生成します。ファイルをどこかに貼り付けて、データベースにリアルタイムでクエリするのではなく、グラフ作成ソフトウェアに吐き出します。
オープンソースのLimesurveyアプリケーションを調べる必要があります。
PHP / Mysqlを使用するため、タスクに対するPHPの適切性に関する質問の1つに対応します。
以前のバージョンのLimesurveyはCodeIgniterで作成されましたが、CodeIgniterライセンスに関する不確実性と混乱の後、プロジェクトリードはYiiフレームワークに変更されました。
上記の3番目の質問に回答しました。