上司から商品一つ一つについて公開期間を設定したいとのことで、
初めは公開・非公開のフラグを設定し、その期間が過ぎたら変えたいと思っていましたが、
日付での制御と公開・非公開は2重でチェックしたいとのこと。
(その細かい意図を理解できていないのが大きなミスですが。。。)
素直に商品毎でdatetimeとの比較をするコードを書いたのですが、、、
どうにも負荷が大きい(効率が悪い)気がしてなりません。
コードを書くのが手間で記載できないのでちょっと抽象的ですが、
同様の処理をする場合の一般論を教えていただければありがたいです。
MySQL内にストアドプロシージャ(rakuten:book:11506352:detailrakuten:book:11307019:detail)でロジックを組むのが一般的でしょう。複雑なロジックをDBMS外でやるのは非常に効率が悪く、MySQLの負荷という問題ではなく、アクセス回数の多さとソート回数の多さとが負荷になっていると思われます。アクセス回数の多さはストアドプロシージャでクリアでき、ソート回数の多さによる負荷はインデックスキー設定の工夫により回避可能です。日付だけでソートするのは効率が悪く、自動付加できるシーケンシャルナンバーと日付とを両方ともキーにすることで数十倍速くなります。このような方法を取ることによって、MySQLとのやりとりはストアドの起動と結果の受け取りの2回のみで済んでしまいます。このような方法を取ることで、言語がPHPであろうがJavaScriptであろうがRubyであろうがまったく関係のない処理スピードが得られます。
MySQLのストアドプロシージャを記述する言語に関しては、私はちょっと知りません。最近ではJavaでストアドを組むことができるDBMSもあるのですが。
ありがとうございます。
勉強してみます。
はっきり申し上げて、仕様を理解していないということが一番の問題ですね。仕様を確実に理解するまで執拗にリーダーまたは先輩などに聞くことが、まず最初にすべきことです。でなければ、作ったものの意味がまったくありません。品質の悪いソフトウェアに「効率」という言葉はまったくマッチしないものですから。
仕様を理解し、その理解に基づいて美学を追究した設計・プログラミングをし、その次に初めて効率という問題に向き合うべきです。そういうのをリファクタリング(
リファクタリング―プログラムの体質改善テクニック (Object Technology Series)
、
)と言います。
「美学の追究」というのは、ありとあらゆる分野で行われるべき行動です。今、最も美学の追究が必要な分野は「政治・経済」でしょうね。って、関係ないか、すみません。
ありがとうございます。
勉強してみます。