2017-03-02 10 views
1

私は、顧客が特定の範囲(顧客番号に基づいて)にログインして商品を購入できるウェブサイトを持っています。ナビゲーションバーには商品カテゴリのドロップダウンがありますが、商品がない場所は表示されません。クッキーとセッションvsデータベース

分ごとに、各ページでデータベースがクエリされ、製品カテゴリメニューが表示されますが、これは非効率的です。私は今、 '許可された'製品のリストが、セッションの開始時にクッキーまたはセッション変数のいずれかに格納されるべきかどうか疑問に思っています。

私は他の質問から集まったことから、通常はセッション変数が使用されますが、セッション変数に多くのデータを格納することを警告しています。この場合、私は各ユーザーの製品の潜在的に大きなリストを格納しているので、クッキーはより良いでしょうか?私は、特に敏感な製品のリストを分類せず、注文する前にサーバー側のチェックを行います。または、毎回データベースを照会する現在の解決策に固執すべきですか?

私は依然としてデータベースに情報を保存しますが、この質問では、セッション全体に素早くアクセスするための一時的なストレージについてのみ質問しています。

私はすでに次の質問を見てきましたが、私はまだ私の特定のシナリオの答えがかなり得られているとは思わないし、近い質問はクッキーについて言及していません。

+0

キャッシュ。常にキャッシュします。単にデータベースへのラウンドトリップを回避しようとするならば、セッションとクッキーは決して適切な選択ではありません。 –

+0

誰かが私にダウン投票をなぜ教えてもらえますか? –

+0

わかりませんが、一般的に言えば、あなたの質問はStack Overflowのトピックです。 –

答えて

2

私はかかるだろうなアプローチは、おそらくこのようなものになるだろう:

  • すべての顧客間で共有されるキャッシュに製品データを格納し、各製品の主キーを各製品のキャッシュキーの一部として使用します。使用されるキャッシュ戦略は、スケーラビリティの要件(System.Runtime.Cachingとファイルキャッシュの比較redis)によって異なります。一般的には、商品データに滑り期限またはLRU cachethis .NET exampleを参照)を使用しているため、一般的な製品はあまり人気のない製品より長くキャッシュされます。特定の主キーに対する要求が発生すると、まずキャッシュのチェックが行われ、nullが返された場合は、製品をデータベースから検索し、キャッシュに戻してから製品を返す(this exampleを参照)。
  • プライマリキーとその他の関連データ(入手可能な割引クラスなど)のみを保存します。プライマリキーリストが十分に小さい場合は、おそらくクッキー(encrypted)でこれを取得できます。各顧客にクッキーに収まらないものを提供するためにこれを拡張する必要がある場合は、データベースに主キーを問い合せます。
  • 顧客がデータを要求すると、まず主キーのリストを取得し、次にそれらのキーを使用して、プリキャッシュされた製品データにアクセスしてビューを構築します。顧客ごとに、または個々の顧客のユースケースごとに、データベースから製品データを取得することなく、必要な数だけさまざまな主キーリストを格納できます。

Think twice about using session state - ユーザプロファイルデータにセッション状態を使用しないことをアドバイスします。

もちろん、上記は、必要とされる他のマーケティング要件を考慮していません。したがって、あなたのニーズに合わせてこの戦略を調整する必要があるかもしれません。たとえば、キャッシュが通常期限切れになるよりも早く製品情報を更新する必要がある場合は、データベース内の製品データを最初に更新し、成功した場合はキャッシュ上の書き込みロックを取得してキャッシュを更新するアプローチを検討し、あまりにも。これにより、キャッシュをデータベースから無効にして再ロードすることなく、リアルタイムに近いキャッシュ更新が可能になります。

+0

私はここでもセッション状態を除いてすべてのことに同意します。商品カテゴリデータはグローバルであり、セッションにはまったく属しません。 –

+0

あなたはそうです。私はその行を削除しました。 – NightOwl888

関連する問題