トップボリューム獲得者、トッププライス獲得者などのテクニカル分析に使用するデータベーススキーマを作成しています。ここでは 、設計の質問などの質問に対する回答を確認しました。そこでboe100の回答からヒントを得て、スキーマをほぼモデル化したので、次のようになります。
Symbol - char 6 //primary
Date - date //primary
Open - decimal 18, 4
High - decimal 18, 4
Low - decimal 18, 4
Close - decimal 18, 4
Volume - int
現在、End Of Day(EOD)データを含むこのテーブルは、3年間で約300万行になります。後でさらにデータを取得/必要とする場合、2,000万行になる可能性があります。
フロントエンドは、「Y日間の日付Xで最高値を獲得した人を教えてください」などのリクエストを要求します。その要求はより単純なものの1つであり、そのため、時間的にはそれほどコストがかからないと思います。
しかし、「過去10日間でトップボリュームの獲得者を私に与え、過去100日間をベースラインとして機能させる」などのリクエストは、10〜100倍のコストがかかる可能性があります。このようなリクエストの結果は、ボリュームが何倍に成長したかなどを示すフロートになります。
私が持っている1つのオプションは、そのような結果ごとに列を追加することです。また、ユーザーが20日間で10日間のボリュームの増加を要求した場合、別の列が必要になります。特にMACD-10、MACD-100のような他の結果を列として追加し始めた場合、そのような列の合計は簡単に100を超える可能性があります。それぞれに独自の列が必要になります。
これは実行可能な解決策ですか?
もう1つのオプションは、結果をキャッシュされたhtmlファイルに保持し、ユーザーに提示することです。私はWeb開発の経験があまりないので、私にはそれは厄介に見えます。しかし、私は間違っている可能性があります(ofc!)。それもオプションですか?
ユーザーに応答を提示するためにmod_perlを使用している/使用する予定であることを付け加えておきます。mysqlデータベースでの作業の多くはperlを使用して行われています。応答時間は1〜2秒にしたいのですが。