2008-09-06 11 views
4

Webアプリケーションのデータベース設計に関するヒントやアドバイスはありますか?私が取り組んでいるアプリケーションが離陸し、多くの使い方をしているときに、/将来に多くの時間/労力を節約できるようなものです。Webアプリケーションのデータベース設計のヒント

もう少し具体的に言えば、アプリケーションは、データベースに保存され、後で処理される「注文」を発行するプレイヤーを主な対象とする戦略ゲーム(ブラウザベース、テキストのみ)であり、結果も保存されますそこに( "注文"の歴史と対応する結果はおそらくかなり大きくなる)。

詳細を追加するように編集(要求された通り):

プラットフォーム:ジャンゴ

データベースエンジン:私はMySQLを使用して考えていた

(別のものを使用することには大きな利点がありますしない限り)スキーマ:今私が持っているのは、いくつかのDjangoモデルです。ここに投稿するにはあまりにも詳細です。私がスキーマを投稿し始めると、これはあまりにも具体的になり、私は一般的なヒントを探していました。たとえば、後で処理される「注文」を発行し、何らかの「履歴」を表示するために保存しなければならない結果を返すとします。この場合、「履歴」のための別の表を持つ方が良いか、「注文」と結果の両方を集計する方が良いでしょうか?私は "履歴"テーブルをキャッシュすることができると思うが、これは集計テーブルに変更するのではなく、新しい行を常に作成しなければならないため、データベースとデータベース操作のスペースが増えます。

答えて

10

一般的に高いスケーラビリティとパフォーマンスを実現するための設計の大きな問題に触れたことがあります。

基本的には、頻繁に使用すると予想されるデータに外部キーとインデックスを追加するなどの良い方法に従います。データを小さなテーブルに分割して正規化し、頻繁に書き込まれ、最適化されます。

ハイパフォーマンスWebアプリケーションのデータベース設計よりも重要なのは、HTMLページのキャッシュを使用してクライアントレベルで、キャッシュされたデータを介してサーバーレベルでキャッシュを効果的に使用すること、または動的ファイルの代わりに静的ファイルを提供することです。

キャッシングの素晴らしい点は、必要に応じて追加できることです。そのため、アプリケーションが離陸したら、それに応じて進化させることができます。

過去のデータに関する限り、頻繁に変更するとは思わないので、キャッシュするのは素晴らしいことです。データから定期的かつかなり集中的なレポートを作成する場合は、このデータを別のデータベースに入れて、実行中にWebアプリケーションを停止させないようにすることをお勧めします。

もちろん、このような最適化は、アプリケーションが保証すると思わない限り、実際には必要ありません。

3

Database Normalizationインデックスをよく考えれば、見逃せない2つのことがあります。特に、SELECTSがUPDATEよりも頻繁に起こるゲームを考えると、

長期的には、ユーザー数が2人以上になるとデータベースのクエリーがボトルネックになる可能性があるので、memcachedも参照してください。

1

あなたは今持っているスキーマを投稿してみませんか?あなたが使用しようとしているプラ​​ットフォームとデータベース、そしてあなたが提案しているテーブル構造についての詳細な説明がなくても、役に立つ答えは広すぎます。

1

denormalize +テーブルを1つのクエリで検索し、頻繁にヒットするレポートタイプのWebページのデータを取得します。また、HibernateやActiveRecordのようなORMライブラリを使用する場合は、生成するデフォルトのマッピングと生成を終了するsqlに時間を費やしてください。データベースへの1回のラウンドトリップで同じ結果が得られた場合、データベースとの会話が頻繁になりがちです。

関連する問題