セッションストレージとデータベースストレージは排他的であると想定しています。そうではありません。しかし、それらがそうであると仮定することから始めましょう。
セッションストレージの利点は3つあります。
- データベースに明示的にデータを挿入する必要はありません。セッション変数を設定するだけで完了です。機能的にシンプルで低リスク。
- コンテナ/フレームワークがあなたのためにそれをするので、ユーザー訪問とショッピングカートのライフサイクルを管理する必要はありません
- 通常、古いアイドルセッションの自動クリーンアップは自動的に行われます。
セッションストレージの欠点:
- レプリケーションを調査しない限り、セッションアフィニティ
- レプリケーションを調査するか、ディスクへのセッション状態の手動永続性を調査しない限り、フェイルオーバーはありません。
- すべてのセッションはメモリに保存する必要があります。レプリケーションを使用する場合、これは増幅されます。
データベースストレージの利点:
- セッションアフィニティまたは状態のレプリケーションについて心配する必要はありません。すべてのリクエストをラウンドロビンできます。
- アプリケーションのメモリオーバーヘッドが少ない。
- 注文が完了すると、とにかくすべてがデータベースに格納されるため、データが既に存在するため、これにより完了が容易になります。
データベースストレージの欠点:
- 放棄されたカート-一部の匿名ユーザーがショッピングカートにアイテムを追加して消えました。何らかの種類の有効期限プロセスがない限り、そのデータは永久に存在し続けます。
- ユーザーを追跡し、特定の要求に対して、これが既存または新しいブラウジングセッションを表しているかどうかを把握する方法を考え出す必要があります。(はい、Cookieを使用すればおそらく簡単ですが、2人のユーザーが同じIDにならないようにするにはどうすればよいでしょうか?)
- より多くのコード
使用しているプラットフォームについては言及しませんでした。私は、リクエスト/レスポンスサイクルの存続期間中にのみセッションデータがメモリに存在し、データベースからロードしてデータベースに保存するデータベースバックアップセッションを使用するアプローチを探します。これは過去に私に役立っています。
データベースバックアップセッションの利点:
- サーバーアフィニティの必要はありません。
- アプリサーバーのメモリで簡単
- アイドル/放棄されたセッションデータは自動的にクリーンアップされます。
- ユーザーの最初の訪問、繰り返しの訪問、セッション終了のライフサイクルはすべてあなたのために把握されます。
- コーディングが簡単
データベースでバックアップされたセッションの欠点:
- 構成-コンテナを調査する必要があります。PHP、Java EE(Tomcat、Jetty、JBossなど)、node.js + express.js、またはこれをサポートしていないもので、適切な構成を提供してください。
- 要求ごとに2つのデータベース操作を追加するため、これを負荷テストする必要がある場合があります。
第三の可能性があり、誰かが以前に触れました。セッションの使用を完全にスキップし、すべてをCookieまたはHTMLローカルストレージに埋め込むことにより、クライアント側のストレージを使用できます。
その長所/短所は演習として残しますが、html5ストレージの場合、ブラウザーの互換性は慎重に検討する必要があるかもしれないというヒントを示します。
私はあなたのために事実を概説しました。うまくいけば、これがあなたの状況に合った正しい決定を下すのに役立つことを願っています。